protected void readChild(XMLStreamReader in) throws XMLStreamException {
        Game game = getGame();
        if (in.getLocalName().equals(IndianSettlement.MISSIONARY_TAG_NAME)) {
            in.nextTag(); // advance to the Unit tag
            missionary = updateFreeColGameObject(in, Unit.class);
            in.nextTag(); // close <missionary> tag
        } else if (in.getLocalName().equals(Resource.getXMLElementTagName())) {
            Resource resource = game.getFreeColGameObject(in.getAttributeValue(null, ID_ATTRIBUTE),
                                                          Resource.class);
            if (resource != null) {
                resource.readFromXML(in);
            } else {
                resource = new Resource(game, in);
            }
            tileItems.add(resource);
        } else if (in.getLocalName().equals(LostCityRumour.getXMLElementTagName())) {
            LostCityRumour lostCityRumour = game.getFreeColGameObject(in.getAttributeValue(null, ID_ATTRIBUTE),
                                                                      LostCityRumour.class);
            if (lostCityRumour != null) {
                lostCityRumour.readFromXML(in);
            } else {
                lostCityRumour = new LostCityRumour(game, in);
            }
            tileItems.add(lostCityRumour);
        } else if (in.getLocalName().equals(TileImprovement.getXMLElementTagName())) {
            TileImprovement ti = game.getFreeColGameObject(in.getAttributeValue(null, ID_ATTRIBUTE),
                                                           TileImprovement.class);
            if (ti != null) {
                ti.readFromXML(in);
            } else {
                ti = new TileImprovement(game, in);
            }
            tileItems.add(ti);
        } else {
            logger.warning("Unknown tag: " + in.getLocalName()
                           + " loading PlayerExploredTile");
            in.nextTag();
        }
    }