Index: /code/branches/input/src/orxonox/Orxonox.cc
===================================================================
--- /code/branches/input/src/orxonox/Orxonox.cc	(revision 972)
+++ /code/branches/input/src/orxonox/Orxonox.cc	(revision 973)
@@ -70,5 +70,5 @@
 #include "objects/weapon/BulletManager.h"
 
-#include "InputHandler.h"
+#include "core/InputManager.h"
 
 #include "Orxonox.h"
@@ -108,5 +108,5 @@
       delete this->orxonoxHUD_;
     Loader::close();
-    InputHandler::destroySingleton();
+    InputManager::destroySingleton();
     if (this->auMan_)
       delete this->auMan_;
@@ -327,5 +327,5 @@
   void Orxonox::setupInputSystem()
   {
-    inputHandler_ = InputHandler::getSingleton();
+    inputHandler_ = InputManager::getSingleton();
     if (!inputHandler_->initialise(ogre_->getWindowHandle(),
           ogre_->getWindowWidth(), ogre_->getWindowHeight()))
Index: /code/branches/input/src/orxonox/Orxonox.h
===================================================================
--- /code/branches/input/src/orxonox/Orxonox.h	(revision 972)
+++ /code/branches/input/src/orxonox/Orxonox.h	(revision 973)
@@ -17,5 +17,5 @@
 
 #include "GraphicsEngine.h"
-#include "InputEventListener.h"
+#include "core/InputEventListener.h"
 
 
@@ -75,5 +75,5 @@
       audio::AudioManager*  auMan_;         //!< audio manager
       BulletManager*        bulletMgr_;     //!< Keeps track of the thrown bullets
-      InputHandler*         inputHandler_;  //!< Handles input with key bindings
+      InputManager*         inputHandler_;  //!< Handles input with key bindings
       Ogre::Root*           root_;          //!< Holy grail of Ogre
       Ogre::Timer*          timer_;         //!< Main loop timer
Index: /code/branches/input/src/orxonox/OrxonoxPrereqs.h
===================================================================
--- /code/branches/input/src/orxonox/OrxonoxPrereqs.h	(revision 972)
+++ /code/branches/input/src/orxonox/OrxonoxPrereqs.h	(revision 973)
@@ -61,7 +61,4 @@
 namespace orxonox {
   class GraphicsEngine;
-  struct InputEvent;
-  class InputEventListener;
-  class InputHandler;
   class Orxonox;
 
Index: /code/branches/input/src/orxonox/core/CorePrereqs.h
===================================================================
--- /code/branches/input/src/orxonox/core/CorePrereqs.h	(revision 972)
+++ /code/branches/input/src/orxonox/core/CorePrereqs.h	(revision 973)
@@ -36,5 +36,5 @@
 #include <string>
 
-#include "orxonox/OrxonoxPlatform.h"
+#include "OrxonoxPlatform.h"
 
 //-----------------------------------------------------------------------
@@ -86,4 +86,7 @@
   class Identifier;
   class IdentifierDistributor;
+  class InputHandlerGame;
+  class InputHandlerGUI;
+  class InputManager;
   template <class T>
   class Iterator;
Index: /code/branches/input/src/orxonox/core/InputEventListener.h
===================================================================
--- /code/branches/input/src/orxonox/core/InputEventListener.h	(revision 972)
+++ /code/branches/input/src/orxonox/core/InputEventListener.h	(revision 973)
@@ -46,5 +46,5 @@
   class _CoreExport InputEventListener : virtual public OrxonoxClass
   {
-    friend class InputHandler;
+    friend class InputManager;
   public:
     InputEventListener();
Index: /code/branches/input/src/orxonox/core/InputHandler.cc
===================================================================
--- /code/branches/input/src/orxonox/core/InputHandler.cc	(revision 972)
+++ /code/branches/input/src/orxonox/core/InputHandler.cc	(revision 973)
@@ -28,182 +28,27 @@
 /**
  @file
- @brief Implementation of a little Input handler that distributes everything
-        coming from OIS.
+ @brief Implementation of the different input handlers.
  */
 
-#include "core/CoreIncludes.h"
-#include "core/Debug.h"
-#include "InputEventListener.h"
 #include "InputHandler.h"
 
 namespace orxonox
 {
-  /**
-    @brief The reference to the singleton
-  */
-  InputHandler* InputHandler::singletonRef_s = 0;
+  // ###############################
+  // ###    InputHandlerGame     ###
+  // ###############################
 
   /**
-    @brief Constructor only resets the pointer values to 0.
+    @brief standard constructor
   */
-  InputHandler::InputHandler() :
-      mouse_(0), keyboard_(0), inputSystem_(0)
+  InputHandlerGame::InputHandlerGame()
   {
   }
 
   /**
-    @brief Destructor only called at the end of the program
+    @brief Destructor
   */
-  InputHandler::~InputHandler()
+  InputHandlerGame::~InputHandlerGame()
   {
-    this->destroyDevices();
-  }
-
-  /**
-    @brief The one instance of the InputHandler is stored in this function.
-    @return The pointer to the only instance of the InputHandler
-  */
-  InputHandler *InputHandler::getSingleton()
-  {
-    if (!singletonRef_s)
-      singletonRef_s = new InputHandler();
-    return singletonRef_s;
-  }
-
-  /**
-    @brief Creates the OIS::InputMananger, the keyboard and the mouse and
-           assigns the key bindings.
-    @param windowHnd The window handle of the render window
-    @param windowWidth The width of the render window
-    @param windowHeight The height of the render window
-  */
-  bool InputHandler::initialise(size_t windowHnd, int windowWidth, int windowHeight)
-  {
-    if (!this->inputSystem_)
-    {
-      // Setup basic variables
-      OIS::ParamList paramList;
-      std::ostringstream windowHndStr;
-
-      // Fill parameter list
-      windowHndStr << (unsigned int)windowHnd;
-      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
-
-      try
-      {
-        // Create inputsystem
-        inputSystem_ = OIS::InputManager::createInputSystem(paramList);
-        COUT(ORX_DEBUG) << "*** InputHandler: Created OIS input system" << std::endl;
-
-        // create a keyboard. If none are available the exception is caught.
-        keyboard_ = static_cast<OIS::Keyboard*>(inputSystem_->createInputObject(OIS::OISKeyboard, true));
-        keyboard_->setEventCallback(this);
-        COUT(ORX_DEBUG) << "*** InputHandler: Created OIS mouse" << std::endl;
-
-        // create a mouse. If none are available the exception is caught.
-        mouse_ = static_cast<OIS::Mouse*>(inputSystem_->createInputObject(OIS::OISMouse, true));
-        mouse_->setEventCallback(this);
-        COUT(ORX_DEBUG) << "*** InputHandler: Created OIS keyboard" << std::endl;
-
-        // Set mouse region
-        this->setWindowExtents(windowWidth, windowHeight);
-      }
-      catch (OIS::Exception ex)
-      {
-        // something went wrong with the initialisation
-        COUT(ORX_ERROR) << "Error: Failed creating an input system/keyboard/mouse. Message: \"" << ex.eText << "\"" << std::endl;
-        this->inputSystem_ = 0;
-        return false;
-      }
-    }
-
-    COUT(ORX_DEBUG) << "*** InputHandler: Loading key bindings..." << std::endl;
-    // load the key bindings
-    InputEvent empty = {0, false, 0, 0, 0};
-    for (int i = 0; i < this->numberOfKeys_; i++)
-      this->bindingsKeyPressed_[i] = empty;
-
-    //assign 'abort' to the escape key
-    this->bindingsKeyPressed_[(int)OIS::KC_ESCAPE].id = 1;
-    COUT(ORX_DEBUG) << "*** InputHandler: Loading done." << std::endl;
-
-    return true;
-  }
-
-  /**
-    @brief Destroys all the created input devices.
-  */
-  void InputHandler::destroyDevices()
-  {
-    COUT(ORX_DEBUG) << "*** InputHandler: Destroying InputHandler..." << std::endl;
-    if (this->mouse_)
-      this->inputSystem_->destroyInputObject(mouse_);
-    if (this->keyboard_)
-      this->inputSystem_->destroyInputObject(keyboard_);
-    if (this->inputSystem_)
-      OIS::InputManager::destroyInputSystem(this->inputSystem_);
-
-    this->mouse_         = 0;
-    this->keyboard_      = 0;
-    this->inputSystem_   = 0;
-    COUT(ORX_DEBUG) << "*** InputHandler: Destroying done." << std::endl;
-  }
-
-  /**
-    @brief Destroys the singleton.
-  */
-  void InputHandler::destroySingleton()
-  {
-    if (singletonRef_s)
-      delete singletonRef_s;
-    singletonRef_s = 0;
-  }
-
-  /**
-    @brief Updates the InputHandler
-    @param dt Delta time
-  */
-  void InputHandler::tick(float dt)
-  {
-    //this->mouse_->setEventCallback(this);
-    // capture all the input. That calls the event handlers.
-    if (mouse_)
-      mouse_->capture();
-
-    if (keyboard_)
-      keyboard_->capture();
-  }
-
-  /**
-    @brief Adjusts the mouse window metrics.
-    This method has to be called every time the size of the window changes.
-    @param width The new width of the render window
-    @param height the new height of the render window
-  */
-  void InputHandler::setWindowExtents(int width, int height)
-  {
-    // Set mouse region (if window resizes, we should alter this to reflect as well)
-    const OIS::MouseState &mouseState = mouse_->getMouseState();
-    mouseState.width  = width;
-    mouseState.height = height;
-  }
-
-  /**
-    @brief Calls all the objects from classes that derive from InputEventListener.
-    @param evt The input event that occured.
-  */
-  inline void InputHandler::callListeners(orxonox::InputEvent &evt)
-  {
-    for (Iterator<InputEventListener> it = ObjectList<InputEventListener>::start(); it; )
-    {
-      if (it->bActive_)
-        (it++)->eventOccured(evt);
-      else
-        it++;
-    }
   }
 
@@ -212,7 +57,6 @@
     @param e Event information
   */
-  bool InputHandler::keyPressed(const OIS::KeyEvent &e)
+  bool InputHandlerGame::keyPressed(const OIS::KeyEvent &e)
   {
-    callListeners(this->bindingsKeyPressed_[(int)e.key]);
     return true;
   }
@@ -222,5 +66,5 @@
     @param e Event information
   */
-  bool InputHandler::keyReleased(const OIS::KeyEvent &e)
+  bool InputHandlerGame::keyReleased(const OIS::KeyEvent &e)
   {
     return true;
@@ -231,5 +75,5 @@
     @param e Event information
   */
-  bool InputHandler::mouseMoved(const OIS::MouseEvent &e)
+  bool InputHandlerGame::mouseMoved(const OIS::MouseEvent &e)
   {
     return true;
@@ -241,7 +85,6 @@
     @param id The ID of the mouse button
   */
-  bool InputHandler::mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+  bool InputHandlerGame::mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id)
   {
-    COUT(1) << "asdf" << std::endl;
     return true;
   }
@@ -252,5 +95,70 @@
     @param id The ID of the mouse button
   */
-  bool InputHandler::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+  bool InputHandlerGame::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+  {
+    return true;
+  }
+
+  // ###############################
+  // ###     InputHandlerGUI     ###
+  // ###############################
+
+  /**
+    @brief standard constructor
+  */
+  InputHandlerGUI::InputHandlerGUI()
+  {
+  }
+
+  /**
+    @brief Destructor
+  */
+  InputHandlerGUI::~InputHandlerGUI()
+  {
+  }
+
+  /**
+    @brief Event handler for the keyPressed Event.
+    @param e Event information
+  */
+  bool InputHandlerGUI::keyPressed(const OIS::KeyEvent &e)
+  {
+    return true;
+  }
+
+  /**
+    @brief Event handler for the keyReleased Event.
+    @param e Event information
+  */
+  bool InputHandlerGUI::keyReleased(const OIS::KeyEvent &e)
+  {
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mouseMoved Event.
+    @param e Event information
+  */
+  bool InputHandlerGUI::mouseMoved(const OIS::MouseEvent &e)
+  {
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mousePressed Event.
+    @param e Event information
+    @param id The ID of the mouse button
+  */
+  bool InputHandlerGUI::mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+  {
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mouseReleased Event.
+    @param e Event information
+    @param id The ID of the mouse button
+  */
+  bool InputHandlerGUI::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id)
   {
     return true;
Index: /code/branches/input/src/orxonox/core/InputHandler.h
===================================================================
--- /code/branches/input/src/orxonox/core/InputHandler.h	(revision 972)
+++ /code/branches/input/src/orxonox/core/InputHandler.h	(revision 973)
@@ -28,6 +28,5 @@
 /**
  @file
- @brief Implementation of a little Input handler that distributes everything
-        coming from OIS.
+ @brief Different implementations of input processing.
  */
 
@@ -38,52 +37,19 @@
 
 #include "CorePrereqs.h"
-#include "core/Tickable.h"
-#include "InputEvent.h"
 
 namespace orxonox
 {
   /**
-    @brief Designates the way input is handled currently.
-    IM_GUI:      All the OIS input events are passed to CEGUI
-    IM_KEYBOARD: Only keyboard input is captured and passed to the InputBuffer
-    IM_INGAME:   Normal game mode. Key bindings and mouse are active.
+    @brief Captures mouse and keyboard input and distributes it to the
+    GUI.
   */
-  enum InputMode
-  {
-    IM_GUI      = 0;
-    IM_KEYBOARD = 1;
-    IM_INGAME   = 2;
-  };
-
-  /**
-    @brief Captures and distributes mouse and keyboard input.
-    It resolves the key bindings to InputEvents which can be heard by
-    implementing the InputEventListener interface.
-  */
-  class _CoreExport InputHandler
-        : public Tickable, public OIS::KeyListener, public OIS::MouseListener
+  class _CoreExport InputHandlerGUI
+        : public OIS::KeyListener, public OIS::MouseListener
   {
   public:
-    bool initialise(size_t windowHnd, int windowWidth, int windowHeight);
-    void destroyDevices();
-    void tick(float dt);
-    void setWindowExtents(int width, int height);
-
-    // Temporary solutions. Will be removed soon!
-    OIS::Mouse    *getMouse()    { return this->mouse_   ; }
-    OIS::Keyboard *getKeyboard() { return this->keyboard_; }
-
-    static InputHandler* getSingleton();
-    static void destroySingleton();
+    InputHandlerGUI ();
+    ~InputHandlerGUI();
 
   private:
-    // don't mess with a Singleton
-    InputHandler ();
-    InputHandler (const InputHandler&);
-    InputHandler& operator=(const InputHandler& instance);
-    ~InputHandler();
-
-    void callListeners(InputEvent &evt);
-
     // input events
 		bool mousePressed (const OIS::MouseEvent &arg, OIS::MouseButtonID id);
@@ -92,28 +58,27 @@
 		bool keyPressed   (const OIS::KeyEvent   &arg);
 		bool keyReleased  (const OIS::KeyEvent   &arg);
+  };
 
-    OIS::InputManager *inputSystem_;    //!< OIS input manager
-    OIS::Keyboard     *keyboard_;       //!< OIS mouse
-    OIS::Mouse        *mouse_;          //!< OIS keyboard
 
-    /** denotes the maximum number of different keys there are in OIS.
-        256 should be ok since the highest number in the enum is 237. */
-    static const int numberOfKeys_ = 256;
-    //! Array of input events for every pressed key
-    InputEvent bindingsKeyPressed_[numberOfKeys_];
-    //! Array of input events for every released key
-    InputEvent bindingsKeyReleased_[numberOfKeys_];
+  /**
+    @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
+  {
+  public:
+    InputHandlerGame ();
+    ~InputHandlerGame();
 
-    /** denotes the maximum number of different buttons there are in OIS.
-        16 should be ok since the highest number in the enum is 7. */
-    static const int numberOfButtons_ = 16;
-    //! Array of input events for every pressed key
-    InputEvent bindingsButtonPressed_[numberOfButtons_];
-    //! Array of input events for every released key
-    InputEvent bindingsButtonReleased_[numberOfButtons_];
+  private:
+    // input events
+		bool mousePressed (const OIS::MouseEvent &arg, OIS::MouseButtonID id);
+		bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id);
+    bool mouseMoved   (const OIS::MouseEvent &arg);
+		bool keyPressed   (const OIS::KeyEvent   &arg);
+		bool keyReleased  (const OIS::KeyEvent   &arg);
+  };
 
-    //! Pointer to the instance of the singleton
-    static InputHandler *singletonRef_s;
-  };
 }
 
Index: de/branches/input/src/orxonox/core/InputHandlerBase.cc
===================================================================
--- /code/branches/input/src/orxonox/core/InputHandlerBase.cc	(revision 972)
+++ 	(revision )
@@ -1,41 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   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:
- *      Reto Grieder
- *   Co-authors:
- *      ...
- *
- */
-
-/**
- @file
- @brief Core relevant parts of InputEventListener
- */
-
-#include "InputHandlerBase.h"
-
-namespace orxonox
-{
-  /**
-    @brief standard constructor
-  */
-
-}
Index: de/branches/input/src/orxonox/core/InputHandlerBase.h
===================================================================
--- /code/branches/input/src/orxonox/core/InputHandlerBase.h	(revision 972)
+++ 	(revision )
@@ -1,48 +1,0 @@
-/*
- *   ORXONOX - the hottest 3D action shooter ever to exist
- *
- *
- *   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:
- *      Reto Grieder
- *   Co-authors:
- *      ...
- *
- */
-
-/**
- @file
- @brief InputHandlerBuffer class declaration
- */
-
-#ifndef _InputHandlerBase_H__
-#define _InputHandlerBase_H__
-
-#include "CorePrereqs.h"
-
-namespace orxonox
-{
-  /**
-    @brief
-  */
-  class InputHandlerBase
-  {
-  };
-}
-
-#endif /* _InputHandlerBase_H__ */
Index: /code/branches/input/src/orxonox/core/InputManager.cc
===================================================================
--- /code/branches/input/src/orxonox/core/InputManager.cc	(revision 973)
+++ /code/branches/input/src/orxonox/core/InputManager.cc	(revision 973)
@@ -0,0 +1,259 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   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:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file
+ @brief Implementation of a little Input handler that distributes everything
+        coming from OIS.
+ */
+
+#include "core/CoreIncludes.h"
+#include "core/Debug.h"
+#include "InputEventListener.h"
+#include "InputManager.h"
+
+namespace orxonox
+{
+  /**
+    @brief The reference to the singleton
+  */
+  InputManager* InputManager::singletonRef_s = 0;
+
+  /**
+    @brief Constructor only resets the pointer values to 0.
+  */
+  InputManager::InputManager() :
+      mouse_(0), keyboard_(0), inputSystem_(0)
+  {
+  }
+
+  /**
+    @brief Destructor only called at the end of the program
+  */
+  InputManager::~InputManager()
+  {
+    this->destroyDevices();
+  }
+
+  /**
+    @brief The one instance of the InputManager is stored in this function.
+    @return The pointer to the only instance of the InputManager
+  */
+  InputManager *InputManager::getSingleton()
+  {
+    if (!singletonRef_s)
+      singletonRef_s = new InputManager();
+    return singletonRef_s;
+  }
+
+  /**
+    @brief Creates the OIS::InputMananger, the keyboard and the mouse and
+           assigns the key bindings.
+    @param windowHnd The window handle of the render window
+    @param windowWidth The width of the render window
+    @param windowHeight The height of the render window
+  */
+  bool InputManager::initialise(size_t windowHnd, int windowWidth, int windowHeight)
+  {
+    if (!this->inputSystem_)
+    {
+      // Setup basic variables
+      OIS::ParamList paramList;
+      std::ostringstream windowHndStr;
+
+      // Fill parameter list
+      windowHndStr << (unsigned int)windowHnd;
+      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
+
+      try
+      {
+        // Create inputsystem
+        inputSystem_ = OIS::InputManager::createInputSystem(paramList);
+        COUT(ORX_DEBUG) << "*** InputManager: Created OIS input system" << std::endl;
+
+        // create a keyboard. If none are available the exception is caught.
+        keyboard_ = static_cast<OIS::Keyboard*>(inputSystem_->createInputObject(OIS::OISKeyboard, true));
+        keyboard_->setEventCallback(this);
+        COUT(ORX_DEBUG) << "*** InputManager: Created OIS mouse" << std::endl;
+
+        // create a mouse. If none are available the exception is caught.
+        mouse_ = static_cast<OIS::Mouse*>(inputSystem_->createInputObject(OIS::OISMouse, true));
+        mouse_->setEventCallback(this);
+        COUT(ORX_DEBUG) << "*** InputManager: Created OIS keyboard" << std::endl;
+
+        // Set mouse region
+        this->setWindowExtents(windowWidth, windowHeight);
+      }
+      catch (OIS::Exception ex)
+      {
+        // something went wrong with the initialisation
+        COUT(ORX_ERROR) << "Error: Failed creating an input system/keyboard/mouse. Message: \"" << ex.eText << "\"" << std::endl;
+        this->inputSystem_ = 0;
+        return false;
+      }
+    }
+
+    COUT(ORX_DEBUG) << "*** InputManager: Loading key bindings..." << std::endl;
+    // load the key bindings
+    InputEvent empty = {0, false, 0, 0, 0};
+    for (int i = 0; i < this->numberOfKeys_; i++)
+      this->bindingsKeyPressed_[i] = empty;
+
+    //assign 'abort' to the escape key
+    this->bindingsKeyPressed_[(int)OIS::KC_ESCAPE].id = 1;
+    COUT(ORX_DEBUG) << "*** InputManager: Loading done." << std::endl;
+
+    return true;
+  }
+
+  /**
+    @brief Destroys all the created input devices.
+  */
+  void InputManager::destroyDevices()
+  {
+    COUT(ORX_DEBUG) << "*** InputManager: Destroying InputManager..." << std::endl;
+    if (this->mouse_)
+      this->inputSystem_->destroyInputObject(mouse_);
+    if (this->keyboard_)
+      this->inputSystem_->destroyInputObject(keyboard_);
+    if (this->inputSystem_)
+      OIS::InputManager::destroyInputSystem(this->inputSystem_);
+
+    this->mouse_         = 0;
+    this->keyboard_      = 0;
+    this->inputSystem_   = 0;
+    COUT(ORX_DEBUG) << "*** InputManager: Destroying done." << std::endl;
+  }
+
+  /**
+    @brief Destroys the singleton.
+  */
+  void InputManager::destroySingleton()
+  {
+    if (singletonRef_s)
+      delete singletonRef_s;
+    singletonRef_s = 0;
+  }
+
+  /**
+    @brief Updates the InputManager
+    @param dt Delta time
+  */
+  void InputManager::tick(float dt)
+  {
+    //this->mouse_->setEventCallback(this);
+    // capture all the input. That calls the event handlers.
+    if (mouse_)
+      mouse_->capture();
+
+    if (keyboard_)
+      keyboard_->capture();
+  }
+
+  /**
+    @brief Adjusts the mouse window metrics.
+    This method has to be called every time the size of the window changes.
+    @param width The new width of the render window
+    @param height the new height of the render window
+  */
+  void InputManager::setWindowExtents(int width, int height)
+  {
+    // Set mouse region (if window resizes, we should alter this to reflect as well)
+    const OIS::MouseState &mouseState = mouse_->getMouseState();
+    mouseState.width  = width;
+    mouseState.height = height;
+  }
+
+  /**
+    @brief Calls all the objects from classes that derive from InputEventListener.
+    @param evt The input event that occured.
+  */
+  inline void InputManager::callListeners(orxonox::InputEvent &evt)
+  {
+    for (Iterator<InputEventListener> it = ObjectList<InputEventListener>::start(); it; )
+    {
+      if (it->bActive_)
+        (it++)->eventOccured(evt);
+      else
+        it++;
+    }
+  }
+
+  /**
+    @brief Event handler for the keyPressed Event.
+    @param e Event information
+  */
+  bool InputManager::keyPressed(const OIS::KeyEvent &e)
+  {
+    callListeners(this->bindingsKeyPressed_[(int)e.key]);
+    return true;
+  }
+
+  /**
+    @brief Event handler for the keyReleased Event.
+    @param e Event information
+  */
+  bool InputManager::keyReleased(const OIS::KeyEvent &e)
+  {
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mouseMoved Event.
+    @param e Event information
+  */
+  bool InputManager::mouseMoved(const OIS::MouseEvent &e)
+  {
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mousePressed Event.
+    @param e Event information
+    @param id The ID of the mouse button
+  */
+  bool InputManager::mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+  {
+    COUT(1) << "asdf" << std::endl;
+    return true;
+  }
+
+  /**
+    @brief Event handler for the mouseReleased Event.
+    @param e Event information
+    @param id The ID of the mouse button
+  */
+  bool InputManager::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id)
+  {
+    return true;
+  }
+
+}
Index: /code/branches/input/src/orxonox/core/InputManager.h
===================================================================
--- /code/branches/input/src/orxonox/core/InputManager.h	(revision 973)
+++ /code/branches/input/src/orxonox/core/InputManager.h	(revision 973)
@@ -0,0 +1,120 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *
+ *
+ *   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:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+ @file
+ @brief Implementation of a little Input handler that distributes everything
+        coming from OIS.
+ */
+
+#ifndef _InputManager_H__
+#define _InputManager_H__
+
+#include <OIS/OIS.h>
+
+#include "CorePrereqs.h"
+#include "core/Tickable.h"
+#include "InputEvent.h"
+
+namespace orxonox
+{
+  /**
+    @brief Designates the way input is handled currently.
+    IM_GUI:      All the OIS input events are passed to CEGUI
+    IM_KEYBOARD: Only keyboard input is captured and passed to the InputBuffer
+    IM_INGAME:   Normal game mode. Key bindings and mouse are active.
+  */
+  enum InputMode
+  {
+    IM_GUI      = 0,
+    IM_KEYBOARD = 1,
+    IM_INGAME   = 2,
+  };
+
+  /**
+    @brief Captures and distributes mouse and keyboard input.
+    It resolves the key bindings to InputEvents which can be heard by
+    implementing the InputEventListener interface.
+  */
+  class _CoreExport InputManager
+        : public Tickable, public OIS::KeyListener, public OIS::MouseListener
+  {
+  public:
+    bool initialise(size_t windowHnd, int windowWidth, int windowHeight);
+    void destroyDevices();
+    void tick(float dt);
+    void setWindowExtents(int width, int height);
+
+    // Temporary solutions. Will be removed soon!
+    OIS::Mouse    *getMouse()    { return this->mouse_   ; }
+    OIS::Keyboard *getKeyboard() { return this->keyboard_; }
+
+    static InputManager* getSingleton();
+    static void destroySingleton();
+
+  private:
+    // don't mess with a Singleton
+    InputManager ();
+    InputManager (const InputManager&);
+    InputManager& operator=(const InputManager& instance);
+    ~InputManager();
+
+    void callListeners(InputEvent &evt);
+
+    // input events
+		bool mousePressed (const OIS::MouseEvent &arg, OIS::MouseButtonID id);
+		bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id);
+    bool mouseMoved   (const OIS::MouseEvent &arg);
+		bool keyPressed   (const OIS::KeyEvent   &arg);
+		bool keyReleased  (const OIS::KeyEvent   &arg);
+
+    OIS::InputManager *inputSystem_;    //!< OIS input manager
+    OIS::Keyboard     *keyboard_;       //!< OIS mouse
+    OIS::Mouse        *mouse_;          //!< OIS keyboard
+
+    /** denotes the maximum number of different keys there are in OIS.
+        256 should be ok since the highest number in the enum is 237. */
+    static const int numberOfKeys_ = 256;
+    //! Array of input events for every pressed key
+    InputEvent bindingsKeyPressed_[numberOfKeys_];
+    //! Array of input events for every released key
+    InputEvent bindingsKeyReleased_[numberOfKeys_];
+
+    /** denotes the maximum number of different buttons there are in OIS.
+        16 should be ok since the highest number in the enum is 7. */
+    static const int numberOfButtons_ = 16;
+    //! Array of input events for every pressed key
+    InputEvent bindingsButtonPressed_[numberOfButtons_];
+    //! Array of input events for every released key
+    InputEvent bindingsButtonReleased_[numberOfButtons_];
+
+    //! Pointer to the instance of the singleton
+    static InputManager *singletonRef_s;
+  };
+}
+
+#endif /* _InputManager_H__ */
Index: /code/branches/input/src/orxonox/objects/Fighter.cc
===================================================================
--- /code/branches/input/src/orxonox/objects/Fighter.cc	(revision 972)
+++ /code/branches/input/src/orxonox/objects/Fighter.cc	(revision 973)
@@ -39,5 +39,5 @@
 #include "core/CoreIncludes.h"
 #include "Orxonox.h"
-#include "InputHandler.h"
+#include "core/InputManager.h"
 #include "particle/ParticleInterface.h"
 #include "weapon/AmmunitionDump.h"
@@ -255,7 +255,7 @@
         if (!this->setMouseEventCallback_)
         {
-            if (InputHandler::getSingleton()->getMouse())
+            if (InputManager::getSingleton()->getMouse())
             {
-                InputHandler::getSingleton()->getMouse()->setEventCallback(this);
+                InputManager::getSingleton()->getMouse()->setEventCallback(this);
                 this->setMouseEventCallback_ = true;
             }
@@ -264,6 +264,6 @@
         WorldEntity::tick(dt);
 
-        OIS::Keyboard* mKeyboard = InputHandler::getSingleton()->getKeyboard();
-        OIS::Mouse* mMouse = InputHandler::getSingleton()->getMouse();
+        OIS::Keyboard* mKeyboard = InputManager::getSingleton()->getKeyboard();
+        OIS::Mouse* mMouse = InputManager::getSingleton()->getMouse();
 
         mKeyboard->capture();
Index: /code/branches/input/src/orxonox/objects/SpaceShip.cc
===================================================================
--- /code/branches/input/src/orxonox/objects/SpaceShip.cc	(revision 972)
+++ /code/branches/input/src/orxonox/objects/SpaceShip.cc	(revision 973)
@@ -42,5 +42,5 @@
 #include "core/Debug.h"
 #include "Orxonox.h"
-#include "InputHandler.h"
+#include "core/InputManager.h"
 #include "particle/ParticleInterface.h"
 #include "Projectile.h"
@@ -419,7 +419,7 @@
         if (!this->setMouseEventCallback_)
         {
-            if (InputHandler::getSingleton()->getMouse())
+            if (InputManager::getSingleton()->getMouse())
             {
-                InputHandler::getSingleton()->getMouse()->setEventCallback(this);
+                InputManager::getSingleton()->getMouse()->setEventCallback(this);
                 this->setMouseEventCallback_ = true;
             }
@@ -446,6 +446,6 @@
         }
 
-        OIS::Keyboard* mKeyboard = InputHandler::getSingleton()->getKeyboard();
-        OIS::Mouse* mMouse = InputHandler::getSingleton()->getMouse();
+        OIS::Keyboard* mKeyboard = InputManager::getSingleton()->getKeyboard();
+        OIS::Mouse* mMouse = InputManager::getSingleton()->getMouse();
 
         mKeyboard->capture();
Index: /code/branches/input/visual_studio/base_properties.vsprops
===================================================================
--- /code/branches/input/visual_studio/base_properties.vsprops	(revision 972)
+++ /code/branches/input/visual_studio/base_properties.vsprops	(revision 973)
@@ -9,5 +9,5 @@
 		Name="VCCLCompilerTool"
 		AdditionalIncludeDirectories="&quot;$(RootDir)src&quot;;&quot;$(RootDir)src\orxonox&quot;;&quot;$(DependencyDir)include&quot;"
-		PreprocessorDefinitions="WIN32;__WIN32__;_WIN32;BOOST_ALL_DYN_LINK"
+		PreprocessorDefinitions="WIN32;__WIN32__;_WIN32;BOOST_ALL_DYN_LINK;OIS_DYNAMIC_LIB; ZLIB_WINAPI"
 		WarningLevel="3"
 		DisableSpecificWarnings="4244;4251"
Index: /code/branches/input/visual_studio/core_properties.vsprops
===================================================================
--- /code/branches/input/visual_studio/core_properties.vsprops	(revision 972)
+++ /code/branches/input/visual_studio/core_properties.vsprops	(revision 973)
@@ -12,5 +12,5 @@
 	<Tool
 		Name="VCLinkerTool"
-		AdditionalDependencies="OgreMain$(CS).lib"
+		AdditionalDependencies="OgreMain$(CS).lib OIS$(CSS).lib"
 	/>
 </VisualStudioPropertySheet>
Index: /code/branches/input/visual_studio/network_properties.vsprops
===================================================================
--- /code/branches/input/visual_studio/network_properties.vsprops	(revision 972)
+++ /code/branches/input/visual_studio/network_properties.vsprops	(revision 973)
@@ -8,5 +8,5 @@
 	<Tool
 		Name="VCCLCompilerTool"
-		PreprocessorDefinitions="NETWORK_SHARED_BUILD; ZLIB_WINAPI;WIN32_LEAN_AND_MEAN"
+		PreprocessorDefinitions="NETWORK_SHARED_BUILD;WIN32_LEAN_AND_MEAN"
 	/>
 	<Tool
Index: /code/branches/input/visual_studio/orxonox_properties.vsprops
===================================================================
--- /code/branches/input/visual_studio/orxonox_properties.vsprops	(revision 972)
+++ /code/branches/input/visual_studio/orxonox_properties.vsprops	(revision 973)
@@ -8,5 +8,5 @@
 	<Tool
 		Name="VCCLCompilerTool"
-		PreprocessorDefinitions="ORXONOX_SHARED_BUILD; LOADER_STATIC_BUILD"
+		PreprocessorDefinitions="ORXONOX_SHARED_BUILD"
 		UsePrecompiledHeader="2"
 		PrecompiledHeaderThrough="OrxonoxStableHeaders.h"
Index: /code/branches/input/visual_studio/vc8/core.vcproj
===================================================================
--- /code/branches/input/visual_studio/vc8/core.vcproj	(revision 972)
+++ /code/branches/input/visual_studio/vc8/core.vcproj	(revision 973)
@@ -317,13 +317,5 @@
 			</File>
 			<File
-				RelativePath="..\..\src\orxonox\core\InputHandlerBuffer.cc"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\core\InputHandlerGame.cc"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\core\InputHandlerGUI.cc"
+				RelativePath="..\..\src\orxonox\core\InputManager.cc"
 				>
 			</File>
@@ -439,13 +431,5 @@
 			</File>
 			<File
-				RelativePath="..\..\src\orxonox\core\InputHandlerBuffer.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\core\InputHandlerGame.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\core\InputHandlerGUI.h"
+				RelativePath="..\..\src\orxonox\core\InputManager.h"
 				>
 			</File>
Index: /code/branches/input/visual_studio/vc8/orxonox.vcproj
===================================================================
--- /code/branches/input/visual_studio/vc8/orxonox.vcproj	(revision 972)
+++ /code/branches/input/visual_studio/vc8/orxonox.vcproj	(revision 973)
@@ -285,12 +285,4 @@
 			</File>
 			<File
-				RelativePath="..\..\src\orxonox\InputEventListener.cc"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\InputHandler.cc"
-				>
-			</File>
-			<File
 				RelativePath="..\..\src\orxonox\Main.cc"
 				>
@@ -455,16 +447,4 @@
 			</File>
 			<File
-				RelativePath="..\..\src\orxonox\InputEvent.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\InputEventListener.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\src\orxonox\InputHandler.h"
-				>
-			</File>
-			<File
 				RelativePath="..\..\src\orxonox\Orxonox.h"
 				>
