anchor.diff:    begin
       if (aIdx >= Count) then
         Exit;
  -    if not Plans[aIdx].Placed then // Unlock house plan
  +    if (Plans[aIdx].House = nil) then // Unlock house plan
         gHands[fOwner].AI.CityManagement.Builder.UnLockHouseLoc(aHT, Plans[aIdx].Loc);
       Count := Count - 1;
       Plans[aIdx] := Plans[Count];
  
positive.code:       Exit;
      for I := 0 to fPlannedHouses[ht_Woodcutters].Count - 1 do
        with fPlannedHouses[ht_Woodcutters].Plans[I] do
          if Placed then
          begin
            W := TKMHouseWoodcutters( gHands[fOwner].Houses.GetHouseByUID(UID) );
            if (W <> nil)
              AND not W.IsDestroyed
              AND (W.IsComplete)
              AND (W.WoodcutterMode <> wcm_Chop)
              AND (KMDistanceSQR(aW.FlagPoint, W.FlagPoint) < SQR_RAD) then
            begin
              MarkAsExhausted(aW.HouseType, aW.Entrance);
  
negative.code:   for HT := HOUSE_MIN to HOUSE_MAX do
    begin
      SaveStream.Write(fPlannedHouses[HT].Count);
      SaveStream.Write(fPlannedHouses[HT].Calculated);
      Len := Length(fPlannedHouses[HT].Plans);
      SaveStream.Write( Len );
      for I := 0 to fPlannedHouses[HT].Count - 1 do
        with fPlannedHouses[HT].Plans[I] do
        begin
          SaveStream.Write(Placed);
          SaveStream.Write(ShortcutsCompleted);
          SaveStream.Write(RemoveTreeInPlanProcedure);
          SaveStream.Write(HouseReservation);
          SaveStream.Write(ChopOnly);
          if (House <> nil) then
            SaveStream.Write(House.UID) // Store ID
          else
            SaveStream.Write(Integer(0));
          SaveStream.Write(Loc, SizeOf(Loc));
          SaveStream.Write(SpecPoint, SizeOf(SpecPoint));
        end;
    end;
  
    SaveStream.Write(fPerfIdx);
  