Index: code/branches/objecthierarchie/src/BaseObject.h
===================================================================
--- code/branches/objecthierarchie/src/BaseObject.h	(revision 219)
+++ code/branches/objecthierarchie/src/BaseObject.h	(revision 220)
@@ -50,18 +50,18 @@
             inline bool isDirectParentOf(BaseIdentifier<class B> identifier)
                 { this->getIdentifier()->isDirectParentOf(identifier.getIdentifier()); }
-/*
+
             inline bool isA(OrxonoxClass* object)
                 { this->getIdentifier()->isA(object->getIdentifier()); }
             inline bool isDirectlyA(OrxonoxClass* object)
-                { this->getIdentifier()->isDirectlyA(object->getIdentifier); }
+                { this->getIdentifier()->isDirectlyA(object->getIdentifier()); }
             inline bool isChildOf(OrxonoxClass* object)
-                { this->getIdentifier()->isChildOf(object->getIdentifier); }
+                { this->getIdentifier()->isChildOf(object->getIdentifier()); }
             inline bool isDirectChildOf(OrxonoxClass* object)
-                { this->getIdentifier()->isDirectChildOf(object->getIdentifier); }
+                { this->getIdentifier()->isDirectChildOf(object->getIdentifier()); }
             inline bool isParentOf(OrxonoxClass* object)
-                { this->getIdentifier()->isParentOf(object->getIdentifier); }
+                { this->getIdentifier()->isParentOf(object->getIdentifier()); }
             inline bool isDirectParentOf(OrxonoxClass* object)
-                { this->getIdentifier()->isDirectParentOf(object->getIdentifier); }
-*/
+                { this->getIdentifier()->isDirectParentOf(object->getIdentifier()); }
+
     };
 }
Index: code/branches/objecthierarchie/src/Identifier.cc
===================================================================
--- code/branches/objecthierarchie/src/Identifier.cc	(revision 219)
+++ code/branches/objecthierarchie/src/Identifier.cc	(revision 220)
@@ -78,5 +78,5 @@
     void Identifier::addObject(OrxonoxClass* object)
     {
-        std::cout << "*** Added " << this->name_ << " to list.\n";
+        std::cout << "*** Added object to " << this->name_ << "-list.\n";
         this->objects_.add(object);
     }
@@ -84,6 +84,13 @@
     void Identifier::removeObject(OrxonoxClass* object)
     {
-        std::cout << "*** Removed " << this->name_ << " from list.\n";
+        std::cout << "*** Removed object from " << this->name_ << "-list.\n";
         this->objects_.remove(object);
+
+        IdentifierListElement* temp = this->directParents_.first_;
+        while (temp)
+        {
+            temp->identifier_->removeObject(object);
+            temp = temp->next_;
+        }
     }
 
Index: code/branches/objecthierarchie/src/Identifier.h
===================================================================
--- code/branches/objecthierarchie/src/Identifier.h	(revision 219)
+++ code/branches/objecthierarchie/src/Identifier.h	(revision 220)
@@ -149,5 +149,8 @@
                 ClassFactory::add(name, pointer_s);
 
-                pointer_s->initialize(parents);
+                if (!bRootClass)
+                    pointer_s->initialize(parents);
+                else
+                    pointer_s->initialize(NULL);
             }
             else
Index: code/branches/objecthierarchie/src/IdentifierIncludes.h
===================================================================
--- code/branches/objecthierarchie/src/IdentifierIncludes.h	(revision 219)
+++ code/branches/objecthierarchie/src/IdentifierIncludes.h	(revision 220)
@@ -6,22 +6,22 @@
 
 
-#define registerRootObject(ClassName) \
-    std::cout << "*** Register Root-Object: " << #ClassName << "\n"; \
+#define internRegisterRootObject(ClassName, bAbstract) \
     if (Identifier::isCreatingHierarchy() && !this->getParents()) \
         this->setParents(new IdentifierList()); \
-    if (this->getIdentifier()) \
-        this->getIdentifier()->removeObject(this); \
-    this->setIdentifier(ClassIdentifier<ClassName>::registerClass(this->getParents(), #ClassName, true, false)); \
+    this->setIdentifier(ClassIdentifier<ClassName>::registerClass(this->getParents(), #ClassName, true, bAbstract)); \
     if (Identifier::isCreatingHierarchy() && this->getParents()) \
         this->getParents()->add(this->getIdentifier()); \
     this->getIdentifier()->addObject(this)
 
+#define registerRootObject(ClassName) \
+    std::cout << "*** Register Root-Object: " << #ClassName << "\n"; \
+    internRegisterRootObject(ClassName, false)
+
 #define registerAbstractRootObject(ClassName) \
-    std::cout << "*** Register Root-Object: " << #ClassName << "\n"; \
-    if (Identifier::isCreatingHierarchy() && !this->getParents()) \
-        this->setParents(new IdentifierList()); \
-    if (this->getIdentifier()) \
-        this->getIdentifier()->removeObject(this); \
-    this->setIdentifier(ClassIdentifier<ClassName>::registerClass(this->getParents(), #ClassName, true, true)); \
+    std::cout << "*** Register abstract Root-Object: " << #ClassName << "\n"; \
+    internRegisterRootObject(ClassName, true)
+
+#define internRegisterObject(ClassName, bAbstract) \
+    this->setIdentifier(ClassIdentifier<ClassName>::registerClass(this->getParents(), #ClassName, false, bAbstract)); \
     if (Identifier::isCreatingHierarchy() && this->getParents()) \
         this->getParents()->add(this->getIdentifier()); \
@@ -30,17 +30,9 @@
 #define registerObject(ClassName) \
     std::cout << "*** Register Object: " << #ClassName << "\n"; \
-    this->getIdentifier()->removeObject(this); \
-    this->setIdentifier(ClassIdentifier<ClassName>::registerClass(this->getParents(), #ClassName, false, false)); \
-    if (Identifier::isCreatingHierarchy() && this->getParents()) \
-        this->getParents()->add(this->getIdentifier()); \
-    this->getIdentifier()->addObject(this)
+    internRegisterObject(ClassName, false)
 
 #define registerAbstractObject(ClassName) \
-    std::cout << "*** Register Object: " << #ClassName << "\n"; \
-    this->getIdentifier()->removeObject(this); \
-    this->setIdentifier(ClassIdentifier<ClassName>::registerClass(this->getParents(), #ClassName, false, true)); \
-    if (Identifier::isCreatingHierarchy() && this->getParents()) \
-        this->getParents()->add(this->getIdentifier()); \
-    this->getIdentifier()->addObject(this)
+    std::cout << "*** Register abstract Object: " << #ClassName << "\n"; \
+    internRegisterObject(ClassName, true)
 
 #define unregisterObject() \
