Index: /code/branches/testing/src/libraries/core/Core.cc
===================================================================
--- /code/branches/testing/src/libraries/core/Core.cc	(revision 9535)
+++ /code/branches/testing/src/libraries/core/Core.cc	(revision 9536)
@@ -55,4 +55,5 @@
 #include "util/Exception.h"
 #include "util/output/LogWriter.h"
+#include "util/output/OutputManager.h"
 #include "util/Scope.h"
 #include "util/ScopedSingletonManager.h"
@@ -180,5 +181,5 @@
 
         // Set the correct log path and rewrite the log file with the correct log levels
-        LogWriter::getInstance().setLogPath(PathConfig::getLogPathString());
+        OutputManager::getInstance().getLogWriter().setLogPath(PathConfig::getLogPathString());
 
 #if !defined(ORXONOX_PLATFORM_APPLE) && !defined(ORXONOX_USE_WINMAIN)
@@ -258,22 +259,22 @@
     void Core::setConfigValues()
     {
-        SetConfigValueExternal(LogWriter::getInstance().configurableMaxLevel_,
-                               LogWriter::getInstance().getConfigurableSectionName(),
-                               LogWriter::getInstance().getConfigurableMaxLevelName(),
-                               LogWriter::getInstance().configurableMaxLevel_)
+        SetConfigValueExternal(OutputManager::getInstance().getLogWriter().configurableMaxLevel_,
+                               OutputManager::getInstance().getLogWriter().getConfigurableSectionName(),
+                               OutputManager::getInstance().getLogWriter().getConfigurableMaxLevelName(),
+                               OutputManager::getInstance().getLogWriter().configurableMaxLevel_)
             .description("The maximum level of output shown in the log file")
-            .callback(static_cast<BaseWriter*>(&LogWriter::getInstance()), &BaseWriter::changedConfigurableLevel);
-        SetConfigValueExternal(LogWriter::getInstance().configurableAdditionalContextsMaxLevel_,
-                               LogWriter::getInstance().getConfigurableSectionName(),
-                               LogWriter::getInstance().getConfigurableAdditionalContextsMaxLevelName(),
-                               LogWriter::getInstance().configurableAdditionalContextsMaxLevel_)
+            .callback(static_cast<BaseWriter*>(&OutputManager::getInstance().getLogWriter()), &BaseWriter::changedConfigurableLevel);
+        SetConfigValueExternal(OutputManager::getInstance().getLogWriter().configurableAdditionalContextsMaxLevel_,
+                               OutputManager::getInstance().getLogWriter().getConfigurableSectionName(),
+                               OutputManager::getInstance().getLogWriter().getConfigurableAdditionalContextsMaxLevelName(),
+                               OutputManager::getInstance().getLogWriter().configurableAdditionalContextsMaxLevel_)
             .description("The maximum level of output shown in the log file for additional contexts")
-            .callback(static_cast<BaseWriter*>(&LogWriter::getInstance()), &BaseWriter::changedConfigurableAdditionalContextsLevel);
-        SetConfigValueExternal(LogWriter::getInstance().configurableAdditionalContexts_,
-                               LogWriter::getInstance().getConfigurableSectionName(),
-                               LogWriter::getInstance().getConfigurableAdditionalContextsName(),
-                               LogWriter::getInstance().configurableAdditionalContexts_)
+            .callback(static_cast<BaseWriter*>(&OutputManager::getInstance().getLogWriter()), &BaseWriter::changedConfigurableAdditionalContextsLevel);
+        SetConfigValueExternal(OutputManager::getInstance().getLogWriter().configurableAdditionalContexts_,
+                               OutputManager::getInstance().getLogWriter().getConfigurableSectionName(),
+                               OutputManager::getInstance().getLogWriter().getConfigurableAdditionalContextsName(),
+                               OutputManager::getInstance().getLogWriter().configurableAdditionalContexts_)
             .description("Additional output contexts shown in the log file")
-            .callback(static_cast<BaseWriter*>(&LogWriter::getInstance()), &BaseWriter::changedConfigurableAdditionalContexts);
+            .callback(static_cast<BaseWriter*>(&OutputManager::getInstance().getLogWriter()), &BaseWriter::changedConfigurableAdditionalContexts);
 
         SetConfigValue(bDevMode_, PathConfig::buildDirectoryRun())
Index: /code/branches/testing/src/libraries/core/command/IOConsolePOSIX.cc
===================================================================
--- /code/branches/testing/src/libraries/core/command/IOConsolePOSIX.cc	(revision 9535)
+++ /code/branches/testing/src/libraries/core/command/IOConsolePOSIX.cc	(revision 9536)
@@ -38,4 +38,5 @@
 #include "util/Math.h"
 #include "util/output/ConsoleWriter.h"
+#include "util/output/OutputManager.h"
 #include "core/Game.h"
 #include "core/input/InputBuffer.h"
@@ -75,5 +76,5 @@
 
         // Disable standard std::cout logging
-        ConsoleWriter::getInstance().disable();
+        OutputManager::getInstance().getConsoleWriter().disable();
         // Redirect std::cout to an ostringstream
         // (Other part is in the initialiser list)
@@ -103,5 +104,5 @@
         std::cout.rdbuf(this->cout_.rdbuf());
         // Enable standard std::cout logging again
-        ConsoleWriter::getInstance().enable();
+        OutputManager::getInstance().getConsoleWriter().enable();
     }
 
Index: /code/branches/testing/src/libraries/core/command/IOConsoleWindows.cc
===================================================================
--- /code/branches/testing/src/libraries/core/command/IOConsoleWindows.cc	(revision 9535)
+++ /code/branches/testing/src/libraries/core/command/IOConsoleWindows.cc	(revision 9536)
@@ -35,4 +35,5 @@
 #include "util/Math.h"
 #include "util/output/ConsoleWriter.h"
+#include "util/output/OutputManager.h"
 #include "core/Game.h"
 #include "core/input/InputBuffer.h"
@@ -53,5 +54,5 @@
     {
         // Disable standard this->cout_ logging
-        ConsoleWriter::getInstance().disable();
+        OutputManager::getInstance().getConsoleWriter().disable();
         // Redirect std::cout to an ostringstream
         // (Other part is in the initialiser list)
@@ -109,5 +110,5 @@
         std::cout.rdbuf(this->cout_.rdbuf());
         // Enable standard this->cout_ logging again
-        ConsoleWriter::getInstance().enable();
+        OutputManager::getInstance().getConsoleWriter().enable();
 
         resetTerminalMode();
Index: /code/branches/testing/src/libraries/core/command/Shell.cc
===================================================================
--- /code/branches/testing/src/libraries/core/command/Shell.cc	(revision 9535)
+++ /code/branches/testing/src/libraries/core/command/Shell.cc	(revision 9536)
@@ -88,5 +88,5 @@
 
         // Get the previous output and add it to the Shell
-        MemoryWriter::getInstance().resendOutput(this);
+        OutputManager::getInstance().getMemoryWriter().resendOutput(this);
     }
 
Index: /code/branches/testing/src/libraries/util/UtilPrereqs.h
===================================================================
--- /code/branches/testing/src/libraries/util/UtilPrereqs.h	(revision 9535)
+++ /code/branches/testing/src/libraries/util/UtilPrereqs.h	(revision 9536)
@@ -85,7 +85,11 @@
 {
     class AdditionalContextListener;
+    class BaseWriter;
     class Clock;
+    class ConsoleWriter;
     class Exception;
     class ExprParser;
+    class LogWriter;
+    class MemoryWriter;
     class MultiType;
     class OutputListener;
@@ -102,4 +106,5 @@
     template <class T>
     class Singleton;
+    class SubcontextOutputListener;
     class SubString;
 }
Index: /code/branches/testing/src/libraries/util/output/ConsoleWriter.cc
===================================================================
--- /code/branches/testing/src/libraries/util/output/ConsoleWriter.cc	(revision 9535)
+++ /code/branches/testing/src/libraries/util/output/ConsoleWriter.cc	(revision 9536)
@@ -66,13 +66,4 @@
 
     /**
-        @brief Returns the only existing instance of this class.
-    */
-    /*static*/ ConsoleWriter& ConsoleWriter::getInstance()
-    {
-        static ConsoleWriter instance;
-        return instance;
-    }
-
-    /**
         @brief Inherited function from BaseWriter, writes output to the console using std::cout.
     */
Index: /code/branches/testing/src/libraries/util/output/ConsoleWriter.h
===================================================================
--- /code/branches/testing/src/libraries/util/output/ConsoleWriter.h	(revision 9535)
+++ /code/branches/testing/src/libraries/util/output/ConsoleWriter.h	(revision 9536)
@@ -54,6 +54,4 @@
             virtual ~ConsoleWriter();
 
-            static ConsoleWriter& getInstance();
-
             void enable();
             void disable();
Index: /code/branches/testing/src/libraries/util/output/LogWriter.cc
===================================================================
--- /code/branches/testing/src/libraries/util/output/LogWriter.cc	(revision 9535)
+++ /code/branches/testing/src/libraries/util/output/LogWriter.cc	(revision 9536)
@@ -76,13 +76,4 @@
 
     /**
-        @brief Returns the only existing instance of this class.
-    */
-    /*static*/ LogWriter& LogWriter::getInstance()
-    {
-        static LogWriter instance;
-        return instance;
-    }
-
-    /**
         @brief Opens the log-file in order to write output to it.
     */
@@ -133,5 +124,5 @@
 
         // request old output from MemoryWriter
-        MemoryWriter::getInstance().resendOutput(this);
+        OutputManager::getInstance().getMemoryWriter().resendOutput(this);
     }
 
Index: /code/branches/testing/src/libraries/util/output/LogWriter.h
===================================================================
--- /code/branches/testing/src/libraries/util/output/LogWriter.h	(revision 9535)
+++ /code/branches/testing/src/libraries/util/output/LogWriter.h	(revision 9536)
@@ -61,6 +61,4 @@
             virtual ~LogWriter();
 
-            static LogWriter& getInstance();
-
             void setLogPath(const std::string& path);
 
Index: /code/branches/testing/src/libraries/util/output/MemoryWriter.cc
===================================================================
--- /code/branches/testing/src/libraries/util/output/MemoryWriter.cc	(revision 9535)
+++ /code/branches/testing/src/libraries/util/output/MemoryWriter.cc	(revision 9536)
@@ -53,13 +53,4 @@
 
     /**
-        @brief Returns the only existing instance of this singleton class.
-    */
-    /*static*/ MemoryWriter& MemoryWriter::getInstance()
-    {
-        static MemoryWriter instance;
-        return instance;
-    }
-
-    /**
         @brief Implementation of the output() function inherited from OutputListener, stores the received output in memory.
     */
Index: /code/branches/testing/src/libraries/util/output/MemoryWriter.h
===================================================================
--- /code/branches/testing/src/libraries/util/output/MemoryWriter.h	(revision 9535)
+++ /code/branches/testing/src/libraries/util/output/MemoryWriter.h	(revision 9536)
@@ -71,6 +71,4 @@
             virtual ~MemoryWriter();
 
-            static MemoryWriter& getInstance();
-
             void resendOutput(OutputListener* listener) const;
             void disable();
Index: /code/branches/testing/src/libraries/util/output/OutputManager.cc
===================================================================
--- /code/branches/testing/src/libraries/util/output/OutputManager.cc	(revision 9535)
+++ /code/branches/testing/src/libraries/util/output/OutputManager.cc	(revision 9536)
@@ -88,8 +88,38 @@
         static OutputManager& instance = OutputManager::getInstance();
 
-        static MemoryWriter& memoryWriterInstance = MemoryWriter::getInstance(); (void)memoryWriterInstance;
-        static ConsoleWriter& consoleWriterInstance = ConsoleWriter::getInstance(); (void)consoleWriterInstance;
-        static LogWriter& logWriterInstance = LogWriter::getInstance(); (void)logWriterInstance;
-
+        static MemoryWriter& memoryWriterInstance = OutputManager::getInstance().getMemoryWriter(); (void)memoryWriterInstance;
+        static ConsoleWriter& consoleWriterInstance = OutputManager::getInstance().getConsoleWriter(); (void)consoleWriterInstance;
+        static LogWriter& logWriterInstance = OutputManager::getInstance().getLogWriter(); (void)logWriterInstance;
+
+        return instance;
+    }
+
+    /**
+     * @brief Returns the main instance of MemoryWriter which is managed by the OutputManager singleton.
+     * @note If OutputManager is ever un-singletonized, this instance must not remain static.
+     */
+    MemoryWriter& OutputManager::getMemoryWriter()
+    {
+        static MemoryWriter instance;
+        return instance;
+    }
+
+    /**
+     * @brief Returns the main instance of ConsoleWriter which is managed by the OutputManager singleton.
+     * @note If OutputManager is ever un-singletonized, this instance must not remain static.
+     */
+    ConsoleWriter& OutputManager::getConsoleWriter()
+    {
+        static ConsoleWriter instance;
+        return instance;
+    }
+
+    /**
+     * @brief Returns the main instance of LogWriter which is managed by the OutputManager singleton.
+     * @note If OutputManager is ever un-singletonized, this instance must not remain static.
+     */
+    LogWriter& OutputManager::getLogWriter()
+    {
+        static LogWriter instance;
         return instance;
     }
Index: /code/branches/testing/src/libraries/util/output/OutputManager.h
===================================================================
--- /code/branches/testing/src/libraries/util/output/OutputManager.h	(revision 9535)
+++ /code/branches/testing/src/libraries/util/output/OutputManager.h	(revision 9536)
@@ -72,4 +72,8 @@
             static OutputManager& getInstanceAndCreateListeners();
 
+            MemoryWriter& getMemoryWriter();
+            ConsoleWriter& getConsoleWriter();
+            LogWriter& getLogWriter();
+
             void pushMessage(OutputLevel level, const OutputContextContainer& context, const std::string& message);
 
Index: /code/branches/testing/src/orxonox/overlays/InGameConsole.cc
===================================================================
--- /code/branches/testing/src/orxonox/overlays/InGameConsole.cc	(revision 9535)
+++ /code/branches/testing/src/orxonox/overlays/InGameConsole.cc	(revision 9536)
@@ -47,4 +47,5 @@
 #include "util/ScopedSingletonManager.h"
 #include "util/output/MemoryWriter.h"
+#include "util/output/OutputManager.h"
 #include "core/CoreIncludes.h"
 #include "core/ConfigValueIncludes.h"
@@ -95,5 +96,5 @@
         // Output buffering is not anymore needed. Not the best solution to do
         // this here, but there isn't much of another way.
-        MemoryWriter::getInstance().disable();
+        OutputManager::getInstance().getMemoryWriter().disable();
     }
 
