         //   - that closure will get the node anyways
         // - same thing with options: beware retaining a reference
         
+        parser.register(SpectraXMLNodeParser.self, name: SpectraXMLNodeType.VertexAttribute.rawValue) { (r, k: String, node: XMLNode, options: [String:AnyObject]) in
+            return SpectraXMLNodeType.VertexAttribute.nodeParser(node, key: k, options: options)!
+            }.inObjectScope(.None) // always return a new instance of the closure
+        
+        parser.register(SpectraXMLNodeParser.self, name: SpectraXMLNodeType.VertexDescriptor.rawValue) { (r, k: String, node: XMLNode, options: [String:AnyObject]) in
+            return SpectraXMLNodeType.VertexDescriptor.nodeParser(node, key: k, options: options)!
+            }.inObjectScope(.None) // always return a new instance of the closure
+        
         parser.register(SpectraXMLNodeParser.self, name: SpectraXMLNodeType.World.rawValue) { (r, k: String, node: XMLNode, options: [String:AnyObject]) in
             return SpectraXMLNodeType.World.nodeParser(node, key: k, options: options)!
-        }
-        
-        parser.register(SpectraXMLNodeParser.self, name: SpectraXMLNodeType.VertexAttribute.rawValue) { (r, k: String, node: XMLNode, options: [String:AnyObject]) in
-            return SpectraXMLNodeType.VertexAttribute.nodeParser(node, key: k, options: options)!
-        }
+            }.inObjectScope(.None) // always return a new instance of the closure
         
         return parser
     }

        //TODO: how to ensure that typing is consistent?
        // return [fnParse -> Any, fnCast -> MDLType] // this may work
        
        // yes, the design's a bit convoluted, but allows great flexability!
        // - note: with great flexibility, comes great responsibility!!
        //   - this is true, both from a performance aspect (reference retention) 
        // - as well as from a security aspect (arbitrary execution from remote XML)

import Fuzi
import Swinject
import ModelIO

// should it be necessary to pass the key here?
public typealias SpectraXMLNodeParser = ((container: Container, node: XMLNode, key: String?, options: [String: AnyObject]) -> Any)

public enum SpectraXMLNodeType: String {
    case World = "world"
