anchor.diff:    if not fRouteBuilt then
       fLog.AddToLog('Unable to make a route '+TypeToString(fWalkFrom)+' > '+TypeToString(fWalkTo)+'with canWalk');
   
  -  if fRouteBuilt then
  -  if not fWalkToSpot then dec(NodeCount); //Approach spot from any side
  +  if fRouteBuilt and not fWalkToSpot then dec(NodeCount); //Approach spot from any side
  +end;
  +
  +
  +function TUnitActionWalkTo.ChoosePassability(KMUnit: TKMUnit; DoIgnorePass:boolean):TPassability;
  +begin
  +  case KMUnit.fUnitType of //Select desired passability depending on unit type
  +    ut_Serf..ut_Fisher,ut_StoneCutter..ut_Recruit: Result:=canWalkRoad; //Citizens except Worker
  +    ut_Wolf..ut_Duck: Result:=AnimalTerrain[byte(KMUnit.fUnitType)] //Animals
  +    else Result:=canWalk; //Worker, Warriors
  +  end;
  +
  +  if not DO_SERFS_WALK_ROADS then Result:=canWalk; //Reset everyone to canWalk for debug
  +
  +  //Thats for 'miners' at work
  +  if (KMUnit.fUnitType in [ut_Woodcutter,ut_Farmer,ut_Fisher,ut_StoneCutter])and(KMUnit.fUnitTask is TTaskMining) then
  +    Result:=canWalk;
  +
  +  if DoIgnorePass then Result:=canAll; //Thats for Workers walking on house area and maybe some other cases?
   end;
   
   
  
positive.code:         Explanation:string; //Debug only, explanation what unit is doing
        public
          constructor Create(KMUnit: TKMUnit; LocB,Avoid:TKMPoint; const aActionType:TUnitActionType=ua_Walk; const aWalkToSpot:boolean=true; const IgnorePass:boolean=false);
          function DoUnitInteraction():boolean;
          procedure Execute(KMUnit: TKMUnit; TimeDelta: single; out DoEnd: Boolean); override;
        end;
  
negative.code: { TUnitActionWalkTo }
  constructor TUnitActionWalkTo.Create(KMUnit: TKMUnit; LocB,Avoid:TKMPoint; const aActionType:TUnitActionType=ua_Walk; const aWalkToSpot:boolean=true; const IgnorePass:boolean=false);
  begin
    Assert(LocB.X*LocB.Y<>0,'Illegal WalkTo 0;0');
  
    Inherited Create(aActionType);
    fWalker       := KMUnit;
    fWalkFrom     := fWalker.GetPosition;
    fWalkTo       := LocB;
    fWalkToSpot   := aWalkToSpot;
    fPass         := ChoosePassability(fWalker, IgnorePass);
  
    NodePos       :=1;
    fRouteBuilt   :=false;     
  
    if KMSamePoint(fWalkFrom,fWalkTo) then //We don't care for this case, Execute will report action is done immediately
      exit; //so we don't need to perform any more processing
  
    //Build a route A*
    fTerrain.Route_Make(fWalkFrom, fWalkTo, Avoid, fPass, NodeCount, Nodes); //Try to make the route with fPass
  