Index: code/branches/output/src/libraries/util/output/BaseWriter.cc
===================================================================
--- code/branches/output/src/libraries/util/output/BaseWriter.cc	(revision 8798)
+++ code/branches/output/src/libraries/util/output/BaseWriter.cc	(revision 8799)
@@ -33,6 +33,10 @@
 namespace orxonox
 {
-    BaseWriter::BaseWriter()
+    BaseWriter::BaseWriter(const std::string& name)
     {
+        this->name_ = name;
+
+        this->configurableMaxLevel_ = level::none;
+        this->configurableContextsMaxLevel_ = level::verbose;
     }
 
@@ -43,9 +47,38 @@
     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(), ' ');
+        if (level <= this->configurableMaxLevel_ || (level <= this->configurableContextsMaxLevel_ && this->isAdditionalContext(context)))
+        {
+            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], level);
+            for (size_t i = 0; i < lines.size(); ++i)
+                this->printLine((i == 0 ? prefix : blanks) + lines[i], level);
+        }
+    }
+
+    void BaseWriter::setLevelMax(OutputLevel max)
+    {
+        this->configurableMaxLevel_ = max;
+        this->changedConfigurableLevels();
+    }
+
+    void BaseWriter::changedConfigurableLevels()
+    {
+        OutputLevel max_level = std::max(this->configurableMaxLevel_, this->configurableContextsMaxLevel_);
+        OutputListener::setLevelMax(max_level);
+    }
+
+    void BaseWriter::changedConfigurableContexts()
+    {
+        this->configurableContextsSet_.clear();
+        for (size_t i = 0; i < this->configurableContexts_.size(); ++i)
+            this->configurableContextsSet_.insert(this->configurableContexts_[i]);
+    }
+
+    bool BaseWriter::isAdditionalContext(OutputContext context) const
+    {
+        const std::string& name = OutputManager::getInstance().getContextName(context);
+        std::set<std::string>::const_iterator it = this->configurableContextsSet_.find(name);
+        return (it != this->configurableContextsSet_.end());
     }
 }
Index: code/branches/output/src/libraries/util/output/BaseWriter.h
===================================================================
--- code/branches/output/src/libraries/util/output/BaseWriter.h	(revision 8798)
+++ code/branches/output/src/libraries/util/output/BaseWriter.h	(revision 8799)
@@ -31,4 +31,8 @@
 
 #include "util/UtilPrereqs.h"
+
+#include <set>
+#include <vector>
+
 #include "OutputListener.h"
 
@@ -38,6 +42,29 @@
     {
         public:
-            BaseWriter();
+            BaseWriter(const std::string& name);
             virtual ~BaseWriter();
+
+            const std::string& getName() const
+                { return this->name_; }
+
+            void setLevelMax(OutputLevel max);
+
+            OutputLevel configurableMaxLevel_;
+            inline std::string getConfigurableMaxLevelName() const
+                { return "outputLevel" + this->name_; }
+
+            OutputLevel configurableContextsMaxLevel_;
+            inline std::string getConfigurableContextsMaxLevelName() const
+                { return "outputContextsLevel" + this->name_; }
+
+            std::vector<std::string> configurableContexts_;
+            inline std::string getConfigurableContextsName() const
+                { return "outputContexts" + this->name_; }
+
+            void changedConfigurableLevels();
+            void changedConfigurableContexts();
+
+            static inline std::string getConfigurableSectionName()
+                { return "Output"; }
 
         protected:
@@ -46,4 +73,12 @@
         private:
             virtual void printLine(const std::string& line, OutputLevel level) = 0;
+
+            void setLevelRange(OutputLevel min, OutputLevel max);
+            void setLevelMask(OutputLevel mask);
+
+            bool isAdditionalContext(OutputContext context) const;
+
+            std::string name_;
+            std::set<std::string> configurableContextsSet_;
     };
 }
Index: code/branches/output/src/libraries/util/output/ConsoleWriter.cc
===================================================================
--- code/branches/output/src/libraries/util/output/ConsoleWriter.cc	(revision 8798)
+++ code/branches/output/src/libraries/util/output/ConsoleWriter.cc	(revision 8799)
@@ -35,5 +35,5 @@
 namespace orxonox
 {
-    ConsoleWriter::ConsoleWriter()
+    ConsoleWriter::ConsoleWriter() : BaseWriter("Console")
     {
 #ifdef ORXONOX_RELEASE
Index: code/branches/output/src/libraries/util/output/LogWriter.cc
===================================================================
--- code/branches/output/src/libraries/util/output/LogWriter.cc	(revision 8798)
+++ code/branches/output/src/libraries/util/output/LogWriter.cc	(revision 8799)
@@ -36,9 +36,9 @@
 namespace orxonox
 {
-    LogWriter::LogWriter()
+    LogWriter::LogWriter() : BaseWriter("Log")
     {
         this->setLevelMax(level::internal_info);
 
-        this->filename_ = "orxonox2.log";
+        this->filename_ = "orxonox.log";
 
         // Get path for a temporary file
Index: code/branches/output/src/libraries/util/output/OutputDefinitions.h
===================================================================
--- code/branches/output/src/libraries/util/output/OutputDefinitions.h	(revision 8798)
+++ code/branches/output/src/libraries/util/output/OutputDefinitions.h	(revision 8799)
@@ -44,4 +44,5 @@
         static const OutputLevel all              = 0xFFFF;
         static const OutputLevel none             = 0x0000;
+
         static const OutputLevel debug_output     = 0x0001;
         static const OutputLevel user_error       = 0x0002;
Index: code/branches/output/src/libraries/util/output/OutputManager.cc
===================================================================
--- code/branches/output/src/libraries/util/output/OutputManager.cc	(revision 8798)
+++ code/branches/output/src/libraries/util/output/OutputManager.cc	(revision 8799)
@@ -166,4 +166,13 @@
     }
 
+    OutputContext OutputManager::getContextValue(const std::string& name) const
+    {
+        boost::bimap<OutputContext, std::string>::right_map::const_iterator it = this->contexts_.right.find(name);
+        if (it != this->contexts_.right.end())
+            return it->second;
+        else
+            return context::none;
+    }
+
     std::string OutputManager::getComposedContextName(OutputContext context) const
     {
Index: code/branches/output/src/libraries/util/output/OutputManager.h
===================================================================
--- code/branches/output/src/libraries/util/output/OutputManager.h	(revision 8798)
+++ code/branches/output/src/libraries/util/output/OutputManager.h	(revision 8799)
@@ -66,4 +66,6 @@
             const std::string& getLevelName(OutputLevel level) const;
             const std::string& getContextName(OutputContext context) const;
+            OutputContext getContextValue(const std::string& name) const;
+
             std::string getComposedContextName(OutputContext context) const;
             std::string getDefaultPrefix(OutputLevel level, OutputContext context) const;
