Index: /code/branches/FICN/src/loader/loader_platform.h
===================================================================
--- /code/branches/FICN/src/loader/loader_platform.h	(revision 552)
+++ /code/branches/FICN/src/loader/loader_platform.h	(revision 553)
@@ -34,4 +34,6 @@
   #ifdef LOADER_BUILD
     #define _LoaderExport __declspec( dllexport )
+  #elif defined(LOADER_STATIC)
+    #define _LoaderExport
   #else
     #define _LoaderExport __declspec( dllimport )
Index: /code/branches/FICN/src/orxonox/core/Factory.cc
===================================================================
--- /code/branches/FICN/src/orxonox/core/Factory.cc	(revision 552)
+++ /code/branches/FICN/src/orxonox/core/Factory.cc	(revision 553)
@@ -38,6 +38,4 @@
 namespace orxonox
 {
-    Factory* Factory::pointer_s = NULL; // Set the static member variable pointer_s to zero
-
     /**
         @returns the Identifier with a given name.
@@ -46,7 +44,5 @@
     Identifier* Factory::getIdentifier(const std::string& name)
     {
-        Factory::checkPointer();
-
-        return pointer_s->identifierStringMap_[name];
+        return getFactoryPointer()->identifierStringMap_[name];
     }
 
@@ -57,7 +53,5 @@
     Identifier* Factory::getIdentifier(const unsigned int id)
     {
-        Factory::checkPointer();
-
-        return pointer_s->identifierNetworkIDMap_[id];
+        return getFactoryPointer()->identifierNetworkIDMap_[id];
     }
 
@@ -69,8 +63,6 @@
     void Factory::add(const std::string& name, Identifier* identifier)
     {
-        Factory::checkPointer();
-
-        pointer_s->identifierStringMap_[name] = identifier;
-        pointer_s->identifierNetworkIDMap_[identifier->getNetworkID()] = identifier;
+        getFactoryPointer()->identifierStringMap_[name] = identifier;
+        getFactoryPointer()->identifierNetworkIDMap_[identifier->getNetworkID()] = identifier;
     }
 
@@ -83,8 +75,6 @@
     void Factory::changeNetworkID(Identifier* identifier, const unsigned int oldID, const unsigned int newID)
     {
-        Factory::checkPointer();
-
-        pointer_s->identifierNetworkIDMap_.erase(oldID);
-        pointer_s->identifierNetworkIDMap_[newID] = identifier;
+        getFactoryPointer()->identifierNetworkIDMap_.erase(oldID);
+        getFactoryPointer()->identifierNetworkIDMap_[newID] = identifier;
     }
 
@@ -94,11 +84,9 @@
     void Factory::createClassHierarchy()
     {
-        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 = getFactoryPointer()->identifierStringMap_.begin();
+        (*getFactoryPointer()->identifierStringMap_.begin()).second->startCreatingHierarchy();
+        for (it = getFactoryPointer()->identifierStringMap_.begin(); it != getFactoryPointer()->identifierStringMap_.end(); ++it)
         {
             // To create the new branch of the class-hierarchy, we create a new object and delete it afterwards.
@@ -106,6 +94,15 @@
             delete temp;
         }
-        (*pointer_s->identifierStringMap_.begin()).second->stopCreatingHierarchy();
+        (*getFactoryPointer()->identifierStringMap_.begin()).second->stopCreatingHierarchy();
         COUT(4) << "*** Factory -> Finished class-hierarchy creation\n";
     }
+
+    /**
+        @brief blubb
+    */
+    Factory* Factory::getFactoryPointer()
+    {
+      static Factory theOneAndOnlyInstance = Factory();
+      return &theOneAndOnlyInstance;
+    }
 }
Index: /code/branches/FICN/src/orxonox/core/Factory.h
===================================================================
--- /code/branches/FICN/src/orxonox/core/Factory.h	(revision 552)
+++ /code/branches/FICN/src/orxonox/core/Factory.h	(revision 553)
@@ -38,19 +38,12 @@
             static void createClassHierarchy();
 
+            static Factory* getFactoryPointer();// avoid overriding pointer_s in the static intialisation process
+
         private:
             Factory() {}                            // don't create
             Factory(const Factory& factory) {}      // don't copy
             ~Factory() {}                           // don't delete
+            static void checkPointer();
 
-            /**
-                @brief Checks if the pointer to the only Factory-object exists and creates it, if not.
-            */
-            inline static void checkPointer()
-            {
-                if (!pointer_s)
-                    pointer_s = new Factory;
-            }
-
-            static Factory* pointer_s;                                          //!< The 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
