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); } }