Index: /trunk/src/game/Creature.h
===================================================================
--- /trunk/src/game/Creature.h (revision 6)
+++ /trunk/src/game/Creature.h (revision 14)
@@ -511,4 +511,5 @@
         void CallAssistence();
         void SetNoCallAssistence(bool val) { m_AlreadyCallAssistence = val; }
+        void DoFleeToGetAssistance(float radius = 50);
 
         MovementGeneratorType GetDefaultMovementType() const { return m_defaultMovementType; }
Index: /trunk/src/game/Creature.cpp
===================================================================
--- /trunk/src/game/Creature.cpp (revision 6)
+++ /trunk/src/game/Creature.cpp (revision 14)
@@ -1645,4 +1645,38 @@
 }
 
+void Creature::DoFleeToGetAssistance(float radius) // Optional parameter
+{
+    if (!getVictim())
+        return;
+
+    Creature* pCreature = NULL;
+
+    CellPair p(MaNGOS::ComputeCellPair(GetPositionX(), GetPositionY()));
+    Cell cell(p);
+    cell.data.Part.reserved = ALL_DISTRICT;
+    cell.SetNoCreate();
+
+    MaNGOS::NearestAssistCreatureInCreatureRangeCheck u_check(this,getVictim(),radius);
+    MaNGOS::CreatureLastSearcher<MaNGOS::NearestAssistCreatureInCreatureRangeCheck> searcher(pCreature, u_check);
+
+    TypeContainerVisitor<MaNGOS::CreatureLastSearcher<MaNGOS::NearestAssistCreatureInCreatureRangeCheck>, GridTypeMapContainer >  grid_creature_searcher(searcher);
+
+    CellLock<GridReadGuard> cell_lock(cell, p);
+    cell_lock->Visit(cell_lock, grid_creature_searcher, *(GetMap()));
+
+    if(!GetMotionMaster()->empty() && (GetMotionMaster()->GetCurrentMovementGeneratorType() != POINT_MOTION_TYPE))
+        GetMotionMaster()->Clear(false);
+    if(pCreature == NULL)
+    {
+        GetMotionMaster()->MoveIdle();
+        GetMotionMaster()->MoveFleeing(getVictim());
+    }
+    else
+    {
+        GetMotionMaster()->MoveIdle();
+        GetMotionMaster()->MovePoint(0,pCreature->GetPositionX(),pCreature->GetPositionY(),pCreature->GetPositionZ());
+    }
+}
+
 void Creature::CallAssistence()
 {
Index: /trunk/src/bindings/scripts/include/sc_creature.h
===================================================================
--- /trunk/src/bindings/scripts/include/sc_creature.h (revision 13)
+++ /trunk/src/bindings/scripts/include/sc_creature.h (revision 14)
@@ -72,4 +72,7 @@
     //Bool for if we are in combat or not
     bool InCombat;
+
+    //For fleeing
+    bool IsFleeing;
 
     //*************
Index: /trunk/src/bindings/scripts/scripts/creature/mob_event_ai.cpp
===================================================================
--- /trunk/src/bindings/scripts/scripts/creature/mob_event_ai.cpp (revision 6)
+++ /trunk/src/bindings/scripts/scripts/creature/mob_event_ai.cpp (revision 14)
@@ -80,4 +80,5 @@
     uint32 AttackDistance;                                  //Distance to attack from
     float AttackAngle;                                      //Angle of attack
+    uint32 TimetoFleeLeft;                                  //For fleeing
 
     void AttackTarget(Unit* pTarget, bool Follow)
@@ -775,6 +776,7 @@
         case ACTION_T_FLEE:
             {
-                //TODO: Replace with Flee movement generator
-                m_creature->CastSpell(m_creature, SPELL_RUN_AWAY, true);
+                TimetoFleeLeft = 8000;
+                m_creature->DoFleeToGetAssistance();
+                IsFleeing = true;
             }
             break;
@@ -955,4 +957,5 @@
     {
         InCombat = false;
+        IsFleeing = false;
         Reset();
 
@@ -1015,4 +1018,5 @@
 
         InCombat = false;
+        IsFleeing = false;
         Reset();
 
@@ -1035,4 +1039,5 @@
     {
         InCombat = false;
+        IsFleeing = false;
         Reset();
 
@@ -1132,5 +1137,5 @@
             return;
 
-        if (who->isTargetableForAttack())
+        if (who->isTargetableForAttack() && !IsFleeing)
         {
             //Begin melee attack if we are within range
@@ -1224,4 +1229,18 @@
         //Must return if creature isn't alive. Normally select hostil target and get victim prevent this
         if (!m_creature->isAlive())
+            return;
+
+        if ((TimetoFleeLeft < diff || (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() != POINT_MOTION_TYPE && m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() != FLEEING_MOTION_TYPE)) && IsFleeing)
+        {
+            m_creature->GetMotionMaster()->Clear(false);
+            m_creature->SetNoCallAssistence(false);
+            m_creature->CallAssistence();
+            m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
+            IsFleeing = false;
+        } 
+        else
+            TimetoFleeLeft -= diff;
+
+        if(IsFleeing)
             return;
 
