Index: /code/trunk/src/libraries/core/input/Button.cc
===================================================================
--- /code/trunk/src/libraries/core/input/Button.cc	(revision 6427)
+++ /code/trunk/src/libraries/core/input/Button.cc	(revision 6428)
@@ -42,5 +42,4 @@
 #include "core/CommandEvaluation.h"
 #include "core/CommandExecutor.h"
-#include "core/ConfigValueContainer.h"
 
 namespace orxonox
@@ -52,6 +51,5 @@
     */
     Button::Button()
-        : configContainer_(0)
-        , bButtonThresholdUser_(false)
+        : bButtonThresholdUser_(false)
         , paramCommandBuffer_(0)
     {
@@ -64,7 +62,4 @@
     {
         this->clear();
-
-        if (this->configContainer_)
-            delete this->configContainer_;
     }
 
@@ -83,21 +78,28 @@
             }
         }
-    }
-
-    void Button::readConfigValue(ConfigFileType configFile)
-    {
-        // create/get ConfigValueContainer
-        if (!configContainer_)
-        {
-            configContainer_ = new ConfigValueContainer(configFile, 0, groupName_, name_, "", name_);
-            configContainer_->callback(this, &Button::parse);
-        }
-        configContainer_->getValue(&bindingString_, this);
-    }
-
-    void Button::parse()
-    {
+        this->bindingString_.clear();
+    }
+
+    void Button::readBinding(ConfigFileType type)
+    {
+        const std::string& binding = ConfigFileManager::getInstance().getValue(type, groupName_, name_, "", true);
+        this->parse(binding);
+    }
+
+    void Button::setBinding(ConfigFileType type, const std::string& binding, bool bTemporary)
+    {
+        if (!bTemporary)
+            ConfigFileManager::getInstance().setValue(type, groupName_, name_, binding, true);
+        this->parse(binding);
+    }
+
+    void Button::parse(const std::string& binding)
+    {
+        if (binding == this->bindingString_)
+            return;
+
         // delete all commands
         clear();
+        this->bindingString_ = binding;
 
         if (isEmpty(bindingString_))
Index: /code/trunk/src/libraries/core/input/Button.h
===================================================================
--- /code/trunk/src/libraries/core/input/Button.h	(revision 6427)
+++ /code/trunk/src/libraries/core/input/Button.h	(revision 6428)
@@ -52,10 +52,9 @@
         virtual void clear();
         virtual bool addParamCommand(ParamCommand* command) { return false; }
-        void parse();
-        void readConfigValue(ConfigFileType configFile);
+        void parse(const std::string& binding);
+        void readBinding(ConfigFileType type);
+        void setBinding(ConfigFileType type, const std::string& binding, bool bTemporary);
         bool execute(KeybindMode::Value mode, float abs = 1.0f, float rel = 1.0f);
 
-        //! Container to allow for better configValue support
-        ConfigValueContainer* configContainer_;
         //! The configured string value
         std::string bindingString_;
Index: /code/trunk/src/libraries/core/input/KeyBinder.cc
===================================================================
--- /code/trunk/src/libraries/core/input/KeyBinder.cc	(revision 6427)
+++ /code/trunk/src/libraries/core/input/KeyBinder.cc	(revision 6428)
@@ -57,5 +57,5 @@
         RegisterRootObject(KeyBinder);
 
-        // intialise all buttons and half axes to avoid creating everything with 'new'
+        // initialise all buttons and half axes to avoid creating everything with 'new'
         // keys
         for (unsigned int i = 0; i < KeyCode::numberOfKeys; i++)
@@ -168,7 +168,7 @@
             {
                 for (unsigned int i = 0; i < JoyStickButtonCode::numberOfButtons; ++i)
-                    (*joyStickButtons_[iDev])[i].readConfigValue(this->configFile_);
+                    (*joyStickButtons_[iDev])[i].readBinding(this->configFile_);
                 for (unsigned int i = 0; i < JoyStickAxisCode::numberOfAxes * 2; ++i)
-                    (*joyStickAxes_[iDev])[i].readConfigValue(this->configFile_);
+                    (*joyStickAxes_[iDev])[i].readBinding(this->configFile_);
             }
         }
@@ -257,5 +257,5 @@
         for (std::map<std::string, Button*>::const_iterator it = allButtons_.begin(); it != allButtons_.end(); ++it)
         {
-            it->second->readConfigValue(this->configFile_);
+            it->second->readBinding(this->configFile_);
             addButtonToCommand(it->second->bindingString_, it->second);
         }
@@ -270,9 +270,5 @@
         {
             addButtonToCommand(binding, it->second);
-            if (bTemporary)
-                it->second->configContainer_->tset(binding);
-            else
-                it->second->configContainer_->set(binding);
-            it->second->configContainer_->getValue(&(it->second->bindingString_), it->second);
+            it->second->setBinding(this->configFile_, binding, bTemporary);
             return true;
         }
Index: /code/trunk/src/libraries/core/input/KeyBinder.h
===================================================================
--- /code/trunk/src/libraries/core/input/KeyBinder.h	(revision 6427)
+++ /code/trunk/src/libraries/core/input/KeyBinder.h	(revision 6428)
@@ -38,4 +38,5 @@
 #include <boost/shared_ptr.hpp>
 
+#include "core/ConfigFileManager.h"
 #include "InputHandler.h"
 #include "Button.h"
Index: /code/trunk/src/libraries/core/input/KeyDetector.cc
===================================================================
--- /code/trunk/src/libraries/core/input/KeyDetector.cc	(revision 6427)
+++ /code/trunk/src/libraries/core/input/KeyDetector.cc	(revision 6428)
@@ -64,10 +64,6 @@
     {
         // Assign every button/axis the same command, but with its name as argument
-        clearBindings();
         for (std::map<std::string, Button*>::const_iterator it = allButtons_.begin(); it != allButtons_.end(); ++it)
-        {
-            it->second->bindingString_ = callbackCommand_s + ' ' + it->second->groupName_ + "." + it->second->name_;
-            it->second->parse();
-        }
+            it->second->parse(callbackCommand_s + ' ' + it->second->groupName_ + "." + it->second->name_);
     }
 
