anchor.diff:        Exit;
       for I := 0 to fPlannedHouses[ht_Woodcutters].Count - 1 do
         with fPlannedHouses[ht_Woodcutters].Plans[I] do
  -        if Placed then
  +        if Placed
  +          AND (House <> nil)
  +          AND not House.IsDestroyed
  +          AND House.IsComplete then
           begin
  -          W := TKMHouseWoodcutters( gHands[fOwner].Houses.GetHouseByUID(UID) );
  -          if (W <> nil)
  -            AND not W.IsDestroyed
  -            AND (W.IsComplete)
  -            AND (W.WoodcutterMode <> wcm_Chop)
  +          W := TKMHouseWoodcutters( House );
  +          if (W.WoodcutterMode <> wcm_Chop)
               AND (KMDistanceSQR(aW.FlagPoint, W.FlagPoint) < SQR_RAD) then
             begin
               MarkAsExhausted(aW.HouseType, aW.Entrance);
  
positive.code:       HT := H.HouseType;
        CheckExistHouse := False;
        for K := 0 to fPlannedHouses[HT].Count - 1 do
          if KMSamePoint(fPlannedHouses[HT].Plans[K].Loc, gHands[fOwner].Houses[I].Entrance) then
          begin
            CheckExistHouse := True;
            break;
          end;
        if not CheckExistHouse then
        begin
          if (HT = ht_Woodcutters) then
            AddPlan(HT, gHands[fOwner].Houses[I].Entrance, TKMHouseWoodcutters(H).FlagPoint, TKMHouseWoodcutters(H).WoodcutterMode = wcm_Chop)
          else
            AddPlan(HT, gHands[fOwner].Houses[I].Entrance);
        end;
      end;
    end;
  end;
  
  
negative.code: type
    THousePlan = record
      Placed, ShortcutsCompleted, RemoveTreeInPlanProcedure, HouseReservation, ChopOnly: Boolean;
      House: TKMHouse;
      Loc, SpecPoint: TKMPoint;
    end;
    THousePlanArray = record
      Count, Calculated: Word;
      Plans: array of THousePlan;
    end;
    TPlannedHousesArray = array [HOUSE_MIN..HOUSE_MAX] of THousePlanArray;
  