anchor.diff:  end;
   
   
  -function TUnitActionWalkTo.GetNextNextPosition:TKMPoint;
  -begin
  -  // todo: find means to control range of NodePos
  -  Assert(InRange(NodePos, 1, NodeList.Count));
  -  Result:=NodeList.List[NodePos+1];
  +function TUnitActionWalkTo.GetNextNextPosition(out NextNextPos:TKMPoint):boolean;
  +begin
  +  if InRange(NodePos, 1, NodeList.Count) then
  +  begin
  +    NextNextPos := NodeList.List[NodePos+1];
  +    Result := true;
  +  end
  +  else
  +  begin
  +    NextNextPos := KMPoint(0,0);
  +    Result := false; //Our route is not that long, so there is no "NextNext" position
  +    //@Crow: This is not an error. That old comment "Error" was a mistake, I see why you thought it was that way.
  +    //       I have changed it to return boolean and use "out" as you have been doing in other places.
  +    //       Please check I did it right. Thanks for your great help, you're doing a good job :) From Lewin. To be deleted.
  +  end;
   end;
   
   
  
positive.code:           and ((not KMStepIsDiag(fWalker.NextPosition,NodeList.List[NodePos+1])) //Isn't diagonal
            or ((KMStepIsDiag(fWalker.NextPosition,NodeList.List[NodePos+1])       //...or is diagonal and...
            and not fTerrain.HasVertexUnit(KMGetDiagVertex(fWalker.GetPosition,TempPos))))) then //...vertex is free
            if KMSamePoint(TUnitActionWalkTo(fAltOpponent.GetUnitAction).GetNextNextPosition, fWalker.GetPosition) then //Now see if they want to exchange with us
            begin
              //Perform exchange from our position to TempPos
              TUnitActionWalkTo(fAltOpponent.GetUnitAction).PerformExchange(KMPoint(0,0)); //Request unforced exchange
  
              Explanation:='Unit on tile next to target tile wants to swap. Performing an exchange';
              ExplanationLogAdd;
              fDoExchange := true;
              ChangeStepTo(TempPos);
              //They both will exchange next tick
              Result := true; //Means exit DoUnitInteraction
            end;
        end;
      end;
    end;
  
negative.code: 
  function TUnitActionWalkTo.IntSolutionDodge(fOpponent:TKMUnit; HighestInteractionCount:integer):boolean;
  var i:shortint;
      TempPos, OpponentNextNextPos: TKMPoint;
      fAltOpponent:TKMUnit;
  begin
    //If there is a unit on one of the tiles either side of target that wants to swap, do so
  