Index: code/branches/core7/src/libraries/core/Core.cc
===================================================================
--- code/branches/core7/src/libraries/core/Core.cc	(revision 10461)
+++ code/branches/core7/src/libraries/core/Core.cc	(revision 10462)
@@ -143,4 +143,5 @@
         }
 
+        // TODO: initialize ScopeManager here
         // TODO: initialize CommandLineParser here
         // TODO: initialize ConsoleCommandManager here
Index: code/branches/core7/src/libraries/core/singleton/Scope.h
===================================================================
--- code/branches/core7/src/libraries/core/singleton/Scope.h	(revision 10461)
+++ code/branches/core7/src/libraries/core/singleton/Scope.h	(revision 10462)
@@ -111,10 +111,10 @@
                 try
                 {
-                    ScopeManager::getInstanceCounts()[scope]++;
-                    assert(ScopeManager::getInstanceCounts()[scope] > 0);
-                    if (ScopeManager::getInstanceCounts()[scope] == 1)
+                    ScopeManager::getInstance().getInstanceCount(scope)++;
+                    assert(ScopeManager::getInstance().getInstanceCount(scope) > 0);
+                    if (ScopeManager::getInstance().getInstanceCount(scope) == 1)
                     {
                         Loki::ScopeGuard deactivator = Loki::MakeObjGuard(*this, &Scope::deactivateListeners);
-                        for (typename std::set<ScopeListener*>::iterator it = ScopeManager::getListeners()[scope].begin(); it != ScopeManager::getListeners()[scope].end(); )
+                        for (typename std::set<ScopeListener*>::iterator it = ScopeManager::getInstance().getListeners(scope).begin(); it != ScopeManager::getInstance().getListeners(scope).end(); )
                         {
                             (*it)->activated();
@@ -126,5 +126,5 @@
                 catch (...)
                 {
-                    ScopeManager::getInstanceCounts()[scope]--;
+                    ScopeManager::getInstance().getInstanceCount(scope)--;
                     throw;
                 }
@@ -138,12 +138,12 @@
                 orxout(internal_status) << "destroying scope... (" << scope << ")" << endl;
 
-                ScopeManager::getInstanceCounts()[scope]--;
+                ScopeManager::getInstance().getInstanceCount(scope)--;
 
                 // This shouldn't happen but just to be sure: check if the count is positive
-                assert(ScopeManager::getInstanceCounts()[scope] >= 0);
-                if (ScopeManager::getInstanceCounts()[scope] < 0)
-                    ScopeManager::getInstanceCounts()[scope] = 0;
+                assert(ScopeManager::getInstance().getInstanceCount(scope) >= 0);
+                if (ScopeManager::getInstance().getInstanceCount(scope) < 0)
+                    ScopeManager::getInstance().getInstanceCount(scope) = 0;
 
-                if (ScopeManager::getInstanceCounts()[scope] == 0)
+                if (ScopeManager::getInstance().getInstanceCount(scope) == 0)
                     this->deactivateListeners();
 
@@ -154,5 +154,5 @@
             void deactivateListeners()
             {
-                for (typename std::set<ScopeListener*>::iterator it = ScopeManager::getListeners()[scope].begin(); it != ScopeManager::getListeners()[scope].end(); )
+                for (typename std::set<ScopeListener*>::iterator it = ScopeManager::getInstance().getListeners(scope).begin(); it != ScopeManager::getInstance().getListeners(scope).end(); )
                 {
                     if ((*it)->bActivated_)
@@ -172,5 +172,5 @@
             static bool isActive()
             {
-                return (ScopeManager::getInstanceCounts()[scope] > 0);
+                return (ScopeManager::getInstance().getInstanceCount(scope) > 0);
             }
     };
Index: code/branches/core7/src/libraries/core/singleton/ScopeManager.cc
===================================================================
--- code/branches/core7/src/libraries/core/singleton/ScopeManager.cc	(revision 10461)
+++ code/branches/core7/src/libraries/core/singleton/ScopeManager.cc	(revision 10462)
@@ -32,17 +32,24 @@
 */
 
+#include "ScopeManager.h"
+
 #include "Scope.h"
 
 namespace orxonox
 {
-    /*static*/ std::map<ScopeID::Value, int>& ScopeManager::getInstanceCounts()
+    /* static */ ScopeManager& ScopeManager::getInstance()
     {
-        static std::map<ScopeID::Value, int> instanceCounts;
-        return instanceCounts;
+        static ScopeManager instance;
+        return instance;
     }
-    /*static*/ std::map<ScopeID::Value, std::set<ScopeListener*> >& ScopeManager::getListeners()
+
+    void ScopeManager::addListener(ScopeListener* listener)
     {
-        static std::map<ScopeID::Value, std::set<ScopeListener*> > listeners;
-        return listeners;
+        this->listeners_[listener->getScope()].insert(listener);
+    }
+
+    void ScopeManager::removeListener(ScopeListener* listener)
+    {
+        this->listeners_[listener->getScope()].erase(listener);
     }
 }
Index: code/branches/core7/src/libraries/core/singleton/ScopeManager.h
===================================================================
--- code/branches/core7/src/libraries/core/singleton/ScopeManager.h	(revision 10461)
+++ code/branches/core7/src/libraries/core/singleton/ScopeManager.h	(revision 10462)
@@ -54,11 +54,18 @@
     class _CoreExport ScopeManager
     {
-        template <ScopeID::Value scope>
-        friend class Scope;
-        friend class StaticallyInitializedScopedSingletonWrapper;
+        public:
+            static ScopeManager& getInstance();
+
+            void addListener(ScopeListener* listener);
+            void removeListener(ScopeListener* listener);
+
+            inline int& getInstanceCount(ScopeID::Value scope)
+                { return this->instanceCounts_[scope]; }
+            inline std::set<ScopeListener*>& getListeners(ScopeID::Value scope)
+                { return this->listeners_[scope]; }
 
         private:
-            static std::map<ScopeID::Value, int>& getInstanceCounts();                  //!< Counts the number of active instances (>0 means active) for a scope
-            static std::map<ScopeID::Value, std::set<ScopeListener*> >& getListeners(); //!< Stores all listeners for a scope
+            std::map<ScopeID::Value, int> instanceCounts_;                  //!< Counts the number of active instances (>0 means active) for a scope
+            std::map<ScopeID::Value, std::set<ScopeListener*> > listeners_; //!< Stores all listeners for a scope
     };
 }
Index: code/branches/core7/src/libraries/core/singleton/ScopedSingletonIncludes.cc
===================================================================
--- code/branches/core7/src/libraries/core/singleton/ScopedSingletonIncludes.cc	(revision 10461)
+++ code/branches/core7/src/libraries/core/singleton/ScopedSingletonIncludes.cc	(revision 10462)
@@ -33,10 +33,10 @@
     void StaticallyInitializedScopedSingletonWrapper::load()
     {
-        ScopeManager::getListeners()[this->wrapper_->getScope()].insert(this->wrapper_);
+        ScopeManager::getInstance().addListener(this->wrapper_);
     }
 
     void StaticallyInitializedScopedSingletonWrapper::unload()
     {
-        ScopeManager::getListeners()[this->wrapper_->getScope()].erase(this->wrapper_);
+        ScopeManager::getInstance().removeListener(this->wrapper_);
     }
 }
