anchor.diff:    Distance := ACTION_TIME_DELTA * fWalker.GetSpeed;
   
     //Check if unit has arrived on tile
  -  if Equals(fWalker.PositionF.X,NodeList.List[NodePos].X,Distance/2) and
  -     Equals(fWalker.PositionF.Y,NodeList.List[NodePos].Y,Distance/2) then
  -  begin
  -    //First of all make changes to our route if we are supposed to be tracking a unit
  -    if (fTargetUnit <> nil) and not KMSamePoint(fTargetUnit.GetPosition,fWalkTo) then
  +  if KMSamePointF(fWalker.PositionF, KMPointF(NodeList.List[NodePos]), Distance/2) then
  +  begin
  +
  +    //Set precise position to avoid rounding errors
  +    fWalker.PositionF := KMPointF(NodeList.List[NodePos]);
  +    if (NodePos > 1) and (not WaitingOnStep) and KMStepIsDiag(NodeList.List[NodePos-1],NodeList.List[NodePos]) then DecVertex; //Unoccupy vertex
  +    WaitingOnStep := true;
  +
  +    GetIsStepDone := true; //Unit stepped on a new tile
  +    fWalker.IsExchanging := false; //Disable sliding (in case it was set in previous step)
  +
  +
  +    { Update destination point }
  +
  +    //Make changes to our route if we are supposed to be tracking a unit
  +    if CanAbandon and (fTargetUnit <> nil) and not KMSamePoint(fTargetUnit.GetPosition,fWalkTo) then
       begin
         ChangeWalkTo(fTargetUnit.GetPosition,false,false); //If target unit has moved then change course and follow it (don't reset target unit)
         //If we are a warrior commander tell our memebers to use this new position
  
positive.code:     end;
  
      //See if we have a request to change our route from ChangeWalkTo
      if not KMSamePoint(fNewWalkTo,KMPoint(0,0)) then
      begin
        fWalkTo := fNewWalkTo;
        fWalkFrom := NodeList.List[NodePos];
  
negative.code:       end;
  
      //Walk complete
      if CanAbandon and ((NodePos=NodeList.Count) or ((not fWalkToSpot) and (KMLength(fWalker.GetPosition,fWalkTo) < 1.5)) or
        ((fTargetUnit <> nil) and (KMLength(fWalker.GetPosition,fTargetUnit.GetPosition) < 1.5)) or //If we are walking to a unit check to see if we've met the unit early
        ((fWalker.GetUnitTask <> nil) and fWalker.GetUnitTask.WalkShouldAbandon)) then //See if task wants us to abandon
      begin
  