 
         /// XML constructor
         override init(node: XMLElement, atIndex i: Int) {
-            parent = node.attribute(named: "parent") ?? ""
+            var parent = node.attribute(named: "parent") ?? ""
+            if parent.isEmpty {
+                parent = node.children.filter { $0.name ==  "prerequisite" }.first?.attribute(named: "name") ?? ""
+            }
+            self.parent = parent
             super.init(node: node, atIndex: i)
         }
     }
+
+    /// an inteface is similar to a class
+    public typealias Interface = Class
 
 
     /// data type representing a function/method


        /// return the parent type of the given class
        public override var parentType: Record? {
            guard parent != "" else { return nil }
            return GIR.KnownTypes[parent] as? GIR.Record
        }


        public var unref: Method? { return anyMethodMatching { $0.isUnref && $0.args.first!.isInstanceOfHierarchy(self) } }
    }


    /// a class data type record
    public class Class: Record {
