Index: code/branches/core5/src/libraries/core/Core.cc
===================================================================
--- code/branches/core5/src/libraries/core/Core.cc	(revision 5849)
+++ code/branches/core5/src/libraries/core/Core.cc	(revision 5850)
@@ -264,4 +264,7 @@
         // create a shell
         this->shell_.reset(new Shell());
+
+        // Create singletons that always exist (in other libraries)
+        this->rootScope_.reset(new Scope<ScopeID::Root>());
     }
 
@@ -289,4 +292,7 @@
             inputManager_->getMousePosition(), graphicsManager_->isFullScreen()));
 
+        // Create singletons associated with graphics (in other libraries)
+        graphicsScope_.reset(new Scope<ScopeID::Graphics>());
+
         unloader.Dismiss();
 
@@ -296,6 +302,7 @@
     void Core::unloadGraphics()
     {
-        this->guiManager_.reset();;
-        this->inputManager_.reset();;
+        this->graphicsScope_.reset();
+        this->guiManager_.reset();
+        this->inputManager_.reset();
         this->graphicsManager_.reset();
 
@@ -420,4 +427,6 @@
     void Core::preUpdate(const Clock& time)
     {
+        // singletons from other libraries
+        Scope<ScopeID::Root>::update(time);
         if (this->bGraphicsLoaded_)
         {
@@ -426,4 +435,6 @@
             // process gui events
             this->guiManager_->update(time);
+            // graphics singletons from other libraries
+            Scope<ScopeID::Graphics>::update(time);
         }
         // process thread commands
Index: code/branches/core5/src/libraries/core/Core.h
===================================================================
--- code/branches/core5/src/libraries/core/Core.h	(revision 5849)
+++ code/branches/core5/src/libraries/core/Core.h	(revision 5850)
@@ -36,4 +36,5 @@
 #include <boost/scoped_ptr.hpp>
 #include "util/OutputHandler.h"
+#include "util/Scope.h"
 #include "util/ScopeGuard.h"
 #include "util/Singleton.h"
@@ -100,4 +101,6 @@
             scoped_ptr<InputManager>      inputManager_;        //!< Interface to OIS
             scoped_ptr<GUIManager>        guiManager_;          //!< Interface to GUI
+            scoped_ptr<Scope<ScopeID::Root> >     rootScope_;
+            scoped_ptr<Scope<ScopeID::Graphics> > graphicsScope_;
 
             bool                          bGraphicsLoaded_;
Index: code/branches/core5/src/libraries/util/Scope.h
===================================================================
--- code/branches/core5/src/libraries/util/Scope.h	(revision 5849)
+++ code/branches/core5/src/libraries/util/Scope.h	(revision 5850)
@@ -31,7 +31,8 @@
 
 #include "UtilPrereqs.h"
+
 #include <cassert>
+#include <map>
 #include <set>
-#include <map>
 #include "Debug.h"
 
@@ -45,11 +46,12 @@
         enum Value
         {
-            GSRoot,
-            GSGraphics,
-            GSLevel
+            Root,
+            Graphics
         };
     }
 
-    class ScopeListener; // Forward declaration
+    // Forward declarations
+    class ScopeListener;
+    class Clock;
 
     /**
@@ -87,4 +89,6 @@
             //! Gets called if the scope is deactivated
             virtual void deactivated() = 0;
+            //! Gets called if the scope is updated
+            virtual void updated(const Clock& time) = 0;
 
         private:
@@ -136,4 +140,14 @@
                 return (ScopeManager::instanceCounts_s[scope] > 0);
             }
+
+            //! Update method for the ScopeListeners (to implement singleton updates)
+            static void update(const Clock& time)
+            {
+                if (isActive())
+                {
+                    for (typename std::set<ScopeListener*>::iterator it = ScopeManager::listeners_s[scope].begin(); it != ScopeManager::listeners_s[scope].end(); )
+                        (*(it++))->updated(time);
+                }
+            }
     };
 }
Index: code/branches/core5/src/libraries/util/ScopedSingleton.h
===================================================================
--- code/branches/core5/src/libraries/util/ScopedSingleton.h	(revision 5849)
+++ code/branches/core5/src/libraries/util/ScopedSingleton.h	(revision 5850)
@@ -37,4 +37,5 @@
 namespace orxonox
 {
+    class Clock;
     /**
     @brief
@@ -59,9 +60,14 @@
                 assert(Scope<scope>::isActive());
 
-                if (!T::singletonPtr_s && Scope<scope>::isActive())
+                if (!T::singletonPtr_s)
                     T::singletonPtr_s = new T();
 
                 return *T::singletonPtr_s;
             }
+
+            //! Update method for singletons like the ingame console
+            virtual void updated(const Clock& time) { static_cast<T*>(this)->update(time); }
+            //! Empty update method for the static polymorphism
+            void update(const Clock& time) { }
 
         protected:
@@ -85,5 +91,5 @@
             {
                 // The ScopedSingleton shouldn't be active bevor the scope is activated -> always assertion failed
-                assert(T::singletonPtr_s == 0 && false);
+                assert(false);
             }
 
