Index: code/branches/output/src/libraries/util/CMakeLists.txt
===================================================================
--- code/branches/output/src/libraries/util/CMakeLists.txt	(revision 8793)
+++ code/branches/output/src/libraries/util/CMakeLists.txt	(revision 8794)
@@ -42,4 +42,5 @@
   output/OutputManager.cc
   output/OutputListener.cc
+  output/BaseWriter.cc
   output/ConsoleWriter.cc
   output/LogWriter.cc
Index: code/branches/output/src/libraries/util/output/BaseWriter.cc
===================================================================
--- code/branches/output/src/libraries/util/output/BaseWriter.cc	(revision 8794)
+++ code/branches/output/src/libraries/util/output/BaseWriter.cc	(revision 8794)
@@ -0,0 +1,51 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "BaseWriter.h"
+
+#include "OutputManager.h"
+
+namespace orxonox
+{
+    BaseWriter::BaseWriter()
+    {
+    }
+
+    BaseWriter::~BaseWriter()
+    {
+    }
+
+    void BaseWriter::output(OutputLevel level, OutputContext context, const std::vector<std::string>& lines)
+    {
+        const std::string& prefix = OutputManager::getInstance().getDefaultPrefix(level, context);
+        std::string blanks(prefix.length(), ' ');
+
+        for (size_t i = 0; i < lines.size(); ++i)
+            this->printLine((i == 0 ? prefix : blanks) + lines[i]);
+    }
+}
Index: code/branches/output/src/libraries/util/output/BaseWriter.h
===================================================================
--- code/branches/output/src/libraries/util/output/BaseWriter.h	(revision 8794)
+++ code/branches/output/src/libraries/util/output/BaseWriter.h	(revision 8794)
@@ -0,0 +1,51 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _BaseWriter_H__
+#define _BaseWriter_H__
+
+#include "util/UtilPrereqs.h"
+#include "OutputListener.h"
+
+namespace orxonox
+{
+    class _UtilExport BaseWriter : public OutputListener
+    {
+        public:
+            BaseWriter();
+            virtual ~BaseWriter();
+
+        protected:
+            virtual void output(OutputLevel level, OutputContext context, const std::vector<std::string>& lines);
+
+        private:
+            virtual void printLine(const std::string& line) = 0;
+    };
+}
+
+#endif /* _BaseWriter_H__ */
Index: code/branches/output/src/libraries/util/output/ConsoleWriter.cc
===================================================================
--- code/branches/output/src/libraries/util/output/ConsoleWriter.cc	(revision 8793)
+++ code/branches/output/src/libraries/util/output/ConsoleWriter.cc	(revision 8794)
@@ -51,11 +51,7 @@
     }
 
-    void ConsoleWriter::output(OutputLevel level, OutputContext context, const std::vector<std::string>& lines)
+    void ConsoleWriter::printLine(const std::string& line)
     {
-        const std::string& prefix = OutputManager::getInstance().getDefaultPrefix(level, context);
-        std::string blanks(prefix.length(), ' ');
-
-        for (size_t i = 0; i < lines.size(); ++i)
-            std::cout << (i == 0 ? prefix : blanks) << lines[i] << std::endl;
+        std::cout << line << std::endl;
     }
 
Index: code/branches/output/src/libraries/util/output/ConsoleWriter.h
===================================================================
--- code/branches/output/src/libraries/util/output/ConsoleWriter.h	(revision 8793)
+++ code/branches/output/src/libraries/util/output/ConsoleWriter.h	(revision 8794)
@@ -31,9 +31,9 @@
 
 #include "util/UtilPrereqs.h"
-#include "OutputListener.h"
+#include "BaseWriter.h"
 
 namespace orxonox
 {
-    class _UtilExport ConsoleWriter : public OutputListener
+    class _UtilExport ConsoleWriter : public BaseWriter
     {
         public:
@@ -44,10 +44,10 @@
 
         protected:
-            virtual void output(OutputLevel level, OutputContext context, const std::vector<std::string>& lines);
+            virtual void printLine(const std::string& line);
 
         private:
             ConsoleWriter();
             ConsoleWriter(const ConsoleWriter&);
-            ~ConsoleWriter();
+            virtual ~ConsoleWriter();
 
             bool bEnabled_;
Index: code/branches/output/src/libraries/util/output/LogWriter.cc
===================================================================
--- code/branches/output/src/libraries/util/output/LogWriter.cc	(revision 8793)
+++ code/branches/output/src/libraries/util/output/LogWriter.cc	(revision 8794)
@@ -64,16 +64,4 @@
     }
 
-    void LogWriter::output(OutputLevel level, OutputContext context, const std::vector<std::string>& lines)
-    {
-        if (!this->file_.is_open())
-            return;
-
-        const std::string& prefix = OutputManager::getInstance().getDefaultPrefix(level, context);
-        std::string blanks(prefix.length(), ' ');
-
-        for (size_t i = 0; i < lines.size(); ++i)
-            this->printLine((i == 0 ? prefix : blanks) + lines[i]);
-    }
-
     void LogWriter::openFile()
     {
@@ -114,4 +102,7 @@
     void LogWriter::printLine(const std::string& line)
     {
+        if (!this->file_.is_open())
+            return;
+
         // Get current time
         time_t rawtime;
Index: code/branches/output/src/libraries/util/output/LogWriter.h
===================================================================
--- code/branches/output/src/libraries/util/output/LogWriter.h	(revision 8793)
+++ code/branches/output/src/libraries/util/output/LogWriter.h	(revision 8794)
@@ -34,9 +34,9 @@
 #include <fstream>
 
-#include "OutputListener.h"
+#include "BaseWriter.h"
 
 namespace orxonox
 {
-    class _UtilExport LogWriter : public OutputListener
+    class _UtilExport LogWriter : public BaseWriter
     {
         public:
@@ -46,15 +46,13 @@
 
         protected:
-            virtual void output(OutputLevel level, OutputContext context, const std::vector<std::string>& lines);
+            virtual void printLine(const std::string& line);
 
         private:
             LogWriter();
             LogWriter(const LogWriter&);
-            ~LogWriter();
+            virtual ~LogWriter();
 
             void openFile();
             void closeFile();
-
-            void printLine(const std::string& line);
 
             std::string filename_;
Index: code/branches/output/src/libraries/util/output/MemoryWriter.h
===================================================================
--- code/branches/output/src/libraries/util/output/MemoryWriter.h	(revision 8793)
+++ code/branches/output/src/libraries/util/output/MemoryWriter.h	(revision 8794)
@@ -59,5 +59,5 @@
             MemoryWriter();
             MemoryWriter(const MemoryWriter&);
-            ~MemoryWriter();
+            virtual ~MemoryWriter();
 
             std::vector<Message> messages_;
Index: code/branches/output/src/libraries/util/output/OutputListener.h
===================================================================
--- code/branches/output/src/libraries/util/output/OutputListener.h	(revision 8793)
+++ code/branches/output/src/libraries/util/output/OutputListener.h	(revision 8794)
@@ -42,5 +42,5 @@
         public:
             OutputListener();
-            ~OutputListener();
+            virtual ~OutputListener();
 
             void setLevelMax(OutputLevel max);
