Index: src/object_cmd.cpp
===================================================================
--- src/object_cmd.cpp (revision 27655)
+++ src/object_cmd.cpp (working copy)
@@ -770,6 +770,8 @@
{
if (!IsTileOwner(tile, old_owner)) return;
+ bool do_clear = false;
+
if (IsObjectType(tile, OBJECT_OWNED_LAND) && new_owner != INVALID_OWNER) {
SetTileOwner(tile, new_owner);
} else if (IsObjectType(tile, OBJECT_STATUE)) {
@@ -780,12 +782,18 @@
SetBit(t->statues, new_owner);
SetTileOwner(tile, new_owner);
} else {
- ReallyClearObjectTile(Object::GetByTile(tile));
+ do_clear = true;
}
SetWindowDirty(WC_TOWN_AUTHORITY, t->index);
} else {
+ do_clear = true;
+ }
+
+ if (do_clear) {
ReallyClearObjectTile(Object::GetByTile(tile));
+ /* When clearing objects, they may turn into canal, which may require transfering ownership. */
+ ChangeTileOwner(tile, old_owner, new_owner);
}
}