+ std::map <std::string, XMLNode*>::iterator i = object_map.find (id);
+ if (i != object_map.end()) {
+ return i->second;
+ }
+ //assert (get_node (&_state, id) == 0); // XXX performance penalty due to get_node()
+ XMLNode* child = new XMLNode (X_("Object"));
+ child->add_property (X_("id"), id);
+ _state.add_child_nocopy (*child);
+ object_map[id] = child;
+ return child;