Index: /code/branches/unity_build/src/libraries/core/ConfigValueIncludes.h
===================================================================
--- /code/branches/unity_build/src/libraries/core/ConfigValueIncludes.h	(revision 8523)
+++ /code/branches/unity_build/src/libraries/core/ConfigValueIncludes.h	(revision 8524)
@@ -255,3 +255,18 @@
     ModifyConfigValueGeneric(this, &varname, #varname, modifier, __VA_ARGS__)
 
+/** Modifies a runtime configurable value by using a modifier and some arguments.
+    If the container for the value doesn't yet exist, a warning is displayed.
+    Also, the @a variable argument will be modified and set to the current value.
+@param variable
+    Pointer to the variable where the value should be written to
+@param entryName
+    Name of the entry in the ini file (e.g. [MySection] myValue)
+@param modifier
+    On of these functions: set, tset, add, remove, reset, update
+@param ...
+    Arguments for the modifier function
+*/
+#define ModifyConfigValueExternal(variable, entryName, modifier, ...) \
+    ModifyConfigValueGeneric(this, &variable, entryName, modifier, __VA_ARGS__)
+
 #endif /* _ConfigValueIncludes_H__ */
Index: /code/branches/unity_build/src/libraries/core/Core.cc
===================================================================
--- /code/branches/unity_build/src/libraries/core/Core.cc	(revision 8523)
+++ /code/branches/unity_build/src/libraries/core/Core.cc	(revision 8524)
@@ -69,4 +69,5 @@
 #include "Language.h"
 #include "LuaState.h"
+#include "ObjectList.h"
 #include "command/ConsoleCommand.h"
 #include "command/IOConsole.h"
@@ -229,16 +230,8 @@
     }
 
-    namespace DefaultLogLevels
-    {
-        struct List
-        {
-            OutputLevel::Value logFile;
-            OutputLevel::Value ioConsole;
-            OutputLevel::Value inGameConsole;
-        };
-
-        using namespace OutputLevel;
-        static const List Dev  = { Debug, Info,  Info  };
-        static const List User = { Info,  Error, Error };
+    namespace DefaultLevelLogFile
+    {
+        const OutputLevel::Value Dev  = OutputLevel::Debug;
+        const OutputLevel::Value User = OutputLevel::Info;
     }
 
@@ -246,20 +239,10 @@
     void Core::setConfigValues()
     {
-        // Choose the default levels according to the path Orxonox was started (build directory or not)
-        DefaultLogLevels::List defaultLogLevels = (PathConfig::buildDirectoryRun() ? DefaultLogLevels::Dev : DefaultLogLevels::User);
-
-        SetConfigValueExternal(debugLevelLogFile_, "OutputHandler", "debugLevelLogFile_", defaultLogLevels.logFile)
+        // Choose the default level according to the path Orxonox was started (build directory or not)
+        OutputLevel::Value defaultLogLevel = (PathConfig::buildDirectoryRun() ? DefaultLevelLogFile::Dev : DefaultLevelLogFile::User);
+
+        SetConfigValueExternal(debugLevelLogFile_, "OutputHandler", "debugLevelLogFile", defaultLogLevel)
             .description("The maximum level of debug output written to the log file");
         OutputHandler::getInstance().setSoftDebugLevel("LogFile", debugLevelLogFile_);
-
-        SetConfigValueExternal(debugLevelIOConsole_, "OutputHandler", "debugLevelIOConsole_", defaultLogLevels.ioConsole)
-            .description("The maximum level of debug output shown in the IO console");
-        OutputHandler::getInstance().setSoftDebugLevel("IOConsole", debugLevelIOConsole_);
-        // In case we don't start the IOConsole, also configure that simple listener
-        OutputHandler::getInstance().setSoftDebugLevel("Console", debugLevelIOConsole_);
-
-        SetConfigValueExternal(debugLevelIOConsole_, "OutputHandler", "debugLevelInGameConsole_", defaultLogLevels.inGameConsole)
-            .description("The maximum level of debug output shown in the in-game console");
-        OutputHandler::getInstance().setSoftDebugLevel("InGameConsole", debugLevelInGameConsole_);
 
         SetConfigValue(bDevMode_, PathConfig::buildDirectoryRun())
@@ -290,4 +273,7 @@
           immediately change the debug levels to predefined values which can be
           reconfigured with \c tconfig.
+    @note
+        The debug levels for the IOConsole and the InGameConsole can be found
+        in the Shell class. The same rules apply.
     */
     void Core::devModeChanged()
@@ -296,15 +282,16 @@
         if (isNormal)
         {
-            ModifyConfigValue(debugLevelLogFile_,       update);
-            ModifyConfigValue(debugLevelIOConsole_,     update);
-            ModifyConfigValue(debugLevelInGameConsole_, update);
+            ModifyConfigValueExternal(debugLevelLogFile_, "debugLevelLogFile", update);
         }
         else
         {
-            DefaultLogLevels::List levels = (bDevMode_ ? DefaultLogLevels::Dev : DefaultLogLevels::User);
-            ModifyConfigValue(debugLevelLogFile_,       tset, levels.logFile);
-            ModifyConfigValue(debugLevelIOConsole_,     tset, levels.ioConsole);
-            ModifyConfigValue(debugLevelInGameConsole_, tset, levels.inGameConsole);
-        }
+            OutputLevel::Value level = (bDevMode_ ? DefaultLevelLogFile::Dev : DefaultLevelLogFile::User);
+            ModifyConfigValueExternal(debugLevelLogFile_, "debugLevelLogFile", tset, level);
+        }
+
+        // Inform listeners
+        ObjectList<DevModeListener>::iterator it = ObjectList<DevModeListener>::begin();
+        for (; it != ObjectList<DevModeListener>::end(); ++it)
+            it->devModeChanged(bDevMode_);
     }
 
@@ -491,3 +478,9 @@
         ModifyConfigValue(ogreConfigTimestamp_, set, static_cast<long long>(time(NULL)));
     }
+
+
+    DevModeListener::DevModeListener()
+    {
+        RegisterRootObject(DevModeListener);
+    }
 }
Index: /code/branches/unity_build/src/libraries/core/Core.h
===================================================================
--- /code/branches/unity_build/src/libraries/core/Core.h	(revision 8523)
+++ /code/branches/unity_build/src/libraries/core/Core.h	(revision 8524)
@@ -53,4 +53,13 @@
 namespace orxonox
 {
+    //! Informs about changes in the Development Mode.
+    class DevModeListener : virtual public OrxonoxClass
+    {
+    public:
+        DevModeListener();
+        virtual ~DevModeListener() {}
+        virtual void devModeChanged(bool value) = 0;
+    };
+
     /**
     @brief
@@ -130,6 +139,4 @@
             bool                      bGraphicsLoaded_;
             int                       debugLevelLogFile_;          //!< The debug level for the log file (belongs to OutputHandler)
-            int                       debugLevelIOConsole_;        //!< The debug level for the IO console (belongs to OutputHandler)
-            int                       debugLevelInGameConsole_;    //!< The debug level for the in game console (belongs to OutputHandler)
             std::string               language_;                   //!< The language
             bool                      bInitRandomNumberGenerator_; //!< If true, srand(time(0)) is called
Index: /code/branches/unity_build/src/libraries/core/command/Shell.cc
===================================================================
--- /code/branches/unity_build/src/libraries/core/command/Shell.cc	(revision 8523)
+++ /code/branches/unity_build/src/libraries/core/command/Shell.cc	(revision 8524)
@@ -40,4 +40,5 @@
 #include "core/ConfigFileManager.h"
 #include "core/ConfigValueIncludes.h"
+#include "core/PathConfig.h"
 #include "CommandExecutor.h"
 #include "ConsoleCommand.h"
@@ -87,5 +88,5 @@
         for (;it != OutputHandler::getInstance().getOutput().end(); ++it)
         {
-            if (it->first <= this->getSoftDebugLevel())
+            if (it->first <= debugLevel_)
             {
                 this->outputBuffer_ << it->second;
@@ -96,4 +97,5 @@
         // Register the shell as output listener
         OutputHandler::getInstance().registerOutputListener(this);
+        OutputHandler::getInstance().setSoftDebugLevel(consoleName_, debugLevel_);
     }
 
@@ -105,4 +107,10 @@
         OutputHandler::getInstance().unregisterOutputListener(this);
         this->inputBuffer_->destroy();
+    }
+
+    namespace DefaultLogLevel
+    {
+        const OutputLevel::Value Dev  = OutputLevel::Info;
+        const OutputLevel::Value User = OutputLevel::Error;
     }
 
@@ -118,4 +126,10 @@
         setConfigValueGeneric(this, &commandHistory_, ConfigFileType::CommandHistory, "Shell", "commandHistory_", std::vector<std::string>());
         SetConfigValue(cacheSize_s, 32);
+
+        // Choose the default level according to the path Orxonox was started (build directory or not)
+        OutputLevel::Value defaultDebugLevel = (PathConfig::buildDirectoryRun() ? DefaultLogLevel::Dev : DefaultLogLevel::User);
+        SetConfigValueExternal(debugLevel_, "OutputHandler", "debugLevel" + consoleName_, defaultDebugLevel)
+            .description("The maximum level of debug output shown in the " + consoleName_);
+        OutputHandler::getInstance().setSoftDebugLevel(consoleName_, debugLevel_);
     }
 
@@ -141,4 +155,21 @@
             this->commandHistory_.erase(this->commandHistory_.begin() + index);
             ModifyConfigValue(commandHistory_, remove, index);
+        }
+    }
+
+    /** Called upon changes in the development mode (by Core)
+        Behaviour details see Core::devModeChanged.
+    */
+    void Shell::devModeChanged(bool value)
+    {
+        bool isNormal = (value == PathConfig::buildDirectoryRun());
+        if (isNormal)
+        {
+            ModifyConfigValueExternal(debugLevel_, "debugLevel" + consoleName_, update);
+        }
+        else
+        {
+            OutputLevel::Value level = (value ? DefaultLogLevel::Dev : DefaultLogLevel::User);
+            ModifyConfigValueExternal(debugLevel_, "debugLevel" + consoleName_, tset, level);
         }
     }
Index: /code/branches/unity_build/src/libraries/core/command/Shell.h
===================================================================
--- /code/branches/unity_build/src/libraries/core/command/Shell.h	(revision 8523)
+++ /code/branches/unity_build/src/libraries/core/command/Shell.h	(revision 8524)
@@ -49,4 +49,5 @@
 
 #include "util/OutputHandler.h"
+#include "core/Core.h"
 #include "core/OrxonoxClass.h"
 #include "core/input/InputBuffer.h"
@@ -85,5 +86,5 @@
         Different graphical consoles build upon a Shell, for example InGameConsole and IOConsole.
     */
-    class _CoreExport Shell : virtual public OrxonoxClass, public OutputListener
+    class _CoreExport Shell : virtual public OrxonoxClass, public OutputListener, public DevModeListener
     {
         public:
@@ -148,4 +149,7 @@
             Shell(const Shell& other);
 
+            // DevModeListener
+            void devModeChanged(bool value);
+
             void addToHistory(const std::string& command);
             const std::string& getFromHistory() const;
@@ -198,4 +202,5 @@
             unsigned int              historyOffset_;       ///< The command history is a circular buffer, this variable defines the current write-offset
             std::vector<std::string>  commandHistory_;      ///< The history of commands that were entered by the user
+            int                       debugLevel_;          //!< The maximum level of output that is displayed in the shell (will be passed to OutputListener to filter output)
             static unsigned int       cacheSize_s;          ///< The maximum cache size of the CommandExecutor - this is stored here for better readability of the config file and because CommandExecutor is no OrxonoxClass
     };
Index: /code/branches/unity_build/src/libraries/util/OutputHandler.h
===================================================================
--- /code/branches/unity_build/src/libraries/util/OutputHandler.h	(revision 8523)
+++ /code/branches/unity_build/src/libraries/util/OutputHandler.h	(revision 8524)
@@ -256,6 +256,4 @@
         //! Returns the name of this output listener
         const std::string& getOutputListenerName() const { return this->name_; }
-        //! Returns the soft debug level of the listener
-        int getSoftDebugLevel() const { return this->softDebugLevel_; }
 
     protected:
