Index: code/branches/menu/src/libraries/core/GUIManager.cc
===================================================================
--- code/branches/menu/src/libraries/core/GUIManager.cc	(revision 6047)
+++ code/branches/menu/src/libraries/core/GUIManager.cc	(revision 6048)
@@ -108,4 +108,5 @@
         , resourceProvider_(0)
         , camera_(NULL)
+        , bShowIngameGUI_(false)
     {
         using namespace CEGUI;
@@ -251,9 +252,25 @@
         }
     }
+
+    void GUIManager::toggleIngameGUI()
+    {
+        if ( this->bShowIngameGUI_==false )
+        {
+            GUIManager::showGUI("InGameMenu");
+            this->bShowIngameGUI_ = true;
+        }
+        else
+        {
+            GUIManager::hideGUI("InGameMenu");
+            this->bShowIngameGUI_ = false;
+        }
+    }
     
-    void GUIManager::setToggleMode(const bool& mode)
-    {
-        this->bToggleMode_ = mode;
-        this->executeCode("setToggleMode(" + multi_cast<std::string>(mode) + ")");
+    void GUIManager::keyESC()
+    {
+        if( this->showingGUIs_.size() == 0 )
+            this->showGUI("InGameMenu");
+        else
+            this->executeCode("keyESC()");
     }
     
Index: code/branches/menu/src/libraries/core/GUIManager.h
===================================================================
--- code/branches/menu/src/libraries/core/GUIManager.h	(revision 6047)
+++ code/branches/menu/src/libraries/core/GUIManager.h	(revision 6048)
@@ -71,5 +71,6 @@
         void showGUIExtra(const std::string& name, const std::string& ptr, bool hidePrevious=false, bool showCursor=true);
         static void hideGUI(const std::string& name);
-        void setToggleMode(const bool& mode);
+        void toggleIngameGUI();
+        void keyESC();
         void setBackground(const std::string& name);
 
@@ -113,5 +114,5 @@
 
         static GUIManager*                   singletonPtr_s;    //!< Singleton reference to GUIManager
-        bool                                 bToggleMode_;
+        bool                                 bShowIngameGUI_;
 
     };
Index: code/branches/menu/src/libraries/core/Game.cc
===================================================================
--- code/branches/menu/src/libraries/core/Game.cc	(revision 6047)
+++ code/branches/menu/src/libraries/core/Game.cc	(revision 6048)
@@ -51,4 +51,5 @@
 #include "GameMode.h"
 #include "GameState.h"
+#include "GUIManager.h"
 
 namespace orxonox
@@ -57,4 +58,7 @@
         { Game::getInstance().stop(); }
     SetConsoleCommandShortcutExternAlias(stop_game, "exit");
+    static void key_esc()
+        { Game::getInstance().keyESC(); }
+    SetConsoleCommandShortcutExternAlias(key_esc, "keyESC");
     static void printFPS()
         { COUT(0) << Game::getInstance().getAvgFPS() << std::endl; }
@@ -354,4 +358,12 @@
     }
 
+    void Game::keyESC()
+    {
+        if( this->getState("mainMenu") && this->getState("mainMenu")->getActivity().active==true )
+            this->stop();
+        else
+            GUIManager::getInstance().keyESC();
+    }
+
     void Game::stop()
     {
Index: code/branches/menu/src/libraries/core/Game.h
===================================================================
--- code/branches/menu/src/libraries/core/Game.h	(revision 6047)
+++ code/branches/menu/src/libraries/core/Game.h	(revision 6048)
@@ -98,4 +98,5 @@
         void run();
         void stop();
+        void keyESC();
 
         static Game& getInstance(){ return Singleton<Game>::getInstance(); } // tolua_export
Index: code/branches/menu/src/orxonox/gamestates/GSLevel.cc
===================================================================
--- code/branches/menu/src/orxonox/gamestates/GSLevel.cc	(revision 6047)
+++ code/branches/menu/src/orxonox/gamestates/GSLevel.cc	(revision 6048)
@@ -56,4 +56,5 @@
         , guiKeysOnlyInputState_(0)
         , startFile_(0)
+        , bShowIngameGUI_(false)
     {
     }
@@ -78,6 +79,4 @@
             guiKeysOnlyInputState_ = InputManager::getInstance().createInputState("guiKeysOnly");
             guiKeysOnlyInputState_->setKeyHandler(GUIManager::getInstancePtr());
-
-            CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&GSLevel::showIngameGUI, this), "showIngameGUI"));
         }
 
@@ -94,16 +93,4 @@
             // connect the HumanPlayer to the game
             PlayerManager::getInstance().clientConnected(0);
-        }
-    }
-
-    void GSLevel::showIngameGUI(bool show)
-    {
-        if (show)
-        {
-            GUIManager::showGUI("inGameTest");
-        }
-        else
-        {
-            GUIManager::hideGUI("inGameTest");
         }
     }
Index: code/branches/menu/src/orxonox/gamestates/GSLevel.h
===================================================================
--- code/branches/menu/src/orxonox/gamestates/GSLevel.h	(revision 6047)
+++ code/branches/menu/src/orxonox/gamestates/GSLevel.h	(revision 6048)
@@ -52,5 +52,4 @@
         void loadLevel();
         void unloadLevel();
-        void showIngameGUI(bool show);
 
         InputState*              gameInputState_;          //!< input state for normal ingame playing
@@ -60,4 +59,5 @@
         XMLFile* startFile_;
         std::set<BaseObject*> staticObjects_;
+        bool bShowIngameGUI_;
     };
 }
