anchor.diff:    Output := False;
     BestBid := MAX_BID;
     for I := fPlannedHouses[aHT].Count - 1 downto 0 do
  -    if not fPlannedHouses[aHT].Plans[I].Placed then
  -    begin
  -      if fPlannedHouses[aHT].Plans[I].RemoveTreeInPlanProcedure OR gAIFields.Eye.CanAddHousePlan(fPlannedHouses[aHT].Plans[I].Loc, aHT, True, True) then
  -      begin
  -        if (aHT in [ht_GoldMine, ht_IronMine, ht_CoalMine, ht_Quary]) AND CheckMine(I) then // Filter mines / chop-only woodcutters
  -          continue;
  -        Bid := DistFromStore(fPlannedHouses[aHT].Plans[I].Loc) + ObstaclesInHousePlan(aHT, fPlannedHouses[aHT].Plans[I].Loc);
  -        if  (aHT = ht_Woodcutters) then
  +    with fPlannedHouses[aHT].Plans[I] do
  +      if not Placed then
  +      begin
  +        if RemoveTreeInPlanProcedure OR gAIFields.Eye.CanAddHousePlan(Loc, aHT, True, True) then
           begin
  -          SpecPoint := fPlannedHouses[aHT].Plans[I].SpecPoint;
  -          Bid := Bid - Byte(gAIFields.Influences.AvoidBuilding[SpecPoint.Y, SpecPoint.X] = 0) * CHOP_ONLY_ADVANTAGE; // Chop only mode
  -        end;
  -        if (Bid < BestBid) then
  -        begin
  -          BestBid := Bid;
  -          BestIdx := I;
  -        end;
  -        break;
  -      end
  -      else
  -        RemovePlan(aHT, I);
  -    end;
  +          if (aHT in [ht_GoldMine, ht_IronMine, ht_CoalMine, ht_Quary]) AND CheckMine(I) then // Filter mines / chop-only woodcutters
  +            continue;
  +          Bid := DistFromStore(Loc) + ObstaclesInHousePlan(aHT, Loc);
  +          if  (aHT = ht_Woodcutters) then
  +          begin
  +            SpecPoint := SpecPoint;
  +            Bid := Bid - Byte(gAIFields.Influences.AvoidBuilding[SpecPoint.Y, SpecPoint.X] = 0) * CHOP_ONLY_ADVANTAGE; // Chop only mode
  +          end;
  +          if (Bid < BestBid) then
  +          begin
  +            BestBid := Bid;
  +            BestIdx := I;
  +          end;
  +          break;
  +        end
  +        else
  +          RemovePlan(aHT, I);
  +      end;
     if (BestBid <> MAX_BID) then
     begin
       aLoc := fPlannedHouses[aHT].Plans[BestIdx].Loc;
  
positive.code: 
    fRoadPlanner.Load(LoadStream);
    fRoadShortcutPlanner.Load(LoadStream);
  end;
  
  
  
negative.code: 
  
  destructor TKMCityPlanner.Destroy();
  var
    HT: TKMHouseType;
    I, K, Len: Integer;
  begin
    for HT := HOUSE_MIN to HOUSE_MAX do
      for I := 0 to fPlannedHouses[HT].Count - 1 do
        if (fPlannedHouses[HT].Plans[I].House <> nil) then
          gHands.CleanUpHousePointer(fPlannedHouses[HT].Plans[I].House);
    fRoadPlanner.Free;
    fForestsNearby.Free;
    fRoadShortcutPlanner.Free;
  