Index: code/branches/input/src/core/InputHandler.cc
===================================================================
--- code/branches/input/src/core/InputHandler.cc	(revision 1110)
+++ code/branches/input/src/core/InputHandler.cc	(revision 1112)
@@ -38,4 +38,5 @@
 #include "InputEvent.h"
 #include "InputManager.h"
+#include "core/CommandExecutor.h"
 
 namespace orxonox
@@ -68,7 +69,9 @@
     {
       // simply write the key number (i) in the string
-      this->bindingsKeyPressed_[i] = getConvertedValue<int, std::string>(i);
-      this->bindingsKeyReleased_[i] = getConvertedValue<int, std::string>(i);
-    }
+      this->bindingsKeyPress_[i] = "";
+      this->bindingsKeyRelease_[i] = "";
+    }
+    this->bindingsKeyPress_[OIS::KC_NUMPADENTER] = "setInputMode " + getConvertedValue<int, std::string>(IM_KEYBOARD);
+    this->bindingsKeyPress_[OIS::KC_ESCAPE] = "exit";
     return true;
   }
@@ -80,18 +83,10 @@
   bool InputHandlerGame::keyPressed(const OIS::KeyEvent &e)
   {
-    if (e.key == OIS::KC_ESCAPE)
-    {
-      InputEvent e = {1, true, 0, 0, 0};
-      InputHandlerGame::callListeners(e);
-    }
-    else if (e.key == OIS::KC_NUMPADENTER)
-    {
-      InputManager::getSingleton().setInputMode(IM_KEYBOARD);
-    }
-    else
-    {
-      // find the appropriate key binding
-      std::string cmdStr = bindingsKeyPressed_[int(e.key)];
-      //COUT(3) << cmdStr << " pressed" << std::endl;
+    // find the appropriate key binding
+    std::string cmdStr = bindingsKeyPress_[int(e.key)];
+    if (cmdStr != "")
+    {
+      CommandExecutor::execute(cmdStr);
+      COUT(3) << "Executing command: " << cmdStr << std::endl;
     }
     return true;
@@ -105,6 +100,10 @@
   {
     // find the appropriate key binding
-    std::string cmdStr = bindingsKeyReleased_[int(e.key)];
-    //COUT(3) << cmdStr << " released" << std::endl;
+    std::string cmdStr = bindingsKeyRelease_[int(e.key)];
+    if (cmdStr != "")
+    {
+      CommandExecutor::execute(cmdStr);
+      COUT(3) << "Executing command: " << cmdStr << std::endl;
+    }
     return true;
   }
Index: code/branches/input/src/core/InputHandler.h
===================================================================
--- code/branches/input/src/core/InputHandler.h	(revision 1110)
+++ code/branches/input/src/core/InputHandler.h	(revision 1112)
@@ -44,10 +44,25 @@
 namespace orxonox
 {
+  namespace KeybindSetting
+  {
+    enum KeybindSetting
+    {
+      none,
+      onPress,
+      onRelease,
+      continuous,
+    };
+  }
+
+  class _CoreExport BaseInputHandler
+      : public OIS::KeyListener, public OIS::MouseListener
+  {
+  };
+    
   /**
     @brief Captures mouse and keyboard input while in the actual game mode.
     Manages the key bindings.
   */
-  class _CoreExport InputHandlerGame
-        : public OIS::KeyListener, public OIS::MouseListener
+  class _CoreExport InputHandlerGame : public BaseInputHandler
   {
   public:
@@ -72,7 +87,9 @@
     static const int numberOfKeys_s = 256;
     //! Array of input events for every pressed key
-    std::string bindingsKeyPressed_[numberOfKeys_s];
+    std::string bindingsKeyPress_[numberOfKeys_s];
     //! Array of input events for every released key
-    std::string bindingsKeyReleased_[numberOfKeys_s];
+    std::string bindingsKeyRelease_[numberOfKeys_s];
+    //! Array of input events for every holding key
+    std::string bindingsKeyHold_[numberOfKeys_s];
 
     /** denotes the maximum number of different buttons there are in OIS.
@@ -91,6 +108,5 @@
     GUI.
   */
-  class _CoreExport InputHandlerGUI
-        : public OIS::KeyListener, public OIS::MouseListener
+  class _CoreExport InputHandlerGUI : public BaseInputHandler
   {
   public:
Index: code/branches/input/src/core/InputManager.cc
===================================================================
--- code/branches/input/src/core/InputManager.cc	(revision 1110)
+++ code/branches/input/src/core/InputManager.cc	(revision 1112)
@@ -93,7 +93,7 @@
       paramList.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
 
-#if defined OIS_LINUX_PLATFORM
-      paramList.insert(std::make_pair(std::string("XAutoRepeatOn"), std::string("true")));
-#endif
+//#if defined OIS_LINUX_PLATFORM
+//      paramList.insert(std::make_pair(std::string("XAutoRepeatOn"), std::string("true")));
+//#endif
 
       try
Index: code/branches/input/src/orxonox/Orxonox.cc
===================================================================
--- code/branches/input/src/orxonox/Orxonox.cc	(revision 1110)
+++ code/branches/input/src/orxonox/Orxonox.cc	(revision 1112)
@@ -54,4 +54,5 @@
 //#include "util/Sleep.h"
 #include "util/ArgReader.h"
+#include "util/FloatParser.h"
 
 // core
@@ -123,4 +124,24 @@
       InputBuffer* ib_;
   };
+
+  class Calculator
+  {
+  public:
+    static void calculate(std::string calculation)
+    {
+      char** useless = 0;
+      double result = 0.0;
+      bool success = parse_float((char* const)calculation.c_str(), useless, &result);
+      if (success)
+      {
+        if (result == 42.0)
+          std::cout << "Greetings from the restaurant at the end of the universe." << std::endl;
+        std::cout << "Result is: " << result << std::endl;
+      }
+      else
+        std::cout << "Cannot calculate expression: Parse error" << std::endl;
+    }
+  };
+  ConsoleCommandShortcut(Calculator, calculate, AccessLevel::None);
 
   /**
@@ -410,4 +431,6 @@
       return;
     }
+    Ogre::Root& ogreRoot = Ogre::Root::getSingleton();
+
 
     // Contains the times of recently fired events
@@ -429,4 +452,5 @@
 	  {
 		  // Pump messages in all registered RenderWindows
+      // This calls the WindowEventListener objects.
       Ogre::WindowEventUtilities::messagePump();
 
@@ -452,9 +476,9 @@
       // don't forget to call _fireFrameStarted in ogre to make sure
       // everything goes smoothly
-      Ogre::Root::getSingleton()._fireFrameStarted(evt);
+      ogreRoot._fireFrameStarted(evt);
 
       // server still renders at the moment
       //if (mode_ != SERVER)
-      Ogre::Root::getSingleton()._updateAllRenderTargets(); // only render in non-server mode
+      ogreRoot._updateAllRenderTargets(); // only render in non-server mode
 
       // get current time
@@ -466,5 +490,5 @@
 
       // again, just to be sure ogre works fine
-      Ogre::Root::getSingleton()._fireFrameEnded(evt);
+      ogreRoot._fireFrameEnded(evt);
 	  }
   }
Index: code/branches/input/src/util/String.cc
===================================================================
--- code/branches/input/src/util/String.cc	(revision 1110)
+++ code/branches/input/src/util/String.cc	(revision 1112)
@@ -274,4 +274,12 @@
     if (str.size() == 0)
         return str;
+    else if (str.size() == 1)
+    {
+      //TODO: decide whether we need the commented code
+      /*if (str[0] != '\\')
+        return "";
+      else*/
+      return str;
+    }
 
     std::string output = "";
Index: code/branches/input/visual_studio/loader_properties.vsprops
===================================================================
--- code/branches/input/visual_studio/loader_properties.vsprops	(revision 1110)
+++ 	(revision )
@@ -1,17 +1,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioPropertySheet
-	ProjectType="Visual C++"
-	Version="8.00"
-	Name="loader_properties"
-	InheritedPropertySheets=".\directory_properties.vsprops"
-	>
-	<Tool
-		Name="VCCLCompilerTool"
-		PreprocessorDefinitions="LOADER_SHARED_BUILD"
-	/>
-	<Tool
-		Name="VCLinkerTool"
-		AdditionalDependencies="OgreMain$(CS).lib"
-		AdditionalLibraryDirectories="$(OutDir)"
-	/>
-</VisualStudioPropertySheet>
Index: code/branches/input/visual_studio/vc8/core.vcproj
===================================================================
--- code/branches/input/visual_studio/vc8/core.vcproj	(revision 1110)
+++ code/branches/input/visual_studio/vc8/core.vcproj	(revision 1112)
@@ -258,11 +258,4 @@
 					RelativePath="..\..\src\core\tolua\tolua_bind.cc"
 					>
-					<FileConfiguration
-						Name="Debug|Win32"
-						>
-						<Tool
-							Name="VCCLCompilerTool"
-						/>
-					</FileConfiguration>
 				</File>
 			</Filter>
Index: code/branches/input/visual_studio/vc8/util.vcproj
===================================================================
--- code/branches/input/visual_studio/vc8/util.vcproj	(revision 1110)
+++ code/branches/input/visual_studio/vc8/util.vcproj	(revision 1112)
@@ -157,4 +157,8 @@
 			</File>
 			<File
+				RelativePath="..\..\src\util\FloatParser.cpp"
+				>
+			</File>
+			<File
 				RelativePath="..\..\src\util\Math.cc"
 				>
@@ -199,4 +203,8 @@
 			</File>
 			<File
+				RelativePath="..\..\src\util\FloatParser.h"
+				>
+			</File>
+			<File
 				RelativePath="..\..\src\util\Math.h"
 				>
