protected void readChild(XMLStreamReader in) throws XMLStreamException {
        if (in.getLocalName().equals(Colony.getXMLElementTagName())) {
            settlement = updateFreeColGameObject(in, Colony.class);
        } else if (in.getLocalName().equals(IndianSettlement.getXMLElementTagName())) {
            settlement = updateFreeColGameObject(in, IndianSettlement.class);
        } else if (in.getLocalName().equals(UNITS_TAG_NAME)) { // @compat 0.10.1
            while (in.nextTag() != XMLStreamConstants.END_ELEMENT) {
                if (in.getLocalName().equals(Unit.getXMLElementTagName())) {
                    add(updateFreeColGameObject(in, Unit.class));
                }
            }
            // end compatibility code
        } else if (in.getLocalName().equals(TileItemContainer.getXMLElementTagName())) {
            tileItemContainer = getGame().getFreeColGameObject(in.getAttributeValue(null, ID_ATTRIBUTE),
                                                               TileItemContainer.class);
            if (tileItemContainer != null) {
                tileItemContainer.readFromXML(in);
            } else {
                tileItemContainer = new TileItemContainer(getGame(), this, in);
            }
        } else if (in.getLocalName().equals(PlayerExploredTile.getXMLElementTagName())) {
            // Only from a savegame:
            Player player = getGame().getFreeColGameObject(in.getAttributeValue(null, "player"),
                                                           Player.class);
            PlayerExploredTile pet = getPlayerExploredTile(player);
            if (pet == null) {
                pet = new PlayerExploredTile(getGame(), in);
                playerExploredTiles.put(player, pet);
            } else {
                pet.readFromXML(in);
            }
        } else {
            super.readChild(in);
        }
    }