Index: /trunk/src/game/WorldSession.h
===================================================================
--- /trunk/src/game/WorldSession.h (revision 174)
+++ /trunk/src/game/WorldSession.h (revision 189)
@@ -321,4 +321,5 @@
         void HandlePossessedMovement(WorldPacket& recv_data, MovementInfo& movementInfo, uint32& MovementFlags);
         void HandleSetActiveMoverOpcode(WorldPacket &recv_data);
+        void HandleNotActiveMoverOpcode(WorldPacket &recv_data);
         void HandleMoveTimeSkippedOpcode(WorldPacket &recv_data);
 
Index: /trunk/src/game/Opcodes.cpp
===================================================================
--- /trunk/src/game/Opcodes.cpp (revision 152)
+++ /trunk/src/game/Opcodes.cpp (revision 189)
@@ -750,5 +750,5 @@
     /*0x2CF*/ { "CMSG_MOVE_FEATHER_FALL_ACK",       STATUS_LOGGEDIN, &WorldSession::HandleFeatherFallAck            },
     /*0x2D0*/ { "CMSG_MOVE_WATER_WALK_ACK",         STATUS_LOGGEDIN, &WorldSession::HandleMoveWaterWalkAck          },
-    /*0x2D1*/ { "CMSG_MOVE_NOT_ACTIVE_MOVER",       STATUS_NEVER,    &WorldSession::Handle_NULL                     },
+    /*0x2D1*/ { "CMSG_MOVE_NOT_ACTIVE_MOVER",       STATUS_LOGGEDIN, &WorldSession::HandleNotActiveMoverOpcode      },
     /*0x2D2*/ { "SMSG_PLAY_SOUND",                  STATUS_NEVER,    &WorldSession::Handle_ServerSide               },
     /*0x2D3*/ { "CMSG_BATTLEFIELD_STATUS",          STATUS_LOGGEDIN, &WorldSession::HandleBattlefieldStatusOpcode   },
Index: /trunk/src/game/MovementHandler.cpp
===================================================================
--- /trunk/src/game/MovementHandler.cpp (revision 174)
+++ /trunk/src/game/MovementHandler.cpp (revision 189)
@@ -539,4 +539,9 @@
 }
 
+void WorldSession::HandleNotActiveMoverOpcode(WorldPacket& /*recv_data*/)
+{
+    sLog.outDebug("WORLD: Recvd CMSG_MOVE_NOT_ACTIVE_MOVER");
+}
+
 void WorldSession::HandleMountSpecialAnimOpcode(WorldPacket& /*recvdata*/)
 {
Index: /trunk/src/game/Player.cpp
===================================================================
--- /trunk/src/game/Player.cpp (revision 186)
+++ /trunk/src/game/Player.cpp (revision 189)
@@ -18661,4 +18661,6 @@
     SetPossessedTarget(target);
 
+    uint32 flags1 = target->GetUInt32Value(UNIT_FIELD_FLAGS);
+
     target->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, getFaction());
     target->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
@@ -18668,4 +18670,6 @@
     SetUInt64Value(PLAYER_FARSIGHT, target->GetGUID());
 
+    uint32 flags2 = target->GetUInt32Value(UNIT_FIELD_FLAGS);
+
     if(target->GetTypeId() == TYPEID_UNIT)
     {
@@ -18721,4 +18725,8 @@
     }
 
+    // Interrupt any current casting of the target
+    if(target->IsNonMeleeSpellCasted(true))
+        target->InterruptNonMeleeSpells(true);
+
     RemovePossessedTarget();
 
@@ -18744,5 +18752,4 @@
 
     target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNKNOWN5);
-    target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
     RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
     SetUInt64Value(PLAYER_FARSIGHT, 0);
@@ -18759,16 +18766,12 @@
     else
     {
+        target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
         if(((Creature*)target)->isPet())
-        {
-            ((Pet*)target)->InitPetCreateSpells();
             PetSpellInitialize();
-        }
-
-        if (target->isAlive())
+        else if (target->isAlive())
         {
             // If we're still hostile to our target, continue attacking otherwise reset threat and go home
-            if (target->getVictim())
-            {
-                Unit* victim = target->getVictim();
+            if (Unit* victim = target->getVictim())
+            {
                 FactionTemplateEntry const* t_faction = target->getFactionTemplateEntry();
                 FactionTemplateEntry const* v_faction = victim->getFactionTemplateEntry();
@@ -18784,5 +18787,5 @@
                 }
             } 
-            else if (target->GetTypeId() == TYPEID_UNIT)
+            else
             {
                 target->GetMotionMaster()->Clear();
@@ -18791,5 +18794,5 @@
             
             // Add high amount of threat on the player
-            if(target != GetPet() && attack)
+            if(attack)
                 target->AddThreat(this, 1000000.0f);
         }
