Index: code/branches/FICN/src/orxonox/core/ClassFactory.h
===================================================================
--- code/branches/FICN/src/orxonox/core/ClassFactory.h	(revision 693)
+++ code/branches/FICN/src/orxonox/core/ClassFactory.h	(revision 694)
@@ -73,5 +73,4 @@
     {
         COUT(4) << "*** Create entry for " << name << " in Factory." << std::endl;
-        ClassIdentifier<T>::createIdentifier(name);
         ClassIdentifier<T>::getIdentifier()->addFactory(new ClassFactory<T>);
         Factory::add(name, ClassIdentifier<T>::getIdentifier());
Index: code/branches/FICN/src/orxonox/core/Identifier.h
===================================================================
--- code/branches/FICN/src/orxonox/core/Identifier.h	(revision 693)
+++ code/branches/FICN/src/orxonox/core/Identifier.h	(revision 694)
@@ -190,14 +190,7 @@
         public:
             static ClassIdentifier<T>* registerClass(const IdentifierList* parents, const std::string& name, bool bRootClass);
-            static void createIdentifier(const std::string& name);
             static void addObject(T* object);
-
-            /** @returns the Identifier itself (createIdentifier() has to be called first). */
-            inline static ClassIdentifier<T>* getIdentifier()
-            {
-                static ClassIdentifier<T> theOneAndOnlyInstance = ClassIdentifier<T>();
-
-                return &theOneAndOnlyInstance;
-            }
+            static ClassIdentifier<T>* getIdentifier();
+            void setName(const std::string& name);
 
         private:
@@ -206,6 +199,6 @@
             ~ClassIdentifier();
 
-            //static ClassIdentifier<T>* pointer_s;       //!< A pointer to the singleton-object
-            ObjectList<T>* objects_;                    //!< The ObjectList, containing all objects of type T
+            ObjectList<T>* objects_;    //!< The ObjectList, containing all objects of type T
+            bool bSetName_;             //!< True if the name is set
     };
 
@@ -218,4 +211,5 @@
     {
         this->objects_ = new ObjectList<T>;
+        this->bSetName_ = false;
     }
 
@@ -241,11 +235,10 @@
         COUT(4) << "*** Register Class in " << name << "-Singleton." << std::endl;
 
-        // It's a singleton, so maybe we have to create it first
-        ClassIdentifier<T>::createIdentifier(name);
-
         // Check if at least one object of the given type was created
         if (!getIdentifier()->bCreatedOneObject_)
         {
             // If no: We have to store the informations and initialize the Identifier
+            getIdentifier()->setName(name);
+
             COUT(4) << "*** Register Class in " << name << "-Singleton -> Initialize Singleton." << std::endl;
             if (bRootClass)
@@ -261,16 +254,34 @@
         @brief Creates the only instance of this class for the template class T.
         @param name The name of the Class
-    */
-    template <class T>
-    void ClassIdentifier<T>::createIdentifier(const std::string& name)
-    {
+        @return The Identifier itself
+    */
+    template <class T>
+    ClassIdentifier<T>* ClassIdentifier<T>::getIdentifier()
+    {
+        static ClassIdentifier<T> theOneAndOnlyInstance = ClassIdentifier<T>();
         static bool bIdentifierCreated = false;
 
         if (!bIdentifierCreated)
         {
-            getIdentifier()->name_ = name;
-            getIdentifier()->identifierMap_s[name] = getIdentifier();
-            COUT(4) << "*** Create Identifier Singleton for " << name << "." << std::endl;
+            COUT(4) << "*** Create Identifier Singleton." << std::endl;
             bIdentifierCreated = true;
+        }
+
+        return &theOneAndOnlyInstance;
+    }
+
+    /**
+        @brief Sets the name of the class.
+        @param name The name
+    */
+    template <class T>
+    void ClassIdentifier<T>::setName(const std::string& name)
+    {
+        // Make sure we didn't already set the name, to avoid duplicate entries in the Identifier map
+        if (!this->bSetName_)
+        {
+            this->name_ = name;
+            this->identifierMap_s[name] = this;
+            this->bSetName_ = true;
         }
     }
