Index: /code/trunk/src/libraries/core/module/Plugin.cc
===================================================================
--- /code/trunk/src/libraries/core/module/Plugin.cc	(revision 11014)
+++ /code/trunk/src/libraries/core/module/Plugin.cc	(revision 11015)
@@ -32,4 +32,5 @@
 #include "util/Output.h"
 #include "core/Core.h"
+#include "StaticInitializationManager.h"
 
 namespace orxonox
@@ -43,6 +44,7 @@
     Plugin::~Plugin()
     {
+        // force unloading of the module when the plugin is destroyed
         if (this->moduleInstance_ != NULL)
-            this->unload();
+            this->unloadModule();
     }
 
@@ -56,5 +58,5 @@
     }
 
-    void Plugin::dereference()
+    void Plugin::dereference(bool bMerelyDeactivate)
     {
         if (this->referenceCounter_ == 0)
@@ -66,10 +68,21 @@
         this->referenceCounter_--;
         if (this->referenceCounter_ == 0) // reduced from 1 to 0 -> load plugin
-            this->unload();
+            this->unload(bMerelyDeactivate);
         else
             orxout(internal_info) << "Reduced reference count for plugin " << this->name_ << " to " << this->referenceCounter_ << endl;
     }
 
+    //////////////////////////////////////////
+    //                 LOAD                 //
+    //////////////////////////////////////////
     void Plugin::load()
+    {
+        // only load module if it isn't already loaded. otherwise merely activate it.
+        if (this->moduleInstance_ == NULL)
+            this->loadModule();
+        else
+            this->activateModule();
+    }
+    void Plugin::loadModule()
     {
         orxout(internal_info) << "Loading plugin " << this->name_ << "..." << endl;
@@ -77,6 +90,22 @@
         Core::getInstance().loadModule(this->moduleInstance_);
     }
+    void Plugin::activateModule()
+    {
+        orxout(internal_info) << "Activating plugin " << this->name_ << "..." << endl;
+        StaticInitializationManager::getInstance().loadModule(this->moduleInstance_);
+    }
 
-    void Plugin::unload()
+    //////////////////////////////////////////
+    //                UNLOAD                //
+    //////////////////////////////////////////
+    void Plugin::unload(bool bMerelyDeactivate)
+    {
+        // fully unload the module unless otherwise requested.
+        if (bMerelyDeactivate)
+            this->deactivateModule();
+        else
+            this->unloadModule();
+    }
+    void Plugin::unloadModule()
     {
         orxout(internal_info) << "Unloading plugin " << this->name_ << "..." << endl;
@@ -85,3 +114,8 @@
         this->moduleInstance_ = NULL;
     }
+    void Plugin::deactivateModule()
+    {
+        orxout(internal_info) << "Deactivating plugin " << this->name_ << "..." << endl;
+        StaticInitializationManager::getInstance().unloadModule(this->moduleInstance_);
+    }
 }
Index: /code/trunk/src/libraries/core/module/Plugin.h
===================================================================
--- /code/trunk/src/libraries/core/module/Plugin.h	(revision 11014)
+++ /code/trunk/src/libraries/core/module/Plugin.h	(revision 11015)
@@ -41,9 +41,15 @@
 
             void reference();
-            void dereference();
+            void dereference(bool bMerelyDeactivate);
 
         private:
             void load();
-            void unload();
+            void unload(bool bMerelyDeactivate);
+
+            void loadModule();
+            void activateModule();
+
+            void unloadModule();
+            void deactivateModule();
 
             std::string name_;
Index: /code/trunk/src/libraries/core/module/PluginManager.cc
===================================================================
--- /code/trunk/src/libraries/core/module/PluginManager.cc	(revision 11014)
+++ /code/trunk/src/libraries/core/module/PluginManager.cc	(revision 11015)
@@ -99,5 +99,5 @@
         Plugin* plugin = this->plugins_[name];
         if (plugin != NULL)
-            plugin->dereference();
+            plugin->dereference(false);
         else
             orxout(internal_warning) << "Cannot find plugin with name " << name << endl;
