Index: /code/trunk/src/core/CMakeLists.txt
===================================================================
--- /code/trunk/src/core/CMakeLists.txt	(revision 1542)
+++ /code/trunk/src/core/CMakeLists.txt	(revision 1543)
@@ -1,34 +1,42 @@
 SET(CORE_SRC_FILES
-  BaseObject.cc
-  ClassTreeMask.cc
   ConfigFileManager.cc
   ConfigValueContainer.cc
   Core.cc
   Error.cc
-  Executor.cc
-  Factory.cc
-  Identifier.cc
-  IdentifierDistributor.cc
+  Language.cc
+  OrxonoxClass.cc
   OutputBuffer.cc
-  Shell.cc
-  CommandExecutor.cc
-  CommandEvaluation.cc
-  ConsoleCommand.cc
-  ArgumentCompletionFunctions.cc
-  ConsoleCommandCompilation.cc
-  Language.cc
-  Loader.cc
-  MetaObjectList.cc
-  Namespace.cc
-  NamespaceNode.cc
-  OrxonoxClass.cc
   OutputHandler.cc
   Script.cc
   SignalHandler.cc
+
+  # command
+  ArgumentCompletionFunctions.cc
+  CommandEvaluation.cc
+  CommandExecutor.cc
+  ConsoleCommand.cc
+  ConsoleCommandCompilation.cc
+  Executor.cc
+
+  # hierarchy
+  Factory.cc
+  Identifier.cc
+  MetaObjectList.cc
+
+  # level
+  BaseObject.cc
+  ClassTreeMask.cc
+  Loader.cc
+  Namespace.cc
+  NamespaceNode.cc
+  XMLPort.cc
+
+  # shell
+  IRC.cc
+  Shell.cc
   TclBind.cc
-  XMLPort.cc
   TclThreadManager.cc
-  IRC.cc
 
+  # input
   input/Button.cc
   input/CalibratorCallback.cc
Index: /code/trunk/src/core/ClassFactory.h
===================================================================
--- /code/trunk/src/core/ClassFactory.h	(revision 1542)
+++ /code/trunk/src/core/ClassFactory.h	(revision 1543)
@@ -74,6 +74,6 @@
     {
         COUT(4) << "*** ClassFactory: Create entry for " << name << " in Factory." << std::endl;
-        ClassManager<T>::getIdentifier()->addFactory(new ClassFactory<T>);
-        Factory::add(name, ClassManager<T>::getIdentifier());
+        ClassIdentifier<T>::getIdentifier()->addFactory(new ClassFactory<T>);
+        Factory::add(name, ClassIdentifier<T>::getIdentifier());
 
         return true;
Index: /code/trunk/src/core/ClassManager.h
===================================================================
--- /code/trunk/src/core/ClassManager.h	(revision 1542)
+++ /code/trunk/src/core/ClassManager.h	(revision 1543)
@@ -1,157 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-/**
-    @file ClassManager.h
-    @brief Definition and Implementation of the ClassManager template.
-
-    The ClassManager is a helper-class for ClassIdentifier. Because ClassIdentifiers must
-    be unique, they are created through the IdentifierDistributor-class to assure the
-    uniqueness of the ClassIdentifier. But accessing Identifiers through IdentifierDistributor
-    is slow, because it uses strings and a map. Thats why we use the ClassManager-template: It's
-    a singleton like ClassIdentifier, but it doesn't hurt if there are multiple instances in
-    different libraries, because they all store the same pointer to the unique ClassIdentifier
-    which they've retrieved through IdentifierDistributor.
-*/
-
-#ifndef _ClassManager_H__
-#define _ClassManager_H__
-
-#include "CorePrereqs.h"
-
-#include <string>
-
-#include "Identifier.h"
-#include "IdentifierDistributor.h"
-#include "Debug.h"
-
-namespace orxonox
-{
-    //! ClassManager is a helper class to allow faster access on the ClassIdentifiers.
-    /**
-        Because accessing the IdentifierDistributor is slow, the ClassManager accesses it once
-        and stores the result in a member-variable. IdentifierDistributor assures the uniqueness
-        of the ClassIdentifier, even if there are multiple instances of the ClassManager-template
-        in different libraries.
-    */
-    template <class T>
-    class ClassManager
-    {
-        public:
-            static ClassManager<T>* getSingleton();
-            static ClassIdentifier<T>* getIdentifier();
-            static const std::string& getName();
-
-        private:
-            ClassManager();
-            ClassManager(const ClassIdentifier<T>& identifier) {}    // don't copy
-            ~ClassManager() {}                                       // don't delete
-
-            bool bInitialized_;                 //!< This is false until the ClassIdentifier gets assigned
-            ClassIdentifier<T>* identifier_;    //!< The unique ClassIdentifier for the class T
-    };
-
-    /**
-        @brief Constructor: Marks the ClassManager as uninitialized.
-    */
-    template <class T>
-    ClassManager<T>::ClassManager()
-    {
-        this->bInitialized_ = false;
-    }
-
-    /**
-        @brief Returns the one and only instance of this class for the template parameter T.
-        @return The instance
-    */
-    template <class T>
-    ClassManager<T>* ClassManager<T>::getSingleton()
-    {
-        static ClassManager<T> theOneAndOnlyInstance = ClassManager<T>();
-        return &theOneAndOnlyInstance;
-    }
-
-    /**
-        @brief Creates the only instance of this class for the template class T and retrieves a unique Identifier for the given name.
-        @return The unique Identifier
-    */
-    template <class T>
-    ClassIdentifier<T>* ClassManager<T>::getIdentifier()
-    {
-        // Check if the ClassManager is already initialized
-        if (!ClassManager<T>::getSingleton()->bInitialized_)
-        {
-            // Get the name of the class
-            std::string name = typeid(T).name();
-
-            // It's not -> retrieve the ClassIdentifier through IdentifierDistributor
-            COUT(4) << "*** ClassManager: Request Identifier Singleton for " << name << "." << std::endl;
-
-            // First create a ClassIdentifier in case there's no instance existing yet
-            ClassIdentifier<T>* temp = new ClassIdentifier<T>();
-
-            // Ask the IdentifierDistributor for the unique ClassIdentifier
-            ClassManager<T>::getSingleton()->identifier_ = (ClassIdentifier<T>*)IdentifierDistributor::getIdentifier(name, temp);
-
-            // If the retrieved Identifier differs from our proposal, we don't need the proposal any more
-            if (temp != ClassManager<T>::getSingleton()->identifier_)
-            {
-                COUT(4) << "*** ClassManager: Requested Identifier for " << name << " was already existing and got assigned." << std::endl;
-
-                // Delete the unnecessary proposal
-                delete temp;
-            }
-            else
-            {
-                COUT(4) << "*** ClassManager: Requested Identifier for " << name << " was not yet existing and got created." << std::endl;
-            }
-
-            ClassManager<T>::getSingleton()->bInitialized_ = true;
-        }
-
-        // Finally return the unique ClassIdentifier
-        return ClassManager<T>::getSingleton()->identifier_;
-    }
-
-    /**
-        @brief Returns the name of the class the ClassManager belongs to.
-        @return The name
-    */
-    template <class T>
-    const std::string& ClassManager<T>::getName()
-    {
-        static std::string unknownClassName = std::string("unknown");
-
-        if (ClassManager<T>::getSingleton()->bInitialized_)
-            return ClassManager<T>::getSingleton()->identifier_->getName();
-        else
-            return unknownClassName;
-    }
-}
-
-#endif /* _ClassManager_H__ */
Index: /code/trunk/src/core/ClassTreeMask.cc
===================================================================
--- /code/trunk/src/core/ClassTreeMask.cc	(revision 1542)
+++ /code/trunk/src/core/ClassTreeMask.cc	(revision 1543)
@@ -266,5 +266,5 @@
     ClassTreeMask::ClassTreeMask()
     {
-        this->root_ = new ClassTreeMaskNode(ClassManager<BaseObject>::getIdentifier(), true);
+        this->root_ = new ClassTreeMaskNode(ClassIdentifier<BaseObject>::getIdentifier(), true);
     }
 
@@ -275,5 +275,5 @@
     ClassTreeMask::ClassTreeMask(const ClassTreeMask& other)
     {
-        this->root_ = new ClassTreeMaskNode(ClassManager<BaseObject>::getIdentifier(), true);
+        this->root_ = new ClassTreeMaskNode(ClassIdentifier<BaseObject>::getIdentifier(), true);
         for (ClassTreeMaskIterator it = other.root_; it; ++it)
             this->add(it->getClass(), it->isIncluded(), false);
@@ -435,5 +435,5 @@
     {
         delete this->root_;
-        this->root_ = new ClassTreeMaskNode(ClassManager<BaseObject>::getIdentifier(), true);
+        this->root_ = new ClassTreeMaskNode(ClassIdentifier<BaseObject>::getIdentifier(), true);
     }
 
Index: /code/trunk/src/core/CommandEvaluation.cc
===================================================================
--- /code/trunk/src/core/CommandEvaluation.cc	(revision 1542)
+++ /code/trunk/src/core/CommandEvaluation.cc	(revision 1543)
@@ -29,4 +29,5 @@
 #include "CommandEvaluation.h"
 #include "ConsoleCommand.h"
+#include "Identifier.h"
 #include "Debug.h"
 #include "util/String.h"
Index: /code/trunk/src/core/ConfigFileManager.cc
===================================================================
--- /code/trunk/src/core/ConfigFileManager.cc	(revision 1542)
+++ /code/trunk/src/core/ConfigFileManager.cc	(revision 1543)
@@ -529,5 +529,5 @@
             for (std::map<std::string, Identifier*>::const_iterator it = Identifier::getIdentifierMapBegin(); it != Identifier::getIdentifierMapEnd(); ++it)
             {
-                if ((*it).second->hasConfigValues() /* && (*it).second != ClassManager<KeyBinder>::getIdentifier()*/)
+                if ((*it).second->hasConfigValues() /* && (*it).second != ClassIdentifier<KeyBinder>::getIdentifier()*/)
                 {
                     for (std::map<std::string, ConfigValueContainer*>::const_iterator it2 = (*it).second->getConfigValueMapBegin(); it2 != (*it).second->getConfigValueMapEnd(); ++it2)
Index: /code/trunk/src/core/ConfigValueIncludes.h
===================================================================
--- /code/trunk/src/core/ConfigValueIncludes.h	(revision 1542)
+++ /code/trunk/src/core/ConfigValueIncludes.h	(revision 1543)
@@ -63,9 +63,9 @@
 */
 #define SetConfigValueGeneric(classname, varname, defvalue) \
-    orxonox::ConfigValueContainer* container##varname = ClassManager<classname>::getIdentifier()->getConfigValueContainer(#varname); \
+    orxonox::ConfigValueContainer* container##varname = ClassIdentifier<classname>::getIdentifier()->getConfigValueContainer(#varname); \
     if (!container##varname) \
     { \
-        container##varname = new orxonox::ConfigValueContainer(CFT_Settings, ClassManager<classname>::getIdentifier(), #varname, varname = defvalue); \
-        ClassManager<classname>::getIdentifier()->addConfigValueContainer(#varname, container##varname); \
+        container##varname = new orxonox::ConfigValueContainer(CFT_Settings, ClassIdentifier<classname>::getIdentifier(), #varname, varname = defvalue); \
+        ClassIdentifier<classname>::getIdentifier()->addConfigValueContainer(#varname, container##varname); \
     } \
     container##varname->getValue(&varname)
Index: /code/trunk/src/core/ConsoleCommand.h
===================================================================
--- /code/trunk/src/core/ConsoleCommand.h	(revision 1542)
+++ /code/trunk/src/core/ConsoleCommand.h	(revision 1543)
@@ -42,5 +42,5 @@
 
 #define SetConsoleCommandGeneric(fakevariable, classname, command, bCreateShortcut) \
-    orxonox::ConsoleCommand& fakevariable = orxonox::ClassManager<classname>::getIdentifier()->addConsoleCommand(command, bCreateShortcut)
+    orxonox::ConsoleCommand& fakevariable = orxonox::ClassIdentifier<classname>::getIdentifier()->addConsoleCommand(command, bCreateShortcut)
 
 
Index: /code/trunk/src/core/CoreIncludes.h
===================================================================
--- /code/trunk/src/core/CoreIncludes.h	(revision 1542)
+++ /code/trunk/src/core/CoreIncludes.h	(revision 1543)
@@ -44,5 +44,4 @@
 
 #include "Identifier.h"
-#include "ClassManager.h"
 #include "Factory.h"
 #include "ClassFactory.h"
@@ -56,8 +55,8 @@
 */
 #define InternRegisterObject(ClassName, bRootClass) \
-    this->setIdentifier(orxonox::ClassManager<ClassName>::getIdentifier()->registerClass(this->getParents(), #ClassName, bRootClass)); \
+    this->setIdentifier(orxonox::ClassIdentifier<ClassName>::getIdentifier()->registerClass(this->getParents(), #ClassName, bRootClass)); \
     if (orxonox::Identifier::isCreatingHierarchy() && this->getParents()) \
         this->getParents()->insert(this->getParents()->end(), this->getIdentifier()); \
-    orxonox::ClassManager<ClassName>::getIdentifier()->addObject(this); \
+    orxonox::ClassIdentifier<ClassName>::getIdentifier()->addObject(this); \
     if (orxonox::Identifier::isCreatingHierarchy()) \
       return
@@ -93,5 +92,5 @@
 */
 #define Class(ClassName) \
-    ClassManager<ClassName>::getIdentifier()
+    ClassIdentifier<ClassName>::getIdentifier()
 
 /**
Index: /code/trunk/src/core/CorePrereqs.h
===================================================================
--- /code/trunk/src/core/CorePrereqs.h	(revision 1542)
+++ /code/trunk/src/core/CorePrereqs.h	(revision 1543)
@@ -97,6 +97,4 @@
   template <class T>
   class ClassIdentifier;
-  template <class T>
-  class ClassManager;
   class ClassTreeMask;
   class ClassTreeMaskIterator;
@@ -124,5 +122,4 @@
   class FunctorStatic;
   class Identifier;
-  class IdentifierDistributor;
   class IRC;
   template <class T>
Index: /code/trunk/src/core/Identifier.cc
===================================================================
--- /code/trunk/src/core/Identifier.cc	(revision 1542)
+++ /code/trunk/src/core/Identifier.cc	(revision 1543)
@@ -73,4 +73,27 @@
         delete this->children_;
         delete this->directChildren_;
+    }
+
+    /**
+        @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 existance in the map
+        @return The identifier (unique instance)
+    */
+    Identifier *Identifier::getIdentifier(std::string &name, Identifier *proposal)
+    {
+        static std::map<std::string, Identifier*> identifiers;    //!< The map to store all Identifiers.
+        std::map<std::string, Identifier*>::const_iterator it = identifiers.find(name);
+        if (it == identifiers.end())
+        {
+            // there isn't an entry yet, put the proposal in it
+            identifiers[name] = proposal;
+        }
+        else
+        {
+            // this happens when a template exists twice --> delete the proposal
+            delete proposal;
+        }
+        return identifiers[name];
     }
 
Index: /code/trunk/src/core/Identifier.h
===================================================================
--- /code/trunk/src/core/Identifier.h	(revision 1542)
+++ /code/trunk/src/core/Identifier.h	(revision 1543)
@@ -253,4 +253,6 @@
             }
 
+            static Identifier* getIdentifier(std::string &name, Identifier *proposal);
+
             std::set<const Identifier*> parents_;                          //!< The parents of the class the Identifier belongs to
             std::set<const Identifier*>* children_;                        //!< The children of the class the Identifier belongs to
@@ -288,15 +290,9 @@
 
         To be really sure that not more than exactly one object exists (even with libraries),
-        ClassIdentifiers are only created by IdentifierDistributor.
-
-        You can access the ClassIdentifiers created by IdentifierDistributor through the
-        ClassManager singletons.
+        ClassIdentifiers are stored in the Identifier Singleton.
     */
     template <class T>
     class ClassIdentifier : public Identifier
     {
-        template <class TT>
-        friend class ClassManager;
-
         public:
             ClassIdentifier<T>* registerClass(std::set<const Identifier*>* parents, const std::string& name, bool bRootClass);
@@ -316,4 +312,6 @@
             void addXMLPortObjectContainer(const std::string& sectionname, XMLPortObjectContainer* container);
 
+            static ClassIdentifier<T> *getIdentifier();
+
         private:
             ClassIdentifier();
@@ -325,5 +323,10 @@
             std::map<std::string, XMLPortClassParamContainer<T>*> xmlportParamContainers_;              //!< All loadable parameters
             std::map<std::string, XMLPortClassObjectContainer<T, class O>*> xmlportObjectContainers_;   //!< All attachable objects
+
+            static ClassIdentifier<T> *classIdentifier_s;
     };
+
+    template <class T>
+    ClassIdentifier<T> *ClassIdentifier<T>::classIdentifier_s = 0;
 
     /**
@@ -365,4 +368,28 @@
 
     /**
+        @brief Creates the only instance of this class for the template class T and retrieves a unique Identifier for the given name.
+        @return The unique Identifier
+    */
+    template <class T>
+    ClassIdentifier<T>* ClassIdentifier<T>::getIdentifier()
+    {
+        // check if the static field has already been filled
+        if (ClassIdentifier<T>::classIdentifier_s == 0)
+        {
+            // 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.
+            ClassIdentifier<T> *proposal = new ClassIdentifier<T>();
+
+            // Get the entry from the map
+            ClassIdentifier<T>::classIdentifier_s = (ClassIdentifier<T>*)Identifier::getIdentifier(name, proposal);
+        }
+
+        // Finally return the unique ClassIdentifier
+        return ClassIdentifier<T>::classIdentifier_s;
+    }
+
+    /**
         @brief Sets the name of the class.
         @param name The name
@@ -472,5 +499,5 @@
             SubclassIdentifier()
             {
-                this->identifier_ = ClassManager<T>::getIdentifier();
+                this->identifier_ = ClassIdentifier<T>::getIdentifier();
             }
 
@@ -491,9 +518,9 @@
             SubclassIdentifier<T>& operator=(Identifier* identifier)
             {
-                if (!identifier->isA(ClassManager<T>::getIdentifier()))
+                if (!identifier->isA(ClassIdentifier<T>::getIdentifier()))
                 {
                     COUT(1) << "An error occurred in SubclassIdentifier (Identifier.h):" << std::endl;
-                    COUT(1) << "Error: Class " << identifier->getName() << " is not a " << ClassManager<T>::getIdentifier()->getName() << "!" << std::endl;
-                    COUT(1) << "Error: SubclassIdentifier<" << ClassManager<T>::getIdentifier()->getName() << "> = Class(" << identifier->getName() << ") is forbidden." << std::endl;
+                    COUT(1) << "Error: Class " << identifier->getName() << " is not a " << ClassIdentifier<T>::getIdentifier()->getName() << "!" << std::endl;
+                    COUT(1) << "Error: SubclassIdentifier<" << ClassIdentifier<T>::getIdentifier()->getName() << "> = Class(" << identifier->getName() << ") is forbidden." << std::endl;
                     COUT(1) << "Aborting..." << std::endl;
                     abort();
@@ -541,5 +568,5 @@
                     {
                         COUT(1) << "An error occurred in SubclassIdentifier (Identifier.h):" << std::endl;
-                        COUT(1) << "Error: Class " << this->identifier_->getName() << " is not a " << ClassManager<T>::getIdentifier()->getName() << "!" << std::endl;
+                        COUT(1) << "Error: Class " << this->identifier_->getName() << " is not a " << ClassIdentifier<T>::getIdentifier()->getName() << "!" << std::endl;
                         COUT(1) << "Error: Couldn't fabricate a new Object." << std::endl;
                         COUT(1) << "Aborting..." << std::endl;
Index: /code/trunk/src/core/IdentifierDistributor.cc
===================================================================
--- /code/trunk/src/core/IdentifierDistributor.cc	(revision 1542)
+++ /code/trunk/src/core/IdentifierDistributor.cc	(revision 1543)
@@ -1,64 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-/**
-    @file IdentifierDistributor.cc
-    @brief Implementation of the IdentifierDistributor class.
-*/
-
-#include "IdentifierDistributor.h"
-#include "Identifier.h"
-
-namespace orxonox
-{
-    /**
-        @brief Returns the only instance of a ClassIdentifier for a given class.
-        @param name The name of the class
-        @param proposal A proposal for the ClassIdentifier in case there is no entry yet.
-        @return The unique ClassIdentifier
-    */
-    Identifier* IdentifierDistributor::getIdentifier(const std::string& name, Identifier* proposal)
-    {
-        // Create the only instance of the IdentifierDistributor-singleton
-        static IdentifierDistributor theOneAndOnlyInstance = IdentifierDistributor();
-
-        // Look for an entry in the map
-        std::map<std::string, Identifier*>::const_iterator it = theOneAndOnlyInstance.identifiers_.find(name);
-        if (it != theOneAndOnlyInstance.identifiers_.end())
-        {
-            // There is already an entry: return it
-            return (*it).second;
-        }
-        else
-        {
-            // There is no entry: put the proposal into the map and return it
-            theOneAndOnlyInstance.identifiers_[name] = proposal;
-            return proposal;
-        }
-    }
-}
Index: /code/trunk/src/core/IdentifierDistributor.h
===================================================================
--- /code/trunk/src/core/IdentifierDistributor.h	(revision 1542)
+++ /code/trunk/src/core/IdentifierDistributor.h	(revision 1543)
@@ -1,62 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *                    > www.orxonox.net <
- *
- *
- *   License notice:
- *
- *   This program is free software; you can redistribute it and/or
- *   modify it under the terms of the GNU General Public License
- *   as published by the Free Software Foundation; either version 2
- *   of the License, or (at your option) any later version.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- *
- *   Author:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-/**
-    @file IdentifierDistributor.h
-    @brief Definition of the IdentifierDistributor class
-
-    The IdentifierDistributor makes sure that only one instance of ClassIdentifier for each
-    template parameter T exists. All Identifiers are stored in a map with their name.
-    IdentifierDistributor is a singleton class, it can't be created or deleted directly.
-*/
-
-#ifndef _IdentifierDistributor_H__
-#define _IdentifierDistributor_H__
-
-#include "CorePrereqs.h"
-
-#include <map>
-
-namespace orxonox
-{
-    //! The Identifier Distributor stores all Identifiers and makes sure there are no ambiguities.
-    class _CoreExport IdentifierDistributor
-    {
-        public:
-            static Identifier* getIdentifier(const std::string& name, Identifier* proposal);
-
-        private:
-            IdentifierDistributor() {};                                         // Don't create
-            IdentifierDistributor(const IdentifierDistributor& distributor);    // Don't copy
-            ~IdentifierDistributor() {}                                         // Don't delete
-
-            std::map<std::string, Identifier*> identifiers_;    //!< The map to store all Identifiers.
-    };
-}
-
-#endif /* _IdentifierDistributor_H__ */
Index: /code/trunk/src/core/Iterator.h
===================================================================
--- /code/trunk/src/core/Iterator.h	(revision 1542)
+++ /code/trunk/src/core/Iterator.h	(revision 1543)
@@ -64,5 +64,5 @@
             {
                 this->element_ = 0;
-                ClassManager<T>::getIdentifier()->getObjects()->registerIterator(this);
+                ClassIdentifier<T>::getIdentifier()->getObjects()->registerIterator(this);
             }
 
@@ -74,5 +74,5 @@
             {
                 this->element_ = element;
-                ClassManager<T>::getIdentifier()->getObjects()->registerIterator(this);
+                ClassIdentifier<T>::getIdentifier()->getObjects()->registerIterator(this);
             }
 
@@ -82,5 +82,5 @@
             ~Iterator()
             {
-                ClassManager<T>::getIdentifier()->getObjects()->unregisterIterator(this);
+                ClassIdentifier<T>::getIdentifier()->getObjects()->unregisterIterator(this);
             }
 
Index: /code/trunk/src/core/MetaObjectList.h
===================================================================
--- /code/trunk/src/core/MetaObjectList.h	(revision 1542)
+++ /code/trunk/src/core/MetaObjectList.h	(revision 1543)
@@ -89,5 +89,5 @@
     MetaObjectListElement<T>::~MetaObjectListElement()
     {
-        COUT(5) << "*** MetaObjectList: Removing Object from " << ClassManager<T>::getIdentifier()->getName() << "-list." << std::endl;
+        COUT(5) << "*** MetaObjectList: Removing Object from " << ClassIdentifier<T>::getIdentifier()->getName() << "-list." << std::endl;
         this->list_->notifyIterators(this->element_);
 
Index: /code/trunk/src/core/ObjectList.h
===================================================================
--- /code/trunk/src/core/ObjectList.h	(revision 1542)
+++ /code/trunk/src/core/ObjectList.h	(revision 1543)
@@ -44,5 +44,5 @@
 
 #include "Iterator.h"
-#include "ClassManager.h"
+#include "Identifier.h"
 
 namespace orxonox
@@ -95,13 +95,13 @@
             /** @brief Returns the first element in the list. @return The first element */
             inline static Iterator<T> start()
-                { return Iterator<T>(ClassManager<T>::getIdentifier()->getObjects()->first_); }
+                { return Iterator<T>(ClassIdentifier<T>::getIdentifier()->getObjects()->first_); }
 
             /** @brief Returns the first element in the list. @return The first element */
             inline static Iterator<T> begin()
-                { return Iterator<T>(ClassManager<T>::getIdentifier()->getObjects()->first_); }
+                { return Iterator<T>(ClassIdentifier<T>::getIdentifier()->getObjects()->first_); }
 
             /** @brief Returns the last element in the list. @return The last element */
             inline static Iterator<T> end()
-                { return Iterator<T>(ClassManager<T>::getIdentifier()->getObjects()->last_); }
+                { return Iterator<T>(ClassIdentifier<T>::getIdentifier()->getObjects()->last_); }
 
             inline void registerIterator(Iterator<T>* iterator)
Index: /code/trunk/src/core/input/KeyBinder.cc
===================================================================
--- /code/trunk/src/core/input/KeyBinder.cc	(revision 1542)
+++ /code/trunk/src/core/input/KeyBinder.cc	(revision 1543)
@@ -265,9 +265,9 @@
   {
     // config value stuff
-    ConfigValueContainer* cont = ClassManager<KeyBinder>::getIdentifier()->getConfigValueContainer(button.name_);
+    ConfigValueContainer* cont = ClassIdentifier<KeyBinder>::getIdentifier()->getConfigValueContainer(button.name_);
     if (!cont)
     {
-      cont = new ConfigValueContainer(CFT_Keybindings, ClassManager<KeyBinder>::getIdentifier(), button.name_, "");
-      ClassManager<KeyBinder>::getIdentifier()->addConfigValueContainer(button.name_, cont);
+      cont = new ConfigValueContainer(CFT_Keybindings, ClassIdentifier<KeyBinder>::getIdentifier(), button.name_, "");
+      ClassIdentifier<KeyBinder>::getIdentifier()->addConfigValueContainer(button.name_, cont);
     }
     std::string old = button.bindingString_;
Index: /code/trunk/src/orxonox/OrxonoxStableHeaders.h
===================================================================
--- /code/trunk/src/orxonox/OrxonoxStableHeaders.h	(revision 1542)
+++ /code/trunk/src/orxonox/OrxonoxStableHeaders.h	(revision 1543)
@@ -59,4 +59,6 @@
 #include <OgreMath.h>
 #include <OgreMatrix3.h>
+#include <OgreMatrix4.h>
+#include <OgreMesh.h>
 #include <OgreOverlay.h>
 #include <OgreOverlayElement.h>
@@ -70,4 +72,5 @@
 #include <OgreSceneManager.h>
 #include <OgreSceneNode.h>
+#include <OgreString.h>
 #include <OgreStringConverter.h>
 #include <OgreTextureManager.h>
@@ -84,32 +87,33 @@
 
 #include "ois/OIS.h"
+#include "cpptcl/CppTcl.h"
+#include "tinyxml/ticpp.h"
+#include "tinyxml/tinyxml.h"
 
-//#include "util/Convert.h"
+#include "util/Convert.h"
 #include "util/Math.h"
-//#include "util/Multitype.h"
-//#include "util/MultiTypeMath.h"
-//#include "util/MultiTypePrimitive.h"
-//#include "util/MultiTypeString.h"
+#include "util/Multitype.h"
+#include "util/MultiTypeMath.h"
 #include "util/Sleep.h"
 #include "util/String.h"
 #include "util/SubString.h"
-//#include "util/XMLIncludes.h"
-#include "tinyxml/ticpp.h"
-#include "tinyxml/tinyxml.h"
+#include "util/XMLIncludes.h"
 
 #include "core/BaseObject.h"
-//#include "core/CommandExecutor.h"
-//#include "core/CoreIncludes.h"
-//#include "core/ConfigValueIncludes.h"
+#include "core/ConsoleCommand.h"
+#include "core/CoreIncludes.h"
+#include "core/ConfigValueIncludes.h"
 #include "core/Debug.h"
-//#include "core/Executor.h"
-//#include "core/XMLPort.h"
+#include "core/OutputBuffer.h"
+#include "core/OutputHandler.h"
+#include "core/Executor.h"
+#include "core/XMLPort.h"
 
 #include "network/Synchronisable.h"
 
-#include "OrxonoxPrereqs.h"
+#include "tools/Mesh.h"
 #include "tools/Timer.h"
+#include "objects/Model.h"
 #include "objects/Tickable.h"
-#include "objects/Model.h"
 #include "objects/WorldEntity.h"
 
Index: /code/trunk/visual_studio/vc8/core.vcproj
===================================================================
--- /code/trunk/visual_studio/vc8/core.vcproj	(revision 1542)
+++ /code/trunk/visual_studio/vc8/core.vcproj	(revision 1543)
@@ -236,8 +236,4 @@
 				</File>
 				<File
-					RelativePath="..\..\src\core\IdentifierDistributor.cc"
-					>
-				</File>
-				<File
 					RelativePath="..\..\src\core\MetaObjectList.cc"
 					>
@@ -498,8 +494,4 @@
 				</File>
 				<File
-					RelativePath="..\..\src\core\ClassManager.h"
-					>
-				</File>
-				<File
 					RelativePath="..\..\src\core\CoreIncludes.h"
 					>
@@ -511,8 +503,4 @@
 				<File
 					RelativePath="..\..\src\core\Identifier.h"
-					>
-				</File>
-				<File
-					RelativePath="..\..\src\core\IdentifierDistributor.h"
 					>
 				</File>
