Index: code/branches/gui/src/core/input/InputManager.cc
===================================================================
--- code/branches/gui/src/core/input/InputManager.cc	(revision 1656)
+++ code/branches/gui/src/core/input/InputManager.cc	(revision 1659)
@@ -59,7 +59,8 @@
 namespace orxonox
 {
-    SetConsoleCommandShortcut(InputManager, keyBind);
-    SetConsoleCommandShortcut(InputManager, storeKeyStroke);
-    SetConsoleCommandShortcut(InputManager, calibrate);
+    SetConsoleCommand(InputManager, keyBind, true);
+    SetConsoleCommand(InputManager, storeKeyStroke, true);
+    SetConsoleCommand(InputManager, calibrate, true);
+    SetConsoleCommand(InputManager, reload, false);
 
     std::string InputManager::bindingCommmandString_s = "";
@@ -132,7 +133,8 @@
     void InputManager::initialise(size_t windowHnd, int windowWidth, int windowHeight, bool joyStickSupport)
     {
-        if (internalState_ == Uninitialised)
-        {
-            CCOUT(3) << "Initialising Input System..." << std::endl;
+        CCOUT(3) << "Initialising Input System..." << std::endl;
+
+        if (!(internalState_ & OISReady))
+        {
             CCOUT(4) << "Initialising OIS components..." << std::endl;
 
@@ -169,7 +171,19 @@
             _clearBuffers();
 
+            // load joy stick calibration
+            setConfigValues();
+
+            internalState_ |= OISReady;
+
             CCOUT(ORX_DEBUG) << "Initialising OIS components done." << std::endl;
-
-            setConfigValues();
+        }
+        else
+        {
+            CCOUT(2) << "Warning: OIS compoments already initialised, skipping" << std::endl;
+        }
+
+        if (!(internalState_ & InternalsReady))
+        {
+            CCOUT(4) << "Initialising InputStates components..." << std::endl;
 
             stateEmpty_ = createInputState<SimpleInputState>("empty", -1);
@@ -188,14 +202,12 @@
             stateCalibrator_->setKeyHandler(buffer);
 
-            _updateActiveStates();
-
-            internalState_ = Ready;
-
-            CCOUT(3) << "Initialising complete." << std::endl;
-        }
-        else
-        {
-            CCOUT(2) << "Warning: OIS compoments already initialised, skipping" << std::endl;
-        }
+            internalState_ |= InternalsReady;
+
+            CCOUT(4) << "Initialising InputStates complete." << std::endl;
+        }
+
+        _updateActiveStates();
+
+        CCOUT(3) << "Initialising complete." << std::endl;
     }
 
@@ -486,4 +498,5 @@
 
             joySticks_.clear();
+            _redimensionLists();
         }
         CCOUT(4) << "Joy sticks destroyed." << std::endl;
@@ -543,8 +556,8 @@
             internalState_ |= ReloadRequest;
             // Misuse of internalState_: We can easily store the joyStickSupport bool.
-            // use Uninitialised as 0 value in order to use the overloaded |= operator
+            // use Uninitialised as 0 value in order to make use of the overloaded |= operator
             internalState_ |= joyStickSupport ? JoyStickSupport : Uninitialised;
         }
-        else if (internalState_ == Ready)
+        else if (internalState_ & OISReady)
         {
             _reload(joyStickSupport);
@@ -571,5 +584,6 @@
             int mouseHeight = mouse_->getMouseState().height;
 
-            internalState_ = Uninitialised;
+            internalState_ &= ~OISReady;
+
             // destroy the devices
             _destroyKeyboard();
@@ -674,5 +688,5 @@
         }
 
-        internalState_ &= ~Ready;
+        internalState_ &= ~Ticking;
     }
 
@@ -1257,3 +1271,12 @@
         getInstance().requestEnterState("calibrator");
     }
+
+    /**
+    @brief
+        Reloads the input system
+    */
+    void InputManager::reload(bool joyStickSupport)
+    {
+        getInstance().reloadInputSystem(joyStickSupport);
+    }
 }
Index: code/branches/gui/src/core/input/InputManager.h
===================================================================
--- code/branches/gui/src/core/input/InputManager.h	(revision 1656)
+++ code/branches/gui/src/core/input/InputManager.h	(revision 1659)
@@ -92,10 +92,11 @@
         enum InputManagerState
         {
-            Uninitialised    = 0,
-            Ready            = 1,
-            Ticking          = 2,
-            Calibrating      = 4,
-            ReloadRequest    = 8,
-            JoyStickSupport  = 16 // used with ReloadRequest to store a bool
+            Uninitialised    = 0x00,
+            OISReady         = 0x01,
+            InternalsReady   = 0x02,
+            Ticking          = 0x04,
+            Calibrating      = 0x08,
+            ReloadRequest    = 0x10,
+            JoyStickSupport  = 0x20 // used with ReloadRequest to store a bool
         };
 
@@ -139,4 +140,5 @@
         static void keyBind(const std::string& command);
         static void calibrate();
+        static void reload(bool joyStickSupport = true);
 
     private: // functions
Index: code/branches/gui/src/core/input/SimpleInputState.cc
===================================================================
--- code/branches/gui/src/core/input/SimpleInputState.cc	(revision 1656)
+++ code/branches/gui/src/core/input/SimpleInputState.cc	(revision 1659)
@@ -55,5 +55,5 @@
         joyStickHandler_.resize(n);
 
-        if (oldSize > n)
+        if (n > oldSize)
         {
             // we have to add the handler in joyStickHandlerAll_ to the joyStickHandler_[>n]
