anchor.diff:            target = battleUnit;
             action = Goal.KILL_TARGET;
             minimumTargetDistance = distance;
  +          foundTarget = true;
           }
         }
       }
   
  -    return true;
  +    return foundTarget;
     }
   
     void update(BattleSystem battleSystem, num dt) {
   
       // Momentum
       velocity.scale(0.1);
  -    separationForce.scale(0.1);
  +    accumulator.setZero();
  +    separationForce.setZero();
  +    enemyAttractionForce.setZero();
   
       battleSystem.battleUnits.forEach((BattleUnit battleUnit) {
  -      if (this != battleUnit && this.position.distanceTo(battleUnit.position) < 1.5) {
  -        temp = position - battleUnit.position;
  -        num distanceScale = 0.05 / (temp.x * temp.x + temp.y * temp.y);
  -        temp.normalize();
  -        temp.scale(distanceScale);
  -        temp.copyInto(separationForce);
  +      if (this != battleUnit && this.position.distanceTo(battleUnit.position) < 1) {
  +        separationForce = position - battleUnit.position;
  +        num distSq = separationForce.length2 + 0.000001; // To prevent divide by zero
  +        num distanceScale = 0.5 / (distSq);
  +        separationForce.normalize();
  +        separationForce.scale(distanceScale);
  +        separationForce.copyInto(separationForce);
         }
       });
   
  -    accumulator += temp;
  +    accumulator += separationForce;
   
       if (action == Goal.IDLE) {
         acquireTarget(battleSystem, dt);
  
positive.code:   }
  
    bool acquireTarget(BattleSystem battleSystem, num dt) {
      minimumTargetDistance = 10000;
  
      // Then look for a target
      for (num i = 0; i < battleSystem.battleUnits.length; i++) {
  
negative.code: 
    Vector2 position = new Vector2.zero();
    Vector2 velocity = new Vector2.zero();
  
    Vector2 separationForce = new Vector2.zero();
    Vector2 enemyAttractionForce = new Vector2.zero();
    Vector2 accumulator = new Vector2.zero();
  
    num angle = 0;
  