Index: /code/branches/core6/src/libraries/core/CoreIncludes.h
===================================================================
--- /code/branches/core6/src/libraries/core/CoreIncludes.h	(revision 9643)
+++ /code/branches/core6/src/libraries/core/CoreIncludes.h	(revision 9644)
@@ -95,5 +95,5 @@
 */
 #define InternRegisterObject(ClassName, bRootClass) \
-    if (ClassIdentifier<ClassName>::getIdentifier(#ClassName)->initialiseObject(this, #ClassName, bRootClass)) \
+    if (ClassIdentifier<ClassName>::getIdentifier(#ClassName)->initializeObject(this, #ClassName, bRootClass)) \
         return; \
     else \
Index: /code/branches/core6/src/libraries/core/class/Identifier.h
===================================================================
--- /code/branches/core6/src/libraries/core/class/Identifier.h	(revision 9643)
+++ /code/branches/core6/src/libraries/core/class/Identifier.h	(revision 9644)
@@ -114,4 +114,7 @@
             inline const std::string& getName() const { return this->name_; }
             void setName(const std::string& name);
+
+            /// Returns the name of the class as it is returned by typeid(T).name()
+            virtual const std::string& getTypeidName() = 0;
 
             /// Returns the network ID to identify a class through the network.
@@ -272,5 +275,5 @@
             static ClassIdentifier<T>* getIdentifier(const std::string& name);
 
-            bool initialiseObject(T* object, const std::string& className, bool bRootClass);
+            bool initializeObject(T* object, const std::string& className, bool bRootClass);
 
             void setConfigValues(T* object, Configurable*) const;
@@ -280,11 +283,16 @@
             void addObjectToList(T* object, Identifiable*);
 
-            void updateConfigValues(bool updateChildren = true) const;
+            virtual void updateConfigValues(bool updateChildren = true) const;
+
+            virtual const std::string& getTypeidName()
+                { return this->typeidName_; }
 
         private:
-            static void initialiseIdentifier();
+            static void initializeIdentifier();
+
             ClassIdentifier(const ClassIdentifier<T>& identifier) {}    // don't copy
             ClassIdentifier()
             {
+                this->typeidName_ = typeid(T).name();
                 SuperFunctionInitialization<0, T>::initialize(this);
             }
@@ -299,4 +307,5 @@
             void updateConfigValues(bool updateChildren, Identifiable*) const;
 
+            std::string typeidName_;
             static ClassIdentifier<T>* classIdentifier_s;
     };
@@ -314,5 +323,5 @@
         // check if the Identifier already exists
         if (!ClassIdentifier<T>::classIdentifier_s)
-            ClassIdentifier<T>::initialiseIdentifier();
+            ClassIdentifier<T>::initializeIdentifier();
 
         return ClassIdentifier<T>::classIdentifier_s;
@@ -336,22 +345,18 @@
     */
     template <class T>
-    void ClassIdentifier<T>::initialiseIdentifier()
-    {
-        // Get the name of the class
-        std::string name = typeid(T).name();
-
-        // create a new identifier anyway. Will be deleted in Identifier::getIdentifier if not used.
+    /*static */ void ClassIdentifier<T>::initializeIdentifier()
+    {
+        // create a new identifier anyway. Will be deleted if not used.
         ClassIdentifier<T>* proposal = new ClassIdentifier<T>();
 
         // Get the entry from the map
-        ClassIdentifier<T>::classIdentifier_s = (ClassIdentifier<T>*)IdentifierManager::getInstance().getIdentifierSingleton(name, proposal);
+        ClassIdentifier<T>::classIdentifier_s = (ClassIdentifier<T>*)IdentifierManager::getInstance().getIdentifierSingleton(proposal);
 
         if (ClassIdentifier<T>::classIdentifier_s == proposal)
-        {
-            orxout(verbose, context::identifier) << "Requested Identifier for " << name << " was not yet existing and got created." << endl;
-        }
+            orxout(verbose, context::identifier) << "Requested Identifier for " << proposal->getTypeidName() << " was not yet existing and got created." << endl;
         else
         {
-            orxout(verbose, context::identifier) << "Requested Identifier for " << name << " was already existing and got assigned." << endl;
+            orxout(verbose, context::identifier) << "Requested Identifier for " << proposal->getTypeidName() << " was already existing and got assigned." << endl;
+            delete proposal; // delete proposal (it is not used anymore)
         }
     }
@@ -364,5 +369,5 @@
     */
     template <class T>
-    bool ClassIdentifier<T>::initialiseObject(T* object, const std::string& className, bool bRootClass)
+    bool ClassIdentifier<T>::initializeObject(T* object, const std::string& className, bool bRootClass)
     {
         if (bRootClass)
Index: /code/branches/core6/src/libraries/core/class/IdentifierManager.cc
===================================================================
--- /code/branches/core6/src/libraries/core/class/IdentifierManager.cc	(revision 9643)
+++ /code/branches/core6/src/libraries/core/class/IdentifierManager.cc	(revision 9644)
@@ -57,16 +57,15 @@
     /**
         @brief Returns an identifier by name and adds it if not available
-        @param name The name of the identifier as typeid().name() suggests
         @param proposal A pointer to a newly created identifier for the case of non existence in the map
         @return The identifier (unique instance)
     */
-    Identifier* IdentifierManager::getIdentifierSingleton(const std::string& name, Identifier* proposal)
+    Identifier* IdentifierManager::getIdentifierSingleton(Identifier* proposal)
     {
-        std::map<std::string, Identifier*>::const_iterator it = this->identifierByTypeId_.find(name);
+        const std::string& typeidName = proposal->getTypeidName();
+        std::map<std::string, Identifier*>::const_iterator it = this->identifierByTypeidName_.find(typeidName);
 
-        if (it != this->identifierByTypeId_.end())
+        if (it != this->identifierByTypeidName_.end())
         {
-            // There is already an entry: return it and delete the proposal
-            delete proposal;
+            // There is already an entry: return it
             return it->second;
         }
@@ -74,5 +73,5 @@
         {
             // There is no entry: put the proposal into the map and return it
-            this->identifierByTypeId_[name] = proposal;
+            this->identifierByTypeidName_[typeidName] = proposal;
             return proposal;
         }
@@ -96,5 +95,5 @@
         orxout(internal_status) << "Create class-hierarchy" << endl;
         this->startCreatingHierarchy();
-        for (std::map<std::string, Identifier*>::const_iterator it = this->identifierByTypeId_.begin(); it != this->identifierByTypeId_.end(); ++it)
+        for (std::map<std::string, Identifier*>::const_iterator it = this->identifierByTypeidName_.begin(); it != this->identifierByTypeidName_.end(); ++it)
         {
             // To create the new branch of the class-hierarchy, we create a new object and delete it afterwards.
@@ -114,8 +113,8 @@
     void IdentifierManager::destroyAllIdentifiers()
     {
-        for (std::map<std::string, Identifier*>::iterator it = this->identifierByTypeId_.begin(); it != this->identifierByTypeId_.end(); ++it)
+        for (std::map<std::string, Identifier*>::iterator it = this->identifierByTypeidName_.begin(); it != this->identifierByTypeidName_.end(); ++it)
             delete (it->second);
 
-        this->identifierByTypeId_.clear();
+        this->identifierByTypeidName_.clear();
         this->identifierByString_.clear();
         this->identifierByLowercaseString_.clear();
Index: /code/branches/core6/src/libraries/core/class/IdentifierManager.h
===================================================================
--- /code/branches/core6/src/libraries/core/class/IdentifierManager.h	(revision 9643)
+++ /code/branches/core6/src/libraries/core/class/IdentifierManager.h	(revision 9644)
@@ -47,5 +47,5 @@
             static IdentifierManager& getInstance();
 
-            Identifier* getIdentifierSingleton(const std::string& name, Identifier* proposal);
+            Identifier* getIdentifierSingleton(Identifier* proposal);
             void registerIdentifier(Identifier* identifier);
 
@@ -96,5 +96,5 @@
                 { hierarchyCreatingCounter_s--; }
 
-            std::map<std::string, Identifier*> identifierByTypeId_;          //!< Map with the names as received by typeid(). This is only used internally.
+            std::map<std::string, Identifier*> identifierByTypeidName_;      //!< Map with the names as received by typeid(). This is only used internally.
 
             std::map<std::string, Identifier*> identifierByString_;          //!< Map that stores all Identifiers with their names.
