public Element featureChange(Element element) {
        Game game = getGame();
        Specification spec = game.getSpecification();
        boolean add = "add".equalsIgnoreCase(element.getAttribute("add"));
        FreeColGameObject object = game.getFreeColGameObject(element.getAttribute("id"));
        NodeList nodes = element.getChildNodes();
        for (int i = 0; i < nodes.getLength(); i++) {
            Element e = (Element) nodes.item(i);
            String tag = e.getTagName();
            if (tag == null) {
                logger.warning("featureChange null tag");
            } else if (tag == Modifier.getXMLElementTagName()) {
                Modifier m = new Modifier(spec);
                m.readFromXMLElement(e, spec);
                if (add) {
                    object.addModifier(m);
                } else {
                    object.removeModifier(m);
                }
            } else if (tag == Ability.getXMLElementTagName()) {
                Ability a = new Ability("");
                a.readFromXMLElement(e, spec);
                if (add) {
                    object.addAbility(a);
                } else {
                    object.removeAbility(a);
                }
            } else {
                logger.warning("featureChange unrecognized: " + tag);
            }
        }
        return null;
    }