Index: /code/branches/objecthierarchie/src/BaseObject.h
===================================================================
--- /code/branches/objecthierarchie/src/BaseObject.h	(revision 149)
+++ /code/branches/objecthierarchie/src/BaseObject.h	(revision 150)
@@ -25,5 +25,5 @@
                 { this->identifier_->isDirectParentOf(identifier); }
 
-            Identifier* identifier_;
+            ClassIdentifier<class BaseObject>* identifier_;
 
         protected:
Index: /code/branches/objecthierarchie/src/ClassHierarchy.cc
===================================================================
--- /code/branches/objecthierarchie/src/ClassHierarchy.cc	(revision 149)
+++ /code/branches/objecthierarchie/src/ClassHierarchy.cc	(revision 150)
@@ -6,5 +6,5 @@
     // ###       Identifier        ###
     // ###############################
-    Identifier* Identifier::pointer_ = NULL;
+//    Identifier* Identifier::pointer_ = NULL;
 /*
     Identifier* Identifier::registerClass(IdentifierList* parents)
@@ -65,9 +65,9 @@
                 {
                     this->directParents_->add(temp1->identifier_);
-                    temp1->identifier_->directChildren_->add(this->pointer_);
+                    temp1->identifier_->directChildren_->add(this);
                 }
 
                 this->allParents_->add(temp1->identifier_);
-                temp1->identifier_->allChildren_->add(this->pointer_);
+                temp1->identifier_->allChildren_->add(this);
 
                 temp1 = temp1->next_;
@@ -88,10 +88,10 @@
     bool Identifier::isA(Identifier* identifier)
     {
-        return (identifier == this->pointer_ || this->allParents_->isInList(identifier));
+        return (identifier == this || this->allParents_->isInList(identifier));
     }
 
     bool Identifier::isDirectA(Identifier* identifier)
     {
-        return (identifier == this->pointer_);
+        return (identifier == this);
     }
 
Index: /code/branches/objecthierarchie/src/ClassHierarchy.h
===================================================================
--- /code/branches/objecthierarchie/src/ClassHierarchy.h	(revision 149)
+++ /code/branches/objecthierarchie/src/ClassHierarchy.h	(revision 150)
@@ -22,4 +22,6 @@
     class ObjectList;
     class BaseObject;
+    template <class T>
+    class ClassIdentifier;
 
     class Identifier
@@ -29,5 +31,4 @@
 
         public:
-//            static Identifier* registerClass(IdentifierList* parents);
             void addObject(BaseObject* object);
             void removeObject(BaseObject* object);
@@ -40,9 +41,7 @@
             bool isDirectParentOf(Identifier* identifier);
 
-        protected:
+        private:
             Identifier();
-            void initialize(IdentifierList* identifier);
-
-            static Identifier* pointer_;
+            void initialize(IdentifierList* parents);
 
             IdentifierList* directParents_;
@@ -54,5 +53,4 @@
             std::string name_;
 
-        private:
             bool bCreatedOneObject_;
     };
@@ -61,17 +59,21 @@
     class ClassIdentifier : public Identifier
     {
-//        friend class Identifier;
-
         public:
-            static Identifier* registerClass(IdentifierList* parents);
-            static Identifier* getIdentifier();
+            static ClassIdentifier<T>* registerClass(IdentifierList* parents);
+            static ClassIdentifier<T>* getIdentifier();
             static T* create();
 
         private:
             ClassIdentifier();
+
+            static ClassIdentifier<T>* pointer_;
+
     };
 
     #define getStringFromClassName(ClassName) \
         #ClassName
+
+    template <class T>
+    ClassIdentifier<T>* ClassIdentifier<T>::pointer_ = NULL;
 
     template <class T>
@@ -81,5 +83,5 @@
 
     template <class T>
-    Identifier* ClassIdentifier<T>::registerClass(IdentifierList* parents)
+    ClassIdentifier<T>* ClassIdentifier<T>::registerClass(IdentifierList* parents)
     {
         if (!pointer_)
@@ -94,5 +96,5 @@
 
     template <class T>
-    Identifier* ClassIdentifier<T>::getIdentifier()
+    ClassIdentifier<T>* ClassIdentifier<T>::getIdentifier()
     {
         if (!pointer_)
