Index: code/branches/presentation2/src/libraries/network/NetworkFunction.cc
===================================================================
--- code/branches/presentation2/src/libraries/network/NetworkFunction.cc	(revision 6159)
+++ code/branches/presentation2/src/libraries/network/NetworkFunction.cc	(revision 6160)
@@ -32,9 +32,5 @@
 namespace orxonox
 {
-  std::map<std::string, NetworkFunctionBase*> NetworkFunctionBase::nameMap_;
   std::map<uint32_t, bool> NetworkFunctionBase::isStaticMap_;
-  
-  std::map<NetworkFunctionPointer, NetworkFunctionStatic*> NetworkFunctionStatic::functorMap_;
-  std::map<uint32_t, NetworkFunctionStatic*> NetworkFunctionStatic::idMap_;
       
   std::map<NetworkFunctionPointer, NetworkMemberFunctionBase*> NetworkMemberFunctionBase::functorMap_;
@@ -49,5 +45,5 @@
     
     this->name_ = name;
-    nameMap_[name] = this;
+    NetworkFunctionBase::getNameMap()[name] = this;
   }
   NetworkFunctionBase::~NetworkFunctionBase()
@@ -58,7 +54,15 @@
   void NetworkFunctionBase::destroyAllNetworkFunctions()
   {
+    std::map<std::string, NetworkFunctionBase*>& map = NetworkFunctionBase::getNameMap();
     std::map<std::string, NetworkFunctionBase*>::iterator it;
-    for( it=NetworkFunctionBase::nameMap_.begin(); it!=NetworkFunctionBase::nameMap_.end(); ++it )
+    for( it=map.begin(); it!=map.end(); ++it )
       it->second->destroy();
+  }
+  
+  
+  /*static*/ std::map<std::string, NetworkFunctionBase*>& NetworkFunctionBase::getNameMap()
+  {
+    static std::map<std::string, NetworkFunctionBase*> nameMap_;
+    return nameMap_;
   }
   
@@ -70,6 +74,6 @@
     
     this->functor_ = functor;
-    functorMap_[p] = this;
-    idMap_[ this->getNetworkID() ] = this;
+    NetworkFunctionStatic::getFunctorMap()[p] = this;
+    NetworkFunctionStatic::getIdMap()[ this->getNetworkID() ] = this;
   }
   
@@ -79,4 +83,15 @@
   }
   
+  /*static*/ std::map<NetworkFunctionPointer, NetworkFunctionStatic*>& NetworkFunctionStatic::getFunctorMap()
+  {
+    static std::map<NetworkFunctionPointer, NetworkFunctionStatic*> functorMap_;
+    return functorMap_;
+  }
+  
+  /*static*/ std::map<uint32_t, NetworkFunctionStatic*>& NetworkFunctionStatic::getIdMap()
+  {
+    static std::map<uint32_t, NetworkFunctionStatic*> idMap_;
+    return idMap_;
+  }
   
   
@@ -86,6 +101,6 @@
     RegisterObject(NetworkMemberFunctionBase);
     
-    functorMap_[p] = this;
-    idMap_[ this->getNetworkID() ] = this;
+    this->functorMap_[p] = this;
+    this->idMap_[ this->getNetworkID() ] = this;
   }
   
Index: code/branches/presentation2/src/libraries/network/NetworkFunction.h
===================================================================
--- code/branches/presentation2/src/libraries/network/NetworkFunction.h	(revision 6159)
+++ code/branches/presentation2/src/libraries/network/NetworkFunction.h	(revision 6160)
@@ -80,5 +80,10 @@
     static inline bool  isStatic( uint32_t networkID )  { return isStaticMap_[networkID]; }
     
-    static inline void setNetworkID(const std::string& name, uint32_t id){ assert( nameMap_.find(name)!=nameMap_.end() ); nameMap_[name]->setNetworkID(id); }
+    static inline void setNetworkID(const std::string& name, uint32_t id)
+    {
+        std::map<std::string, NetworkFunctionBase*>& map = NetworkFunctionBase::getNameMap();
+        assert( map.find(name)!=map.end() ); 
+        map[name]->setNetworkID(id);
+    }
     
     static void destroyAllNetworkFunctions();
@@ -88,5 +93,5 @@
     
   private:
-    static std::map<std::string, NetworkFunctionBase*> nameMap_;
+    static std::map<std::string, NetworkFunctionBase*>& getNameMap();
     uint32_t networkID_;
     std::string name_;
@@ -107,13 +112,16 @@
     inline void call(const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5){ (*this->functor_)(mt1, mt2, mt3, mt4, mt5); }
     
-    virtual void setNetworkID( uint32_t id ){ NetworkFunctionBase::setNetworkID( id ); idMap_[id] = this; }
-    static inline NetworkFunctionStatic* getNetworkFunction( uint32_t id){ assert( idMap_.find(id)!=idMap_.end() ); return idMap_[id]; }
-    static NetworkFunctionStatic* getFunction( uint32_t id ){ assert( idMap_.find(id) != idMap_.end() ); return idMap_[id]; }
-    static NetworkFunctionStatic* getFunction( const NetworkFunctionPointer& p ){ assert( functorMap_.find(p) != functorMap_.end() ); return functorMap_[p]; }
-    
-  private:
-    static std::map<NetworkFunctionPointer, NetworkFunctionStatic*> functorMap_;
-    static std::map<uint32_t, NetworkFunctionStatic*> idMap_;
-    
+    virtual void setNetworkID( uint32_t id )
+        { NetworkFunctionBase::setNetworkID( id ); NetworkFunctionStatic::getIdMap()[id] = this; }
+    static inline NetworkFunctionStatic* getNetworkFunction( uint32_t id)
+        { assert( NetworkFunctionStatic::getIdMap().find(id)!=NetworkFunctionStatic::getIdMap().end() ); return NetworkFunctionStatic::getIdMap()[id]; }
+    static NetworkFunctionStatic* getFunction( uint32_t id )
+        { assert( NetworkFunctionStatic::getIdMap().find(id) != NetworkFunctionStatic::getIdMap().end() ); return NetworkFunctionStatic::getIdMap()[id]; }
+    static NetworkFunctionStatic* getFunction( const NetworkFunctionPointer& p )
+        { assert( NetworkFunctionStatic::getFunctorMap().find(p) != NetworkFunctionStatic::getFunctorMap().end() ); return NetworkFunctionStatic::getFunctorMap()[p]; }
+        
+  private:
+    static std::map<NetworkFunctionPointer, NetworkFunctionStatic*>& getFunctorMap();
+    static std::map<uint32_t, NetworkFunctionStatic*>& getIdMap();
     FunctorStatic* functor_;
     
Index: code/branches/presentation2/src/libraries/tools/interfaces/TimeFactorListener.h
===================================================================
--- code/branches/presentation2/src/libraries/tools/interfaces/TimeFactorListener.h	(revision 6159)
+++ code/branches/presentation2/src/libraries/tools/interfaces/TimeFactorListener.h	(revision 6160)
@@ -37,14 +37,14 @@
     class _ToolsExport TimeFactorListener : virtual public OrxonoxClass
     {
-        friend class GSRoot;
-
         public:
             TimeFactorListener();
             virtual ~TimeFactorListener() {}
+            
+            static void setTimeFactor( float factor );
+            static void setTimeFactorInternal( float factor );
+            static inline float getTimeFactor(){ return TimeFactorListener::timefactor_s; }
 
         protected:
             virtual void changedTimeFactor(float factor_new, float factor_old) {}
-            inline float getTimeFactor() const
-                { return TimeFactorListener::timefactor_s; }
 
         private:
Index: code/branches/presentation2/src/libraries/tools/interfaces/ToolsInterfaceCompilation.cc
===================================================================
--- code/branches/presentation2/src/libraries/tools/interfaces/ToolsInterfaceCompilation.cc	(revision 6159)
+++ code/branches/presentation2/src/libraries/tools/interfaces/ToolsInterfaceCompilation.cc	(revision 6160)
@@ -37,4 +37,6 @@
 
 #include "core/CoreIncludes.h"
+#include "core/GameMode.h"
+#include "network/NetworkFunction.h"
 
 namespace orxonox
@@ -43,4 +45,6 @@
     // TimeFactorListener
     //----------------------------
+    registerStaticNetworkFunction( &TimeFactorListener::setTimeFactorInternal );
+    
     float TimeFactorListener::timefactor_s = 1.0f;
 
@@ -48,4 +52,19 @@
     {
         RegisterRootObject(TimeFactorListener);
+    }
+
+    /*static*/ void TimeFactorListener::setTimeFactor( float factor )
+    {
+        if ( !GameMode::isStandalone() )
+            callStaticNetworkFunction( &TimeFactorListener::setTimeFactorInternal, CLIENTID_UNKNOWN, factor );
+        TimeFactorListener::setTimeFactorInternal(factor);
+    }
+    
+    /*static*/ void TimeFactorListener::setTimeFactorInternal( float factor )
+    {
+        float oldFactor = TimeFactorListener::timefactor_s;
+        TimeFactorListener::timefactor_s = factor;
+        for (ObjectList<TimeFactorListener>::iterator it = ObjectList<TimeFactorListener>::begin(); it != ObjectList<TimeFactorListener>::end(); ++it)
+            it->changedTimeFactor(factor, oldFactor);
     }
 
Index: code/branches/presentation2/src/orxonox/gamestates/GSRoot.cc
===================================================================
--- code/branches/presentation2/src/orxonox/gamestates/GSRoot.cc	(revision 6159)
+++ code/branches/presentation2/src/orxonox/gamestates/GSRoot.cc	(revision 6160)
@@ -45,5 +45,4 @@
     GSRoot::GSRoot(const GameStateInfo& info)
         : GameState(info)
-        , timeFactor_(1.0f)
         , bPaused_(false)
         , timeFactorPauseBackup_(1.0f)
@@ -73,5 +72,5 @@
     {
         // reset game speed to normal
-        this->timeFactor_ = 1.0f;
+        TimeFactorListener::setTimeFactor(1.0f);
 
         // time factor console command
@@ -102,5 +101,5 @@
         }
         for (ObjectList<Tickable>::iterator it = ObjectList<Tickable>::begin(); it; )
-            (it++)->tick(leveldt * this->timeFactor_);
+            (it++)->tick(leveldt * TimeFactorListener::getTimeFactor());
         /*** HACK *** HACK ***/
     }
@@ -119,10 +118,5 @@
             if (!this->bPaused_)
             {
-                TimeFactorListener::timefactor_s = factor;
-
-                for (ObjectList<TimeFactorListener>::iterator it = ObjectList<TimeFactorListener>::begin(); it != ObjectList<TimeFactorListener>::end(); ++it)
-                    it->changedTimeFactor(factor, this->timeFactor_);
-
-                this->timeFactor_ = factor;
+                TimeFactorListener::setTimeFactor(factor);
             }
             else
@@ -137,5 +131,5 @@
             if (!this->bPaused_)
             {
-                this->timeFactorPauseBackup_ = this->timeFactor_;
+                this->timeFactorPauseBackup_ = TimeFactorListener::getTimeFactor();
                 this->setTimeFactor(0.0f);
                 this->bPaused_ = true;
@@ -148,3 +142,8 @@
         }
     }
+
+    float GSRoot::getTimeFactor()
+    {
+        return TimeFactorListener::getTimeFactor();
+    }
 }
Index: code/branches/presentation2/src/orxonox/gamestates/GSRoot.h
===================================================================
--- code/branches/presentation2/src/orxonox/gamestates/GSRoot.h	(revision 6159)
+++ code/branches/presentation2/src/orxonox/gamestates/GSRoot.h	(revision 6160)
@@ -51,8 +51,7 @@
         void setTimeFactor(float factor);
         void pause();
-        float getTimeFactor() { return this->timeFactor_; }
+        float getTimeFactor();
 
     private:
-        float                 timeFactor_;              //!< A factor that sets the gamespeed. 1 is normal.
         bool                  bPaused_;
         float                 timeFactorPauseBackup_;
