Index: trunk/src/bindings/scripts/include/sc_creature.h
===================================================================
--- trunk/src/bindings/scripts/include/sc_creature.h (revision 153)
+++ trunk/src/bindings/scripts/include/sc_creature.h (revision 174)
@@ -75,4 +75,7 @@
     //Called at waypoint reached or PointMovement end
     void MovementInform(uint32, uint32){}
+
+    // Called when AI is temporarily replaced or put back when possess is applied or removed
+    void OnPossess(bool apply) {}
 
     //*************
Index: trunk/src/bindings/scripts/scripts/npc/npc_escortAI.h
===================================================================
--- trunk/src/bindings/scripts/scripts/npc/npc_escortAI.h (revision 90)
+++ trunk/src/bindings/scripts/scripts/npc/npc_escortAI.h (revision 174)
@@ -52,4 +52,6 @@
         void MovementInform(uint32, uint32);
 
+        void OnPossess(bool apply);
+
         // EscortAI functions
         void AddWaypoint(uint32 id, float x, float y, float z, uint32 WaitTimeMs = 0);
Index: trunk/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
===================================================================
--- trunk/src/bindings/scripts/scripts/npc/npc_escortAI.cpp (revision 158)
+++ trunk/src/bindings/scripts/scripts/npc/npc_escortAI.cpp (revision 174)
@@ -257,4 +257,23 @@
 }
 
+void npc_escortAI::OnPossess(bool apply)
+{
+    // We got possessed in the middle of being escorted, store the point 
+    // where we left off to come back to when possess is removed
+    if (IsBeingEscorted)
+    {
+        if (apply)
+            m_creature->GetPosition(LastPos.x, LastPos.y, LastPos.z);
+        else
+        {
+            Returning = true;
+            m_creature->GetMotionMaster()->MovementExpired();
+            m_creature->GetMotionMaster()->MovePoint(WP_LAST_POINT, LastPos.x, LastPos.y, LastPos.z);
+        }
+    }
+}
+
+
+
 void npc_escortAI::AddWaypoint(uint32 id, float x, float y, float z, uint32 WaitTimeMs)
 {
