diff --git a/apps/openmw/mwgui/mainmenu.cpp b/apps/openmw/mwgui/mainmenu.cpp
index 00e4e30a58..5017b88932 100644
--- a/apps/openmw/mwgui/mainmenu.cpp
+++ b/apps/openmw/mwgui/mainmenu.cpp
@@ -210,6 +210,11 @@ namespace MWGui
         }
     }
 
+    bool MainMenu::exit()
+    {
+        return MWBase::Environment::get().getStateManager()->getState() == MWBase::StateManager::State_Running;
+    }
+
     void MainMenu::updateMenu()
     {
         setCoord(0,0, mWidth, mHeight);
diff --git a/apps/openmw/mwgui/mainmenu.hpp b/apps/openmw/mwgui/mainmenu.hpp
index 1beb9ee16d..82553d22e4 100644
--- a/apps/openmw/mwgui/mainmenu.hpp
+++ b/apps/openmw/mwgui/mainmenu.hpp
@@ -38,6 +38,8 @@ namespace MWGui
 
             void onFrame(float dt);
 
+            bool exit();
+
         private:
             const VFS::Manager* mVFS;
 
diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp
index 504bef964f..a81c3a6146 100644
--- a/apps/openmw/mwgui/windowmanagerimp.cpp
+++ b/apps/openmw/mwgui/windowmanagerimp.cpp
@@ -750,8 +750,8 @@ namespace MWGui
             if (!window->exit())
             {
                 // unable to exit window, but give access to main menu
-                if (!MyGUI::InputManager::getInstance().isModalAny())
-                    pushGuiMode (MWGui::GM_MainMenu);
+                if (!MyGUI::InputManager::getInstance().isModalAny() && getMode() != GM_MainMenu)
+                    pushGuiMode (GM_MainMenu);
                 return;
             }
         }
diff --git a/apps/openmw/mwinput/inputmanagerimp.cpp b/apps/openmw/mwinput/inputmanagerimp.cpp
index e6acbbd522..06ebeb0b8b 100644
--- a/apps/openmw/mwinput/inputmanagerimp.cpp
+++ b/apps/openmw/mwinput/inputmanagerimp.cpp
@@ -241,9 +241,7 @@ namespace MWInput
             switch (action)
             {
             case A_GameMenu:
-                if(!(MWBase::Environment::get().getStateManager()->getState() != MWBase::StateManager::State_Running
-                    && MWBase::Environment::get().getWindowManager()->getMode() == MWGui::GM_MainMenu))
-                        toggleMainMenu ();
+                toggleMainMenu ();
                 break;
             case A_Screenshot:
                 screenshot();