Index: /code/branches/FICN/src/orxonox/core/Factory.cc
===================================================================
--- /code/branches/FICN/src/orxonox/core/Factory.cc	(revision 550)
+++ /code/branches/FICN/src/orxonox/core/Factory.cc	(revision 551)
@@ -38,5 +38,30 @@
 namespace orxonox
 {
-    Factory* Factory::pointer_s = NULL; // Set the static member variable pointer_s to zero
+    Factory* Factory::pointer1_s;
+    Factory* Factory::pointer2_s;
+    Factory* Factory::pointer3_s;
+    Factory* Factory::pointer4_s;
+    Factory* Factory::pointer5_s = NULL; // Set the static member variable pointer5_s to zero
+
+    /**
+        @brief Checks if the pointer to the only Factory-object exists and creates it, if not.
+    */
+    void Factory::checkPointer()
+    {
+        if ((!pointer5_s) || (pointer1_s != pointer2_s) || (pointer2_s != pointer3_s) || (pointer3_s != pointer4_s) || (pointer4_s != pointer5_s))
+        {
+            std::cout << pointer1_s << std::endl;
+            std::cout << pointer2_s << std::endl;
+            std::cout << pointer3_s << std::endl;
+            std::cout << pointer4_s << std::endl;
+            std::cout << pointer5_s << std::endl;
+            pointer1_s = pointer2_s = pointer3_s = pointer4_s = pointer5_s = new Factory;
+            std::cout << pointer1_s << std::endl;
+            std::cout << pointer2_s << std::endl;
+            std::cout << pointer3_s << std::endl;
+            std::cout << pointer4_s << std::endl;
+            std::cout << pointer5_s << std::endl;
+        }
+    }
 
     /**
@@ -46,8 +71,7 @@
     Identifier* Factory::getIdentifier(const std::string& name)
     {
-        if (!pointer_s)
-            pointer_s = new Factory;
+        Factory::checkPointer();
 
-        return pointer_s->identifierStringMap_[name];
+        return pointer1_s->identifierStringMap_[name];
     }
 
@@ -58,8 +82,7 @@
     Identifier* Factory::getIdentifier(const unsigned int id)
     {
-        if (!pointer_s)
-            pointer_s = new Factory;
+        Factory::checkPointer();
 
-        return pointer_s->identifierNetworkIDMap_[id];
+        return pointer1_s->identifierNetworkIDMap_[id];
     }
 
@@ -71,9 +94,8 @@
     void Factory::add(const std::string& name, Identifier* identifier)
     {
-        if (!pointer_s)
-            pointer_s = new Factory;
+        Factory::checkPointer();
 
-        pointer_s->identifierStringMap_[name] = identifier;
-        pointer_s->identifierNetworkIDMap_[identifier->getNetworkID()] = identifier;
+        pointer1_s->identifierStringMap_[name] = identifier;
+        pointer1_s->identifierNetworkIDMap_[identifier->getNetworkID()] = identifier;
     }
 
@@ -86,6 +108,8 @@
     void Factory::changeNetworkID(Identifier* identifier, const unsigned int oldID, const unsigned int newID)
     {
-        pointer_s->identifierNetworkIDMap_.erase(oldID);
-        pointer_s->identifierNetworkIDMap_[newID] = identifier;
+        Factory::checkPointer();
+
+        pointer1_s->identifierNetworkIDMap_.erase(oldID);
+        pointer1_s->identifierNetworkIDMap_[newID] = identifier;
     }
 
@@ -95,12 +119,11 @@
     void Factory::createClassHierarchy()
     {
-        if (!pointer_s)
-            pointer_s = new Factory;
+        Factory::checkPointer();
 
         COUT(4) << "*** Factory -> Create class-hierarchy\n";
         std::map<std::string, Identifier*>::iterator it;
-        it = pointer_s->identifierStringMap_.begin();
-        (*pointer_s->identifierStringMap_.begin()).second->startCreatingHierarchy();
-        for (it = pointer_s->identifierStringMap_.begin(); it != pointer_s->identifierStringMap_.end(); ++it)
+        it = pointer1_s->identifierStringMap_.begin();
+        (*pointer1_s->identifierStringMap_.begin()).second->startCreatingHierarchy();
+        for (it = pointer1_s->identifierStringMap_.begin(); it != pointer1_s->identifierStringMap_.end(); ++it)
         {
             // To create the new branch of the class-hierarchy, we create a new object and delete it afterwards.
@@ -108,5 +131,5 @@
             delete temp;
         }
-        (*pointer_s->identifierStringMap_.begin()).second->stopCreatingHierarchy();
+        (*pointer1_s->identifierStringMap_.begin()).second->stopCreatingHierarchy();
         COUT(4) << "*** Factory -> Finished class-hierarchy creation\n";
     }
Index: /code/branches/FICN/src/orxonox/core/Factory.h
===================================================================
--- /code/branches/FICN/src/orxonox/core/Factory.h	(revision 550)
+++ /code/branches/FICN/src/orxonox/core/Factory.h	(revision 551)
@@ -39,9 +39,14 @@
 
         private:
-            Factory() {}                        // don't create
-            Factory(const Factory& factory) {}  // don't copy
-            ~Factory() {}                       // don't delete
+            Factory() {}                            // don't create
+            Factory(const Factory& factory) {}      // don't copy
+            ~Factory() {}                           // don't delete
+            static void checkPointer();
 
-            static Factory* pointer_s;                                          //!< The pointer to the singleton
+            static Factory* pointer1_s;                                         //!< The 1st pointer to the singleton
+            static Factory* pointer2_s;                                         //!< The 2nd pointer to the singleton
+            static Factory* pointer3_s;                                         //!< The 3rd pointer to the singleton
+            static Factory* pointer4_s;                                         //!< The 4th pointer to the singleton
+            static Factory* pointer5_s;                                         //!< The 5th pointer to the singleton
             std::map<std::string, Identifier*> identifierStringMap_;            //!< The map, mapping the name with the Identifier
             std::map<unsigned int, Identifier*> identifierNetworkIDMap_;        //!< The map, mapping the network ID with the Identifier
