Index: code/branches/core6/test/core/class/IdentifierClassHierarchyTest.cc
===================================================================
--- code/branches/core6/test/core/class/IdentifierClassHierarchyTest.cc	(revision 9640)
+++ code/branches/core6/test/core/class/IdentifierClassHierarchyTest.cc	(revision 9646)
@@ -20,32 +20,107 @@
     {
         class BaseInterface1 : public OrxonoxInterface
-            { public: BaseInterface1() { RegisterRootObject(BaseInterface1); } };
+        {
+            public:
+                BaseInterface1()
+                {
+                    RegisterRootObject(BaseInterface1);
+                }
+
+                virtual void test1() = 0;
+        };
 
         class BaseInterface2 : public OrxonoxInterface
-            { public: BaseInterface2() { RegisterRootObject(BaseInterface2); } };
+        {
+            public:
+                BaseInterface2()
+                {
+                    RegisterRootObject(BaseInterface2);
+                }
+
+                virtual void test2() = 0;
+        };
 
         class Interface1 : public BaseInterface1
-            { public: Interface1() { RegisterObject(Interface1); } };
+        {
+            public:
+                Interface1()
+                {
+                    RegisterObject(Interface1);
+                }
+        };
 
         class Interface2 : public BaseInterface2
-            { public: Interface2() { RegisterObject(Interface2); } };
+        {
+            public:
+                Interface2()
+                {
+                    RegisterObject(Interface2);
+                }
+        };
 
         class BaseClass : public OrxonoxClass
-            { public: BaseClass() { RegisterRootObject(BaseClass); } };
+        {
+            public:
+                BaseClass()
+                {
+                    RegisterRootObject(BaseClass);
+                }
+        };
 
         class Class0 : public BaseClass
-            { public: Class0() { RegisterObject(Class0); } };
+        {
+            public:
+                Class0()
+                {
+                    RegisterObject(Class0);
+                }
+        };
 
         class Class1 : public BaseClass, public Interface1
-            { public: Class1() { RegisterObject(Class1); } };
+        {
+            public:
+                Class1()
+                {
+                    RegisterObject(Class1);
+                }
+
+                virtual void test1() {}
+        };
 
         class Class2a : public BaseClass, public Interface1, Interface2
-            { public: Class2a() { RegisterObject(Class2a); } };
+        {
+            public:
+                Class2a()
+                {
+                    RegisterObject(Class2a);
+                }
+
+                virtual void test1() {}
+                virtual void test2() {}
+        };
 
         class Class2b : public BaseClass, public Interface2, Interface1
-            { public: Class2b() { RegisterObject(Class2b); } };
+        {
+            public:
+                Class2b()
+                {
+                    RegisterObject(Class2b);
+                }
+
+                virtual void test1() {}
+                virtual void test2() {}
+        };
 
         class Class3 : public BaseClass, public BaseInterface1, BaseInterface2
-            { public: Class3() { RegisterObject(Class3); } };
+        {
+            public:
+                Class3()
+                {
+                    RegisterObject(Class3);
+                }
+
+                virtual void test1() {}
+                virtual void test2() {}
+        };
 
         // Fixture
@@ -55,8 +130,10 @@
                 virtual void SetUp()
                 {
-                    registerClass("BaseInterface1", new ClassFactoryNoArgs<BaseInterface1>());
-                    registerClass("BaseInterface2", new ClassFactoryNoArgs<BaseInterface2>());
-                    registerClass("Interface1", new ClassFactoryNoArgs<Interface1>());
-                    registerClass("Interface2", new ClassFactoryNoArgs<Interface2>());
+                    registerClass("OrxonoxInterface", new ClassFactoryNoArgs<OrxonoxInterface>());
+                    registerClass("OrxonoxClass", new ClassFactoryNoArgs<OrxonoxClass>());
+                    registerClass("BaseInterface1", static_cast<ClassFactory<BaseInterface1>*>(NULL), false).inheritsFrom(Class(OrxonoxInterface));
+                    registerClass("BaseInterface2", static_cast<ClassFactory<BaseInterface2>*>(NULL), false).inheritsFrom(Class(OrxonoxInterface));
+                    registerClass("Interface1", static_cast<ClassFactory<Interface1>*>(NULL), false).inheritsFrom(Class(BaseInterface1));
+                    registerClass("Interface2", static_cast<ClassFactory<Interface2>*>(NULL), false).inheritsFrom(Class(BaseInterface2));
                     registerClass("BaseClass", new ClassFactoryNoArgs<BaseClass>());
                     registerClass("Class0", new ClassFactoryNoArgs<Class0>());
@@ -74,4 +151,9 @@
                 }
         };
+
+        bool contains(const std::set<const Identifier*> identifiers, Identifier* identifier)
+        {
+            return identifiers.find(identifier) != identifiers.end();
+        }
     }
 
@@ -135,7 +217,20 @@
 
         EXPECT_EQ(2u, identifier->getDirectChildren().size());
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Interface1)));
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3)));
+
         EXPECT_EQ(5u, identifier->getChildren().size());
-        EXPECT_EQ(0u, identifier->getDirectParents().size());
-        EXPECT_EQ(0u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Interface1)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class1)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
+
+        EXPECT_EQ(1u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxInterface)));
+
+        EXPECT_EQ(2u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
     }
 
@@ -145,7 +240,19 @@
 
         EXPECT_EQ(2u, identifier->getDirectChildren().size());
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Interface2)));
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3)));
+
         EXPECT_EQ(4u, identifier->getChildren().size());
-        EXPECT_EQ(0u, identifier->getDirectParents().size());
-        EXPECT_EQ(0u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Interface2)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
+
+        EXPECT_EQ(1u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxInterface)));
+
+        EXPECT_EQ(2u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
     }
 
@@ -155,7 +262,20 @@
 
         EXPECT_EQ(3u, identifier->getDirectChildren().size());
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class1)));
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2a)));
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2b)));
+
         EXPECT_EQ(3u, identifier->getChildren().size());
-        EXPECT_EQ(1u, identifier->getDirectParents().size());
-        EXPECT_EQ(1u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class1)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
+
+        EXPECT_EQ(1u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface1)));
+
+        EXPECT_EQ(3u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
     }
 
@@ -165,7 +285,18 @@
 
         EXPECT_EQ(2u, identifier->getDirectChildren().size());
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2a)));
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2b)));
+
         EXPECT_EQ(2u, identifier->getChildren().size());
-        EXPECT_EQ(1u, identifier->getDirectParents().size());
-        EXPECT_EQ(1u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
+
+        EXPECT_EQ(1u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface2)));
+
+        EXPECT_EQ(3u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
     }
 
@@ -175,7 +306,23 @@
 
         EXPECT_EQ(5u, identifier->getDirectChildren().size());
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class0)));
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class1)));
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2a)));
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class2b)));
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(Class3)));
+
         EXPECT_EQ(5u, identifier->getChildren().size());
-        EXPECT_EQ(0u, identifier->getDirectParents().size());
-        EXPECT_EQ(0u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class0)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class1)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2a)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class2b)));
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(Class3)));
+
+        EXPECT_EQ(1u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
+
+        EXPECT_EQ(2u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
     }
 
@@ -185,7 +332,14 @@
 
         EXPECT_EQ(0u, identifier->getDirectChildren().size());
+
         EXPECT_EQ(0u, identifier->getChildren().size());
-        EXPECT_EQ(1u, identifier->getDirectParents().size());
-        EXPECT_EQ(1u, identifier->getParents().size());
+
+        EXPECT_EQ(1u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
+
+        EXPECT_EQ(3u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
     }
 
@@ -195,7 +349,18 @@
 
         EXPECT_EQ(0u, identifier->getDirectChildren().size());
+
         EXPECT_EQ(0u, identifier->getChildren().size());
+
         EXPECT_EQ(2u, identifier->getDirectParents().size());
-        EXPECT_EQ(3u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
+
+        EXPECT_EQ(6u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface1)));
     }
 
@@ -205,7 +370,21 @@
 
         EXPECT_EQ(0u, identifier->getDirectChildren().size());
+
         EXPECT_EQ(0u, identifier->getChildren().size());
+
         EXPECT_EQ(3u, identifier->getDirectParents().size());
-        EXPECT_EQ(5u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface2)));
+
+        EXPECT_EQ(8u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface1)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface2)));
     }
 
@@ -215,7 +394,21 @@
 
         EXPECT_EQ(0u, identifier->getDirectChildren().size());
+
         EXPECT_EQ(0u, identifier->getChildren().size());
+
         EXPECT_EQ(3u, identifier->getDirectParents().size());
-        EXPECT_EQ(5u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface1)));
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface2)));
+
+        EXPECT_EQ(8u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface1)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface2)));
     }
 
@@ -225,7 +418,19 @@
 
         EXPECT_EQ(0u, identifier->getDirectChildren().size());
+
         EXPECT_EQ(0u, identifier->getChildren().size());
+
         EXPECT_EQ(3u, identifier->getDirectParents().size());
-        EXPECT_EQ(3u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface1)));
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseInterface2)));
+
+        EXPECT_EQ(6u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface1)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseInterface2)));
     }
 }
Index: code/branches/core6/test/core/class/IdentifierExternalClassHierarchyTest.cc
===================================================================
--- code/branches/core6/test/core/class/IdentifierExternalClassHierarchyTest.cc	(revision 9640)
+++ code/branches/core6/test/core/class/IdentifierExternalClassHierarchyTest.cc	(revision 9646)
@@ -8,11 +8,33 @@
     {
         class Interface : virtual public Identifiable
-            { public: Interface() { RegisterRootObject(Interface); } };
+        {
+            public:
+                Interface()
+                {
+                    RegisterRootObject(Interface);
+                }
+
+                virtual void test() = 0;
+        };
 
         class BaseClass : virtual public Identifiable
-            { public: BaseClass() { RegisterRootObject(BaseClass); } };
+        {
+            public:
+                BaseClass()
+                {
+                    RegisterRootObject(BaseClass);
+                }
+        };
 
         class RealClass : public BaseClass, public Interface
-            { public: RealClass() { RegisterObject(RealClass); } };
+        {
+            public:
+                RealClass()
+                {
+                    RegisterObject(RealClass);
+                }
+
+                virtual void test() {}
+        };
 
         // Fixture
@@ -22,5 +44,5 @@
                 virtual void SetUp()
                 {
-                    registerClass("Interface", new ClassFactoryNoArgs<Interface>());
+                    registerClass("Interface", static_cast<ClassFactory<Interface>*>(NULL), false).inheritsFrom(Class(Identifiable));
                     registerClass("BaseClass", new ClassFactoryNoArgs<BaseClass>());
                     registerClass("RealClass", new ClassFactoryNoArgs<RealClass>());
@@ -34,4 +56,9 @@
                 }
         };
+
+        bool contains(const std::set<const Identifier*> identifiers, Identifier* identifier)
+        {
+            return identifiers.find(identifier) != identifiers.end();
+        }
     }
 
@@ -59,6 +86,15 @@
         Identifier* identifier = Class(Interface);
 
+        EXPECT_EQ(1u, identifier->getDirectChildren().size());
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
+
         EXPECT_EQ(1u, identifier->getChildren().size());
-        EXPECT_EQ(0u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(RealClass)));
+
+        EXPECT_EQ(1u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Identifiable)));
+
+        EXPECT_EQ(1u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
     }
 
@@ -67,6 +103,15 @@
         Identifier* identifier = Class(BaseClass);
 
+        EXPECT_EQ(1u, identifier->getDirectChildren().size());
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
+
         EXPECT_EQ(1u, identifier->getChildren().size());
-        EXPECT_EQ(0u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(RealClass)));
+
+        EXPECT_EQ(1u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Identifiable)));
+
+        EXPECT_EQ(1u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
     }
 
@@ -75,6 +120,16 @@
         Identifier* identifier = Class(RealClass);
 
+        EXPECT_EQ(0u, identifier->getDirectChildren().size());
+
         EXPECT_EQ(0u, identifier->getChildren().size());
-        EXPECT_EQ(2u, identifier->getParents().size());
+
+        EXPECT_EQ(2u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface)));
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
+
+        EXPECT_EQ(3u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
     }
 }
Index: code/branches/core6/test/core/class/IdentifierSimpleClassHierarchyTest.cc
===================================================================
--- code/branches/core6/test/core/class/IdentifierSimpleClassHierarchyTest.cc	(revision 9640)
+++ code/branches/core6/test/core/class/IdentifierSimpleClassHierarchyTest.cc	(revision 9646)
@@ -10,11 +10,33 @@
     {
         class Interface : public OrxonoxInterface
-            { public: Interface() { RegisterRootObject(Interface); } };
+        {
+            public:
+                Interface()
+                {
+                    RegisterRootObject(Interface);
+                }
+
+                virtual void test() = 0;
+        };
 
         class BaseClass : public OrxonoxClass
-            { public: BaseClass() { RegisterRootObject(BaseClass); } };
+        {
+            public:
+                BaseClass()
+                {
+                    RegisterRootObject(BaseClass);
+                }
+        };
 
         class RealClass : public BaseClass, public Interface
-            { public: RealClass() { RegisterObject(RealClass); } };
+        {
+            public:
+                RealClass()
+                {
+                    RegisterObject(RealClass);
+                }
+
+                virtual void test() {}
+        };
 
         // Fixture
@@ -24,5 +46,7 @@
                 virtual void SetUp()
                 {
-                    registerClass("Interface", new ClassFactoryNoArgs<Interface>());
+                    registerClass("OrxonoxInterface", new ClassFactoryNoArgs<OrxonoxInterface>());
+                    registerClass("OrxonoxClass", new ClassFactoryNoArgs<OrxonoxClass>());
+                    registerClass("Interface", static_cast<ClassFactory<Interface>*>(NULL), false).inheritsFrom(Class(OrxonoxInterface));
                     registerClass("BaseClass", new ClassFactoryNoArgs<BaseClass>());
                     registerClass("RealClass", new ClassFactoryNoArgs<RealClass>());
@@ -36,4 +60,9 @@
                 }
         };
+
+        bool contains(const std::set<const Identifier*> identifiers, Identifier* identifier)
+        {
+            return identifiers.find(identifier) != identifiers.end();
+        }
     }
 
@@ -61,6 +90,16 @@
         Identifier* identifier = Class(Interface);
 
+        EXPECT_EQ(1u, identifier->getDirectChildren().size());
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
+
         EXPECT_EQ(1u, identifier->getChildren().size());
-        EXPECT_EQ(0u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(RealClass)));
+
+        EXPECT_EQ(1u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxInterface)));
+
+        EXPECT_EQ(2u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
     }
 
@@ -69,6 +108,16 @@
         Identifier* identifier = Class(BaseClass);
 
+        EXPECT_EQ(1u, identifier->getDirectChildren().size());
+        EXPECT_TRUE(contains(identifier->getDirectChildren(), Class(RealClass)));
+
         EXPECT_EQ(1u, identifier->getChildren().size());
-        EXPECT_EQ(0u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getChildren(), Class(RealClass)));
+
+        EXPECT_EQ(1u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(OrxonoxClass)));
+
+        EXPECT_EQ(2u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
     }
 
@@ -77,6 +126,18 @@
         Identifier* identifier = Class(RealClass);
 
+        EXPECT_EQ(0u, identifier->getDirectChildren().size());
+
         EXPECT_EQ(0u, identifier->getChildren().size());
-        EXPECT_EQ(2u, identifier->getParents().size());
+
+        EXPECT_EQ(2u, identifier->getDirectParents().size());
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(Interface)));
+        EXPECT_TRUE(contains(identifier->getDirectParents(), Class(BaseClass)));
+
+        EXPECT_EQ(5u, identifier->getParents().size());
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Identifiable)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxInterface)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(OrxonoxClass)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(Interface)));
+        EXPECT_TRUE(contains(identifier->getParents(), Class(BaseClass)));
     }
 }
