         timeFromLastScan_ += timeStep;
         timeFromLastShotRaycasting_ += timeStep;
         
-        if (timeFromLastScan_ > 0.4f)
+        if ((timeFromLastScan_ > 0.2f and not isLastDecisionRunAway_) or
+            timeFromLastScan_ > 0.75f)
         {
             Array <Node @> @enemies = GetEnemiesNear ();
             float runAwayPoints = CalculateRunAwayDecisionPoints (enemies);

                processingNode.vars ["ObjectType"].GetInt () ==
                SerializationConstants__OBJECT_TYPE_PLAYER and
                not processingNode.HasTag ("Died") and
                (processingNode.position - node.position).length < 30.0f)
                
                enemiesNear.Push (processingNode);
        }

            ray.direction = processingEnemy.worldRotation * Vector3 (0, 0, 1);
            
            PhysicsRaycastResult result = 
                physicsWorld.RaycastSingle (ray, 30.0f);
                
            if (result.body !is null and 
                result.body.node.id == node.id)
            {
                int myExp = node.vars ["Exp"].GetInt ();
                int enemyExp = processingEnemy.vars ["Exp"].GetInt ();
                runAwayDecisionPoints += 20.0f * (10.0f + enemyExp - myExp);
            }
        }
        return runAwayDecisionPoints;
