Index: code/branches/core7/src/libraries/core/CoreStaticInitializationHandler.cc
===================================================================
--- code/branches/core7/src/libraries/core/CoreStaticInitializationHandler.cc	(revision 10537)
+++ code/branches/core7/src/libraries/core/CoreStaticInitializationHandler.cc	(revision 10538)
@@ -31,5 +31,4 @@
 #include "module/ModuleInstance.h"
 #include "class/IdentifierManager.h"
-#include "singleton/ScopeManager.h"
 
 namespace orxonox
@@ -65,5 +64,4 @@
     {
         IdentifierManager::getInstance().createClassHierarchy();
-        ScopeManager::getInstance().updateListeners();
     }
 
Index: code/branches/core7/src/libraries/core/singleton/ScopeManager.cc
===================================================================
--- code/branches/core7/src/libraries/core/singleton/ScopeManager.cc	(revision 10537)
+++ code/branches/core7/src/libraries/core/singleton/ScopeManager.cc	(revision 10538)
@@ -64,8 +64,12 @@
     {
         this->listeners_[scope].insert(listener);
+        if (this->isActive(scope))
+            this->activateListener(listener);
     }
 
     void ScopeManager::removeListener(ScopeListener* listener, ScopeID::Value scope)
     {
+        if (this->isActive(scope))
+            this->deactivateListener(listener);
         this->listeners_[scope].erase(listener);
     }
@@ -80,6 +84,5 @@
     {
         for (std::set<ScopeListener*>::iterator it = this->listeners_[scope].begin(); it != this->listeners_[scope].end(); ++it)
-            if ((*it)->bActivated_)
-                this->deactivateListener(*it);
+            this->deactivateListener(*it);
     }
 
@@ -92,29 +95,11 @@
     void ScopeManager::deactivateListener(ScopeListener* listener)
     {
-        try
-            { listener->deactivated(); }
-        catch (...)
-            { orxout(internal_warning) << "ScopeListener::deactivated() failed! This MUST NOT happen, fix it!" << endl; }
-        listener->bActivated_ = false;
-    }
-
-    void ScopeManager::updateListeners()
-    {
-        std::map<ScopeID::Value, std::set<ScopeListener*> >::iterator it1;
-        for (it1 = this->listeners_.begin(); it1 != this->listeners_.end(); ++it1)
+        if (listener->bActivated_)
         {
-            const ScopeID::Value& scope = it1->first;
-            const std::set<ScopeListener*>& listeners = it1->second;
-
-            bool scopeIsActive = this->isActive(scope);
-            for (std::set<ScopeListener*>::const_iterator it2 = listeners.begin(); it2 != listeners.end(); ++it2)
-            {
-                ScopeListener* listener = (*it2);
-
-                if (scopeIsActive && !listener->bActivated_)
-                    this->activateListener(listener);
-                else if (!scopeIsActive && listener->bActivated_)
-                    this->deactivateListener(listener);
-            }
+            try
+                { listener->deactivated(); }
+            catch (...)
+                { orxout(internal_warning) << "ScopeListener::deactivated() failed! This MUST NOT happen, fix it!" << endl; }
+            listener->bActivated_ = false;
         }
     }
Index: code/branches/core7/src/libraries/core/singleton/ScopeManager.h
===================================================================
--- code/branches/core7/src/libraries/core/singleton/ScopeManager.h	(revision 10537)
+++ code/branches/core7/src/libraries/core/singleton/ScopeManager.h	(revision 10538)
@@ -64,14 +64,8 @@
             bool isActive(ScopeID::Value scope);
 
-            /** Registers a listener for the given scope. */
+            /** Registers a listener for the given scope. If the scope is already active, the listener is activate immediately. */
             void addListener(ScopeListener* listener, ScopeID::Value scope);
-            /** Unregisters a listener for the given scope. */
+            /** Unregisters a listener for the given scope. If the scope is still active, the listener is deactivated before removal. */
             void removeListener(ScopeListener* listener, ScopeID::Value scope);
-
-            /**
-             * Checks for all listeners if their activity matches the activity of the scope.
-             * If not, listeners are activated or deactivated depending on their state.
-             */
-            void updateListeners();
 
         private:
