anchor.diff:  
   function TUnitActionWalkTo.IntSolutionDodge(fOpponent:TKMUnit; HighestInteractionCount:integer):boolean;
   var i:shortint;
  -    TempPos: TKMPoint;
  +    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
  
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.IntSolutionExchange(fOpponent:TKMUnit; HighestInteractionCount:integer):boolean;
  var OpponentNextNextPos: TKMPoint;
  begin
    Result := false;
    //Do not initiate exchanges if we are in DestBlocked mode, as we are zero priority and other units will
  