Index: code/trunk/src/orxonox/gamestates/GSLevel.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSLevel.cc	(revision 7879)
+++ code/trunk/src/orxonox/gamestates/GSLevel.cc	(revision 8079)
@@ -46,4 +46,5 @@
 #include "LevelManager.h"
 #include "PlayerManager.h"
+#include "GSRoot.h"
 
 namespace orxonox
@@ -55,5 +56,5 @@
 
     SetConsoleCommand(__CC_startMainMenu_name, &GSLevel::startMainMenu).deactivate();
-    SetConsoleCommand(__CC_changeGame_name, &GSLevel::changeGame).defaultValues(BLANKSTRING).deactivate();
+    SetConsoleCommand(__CC_changeGame_name, &GSLevel::changeGame).defaultValues("").deactivate();
 
     GSLevel::GSLevel(const GameStateInfo& info)
@@ -156,7 +157,9 @@
         COUT(0) << "Loading level..." << std::endl;
         startFile_ = new XMLFile(LevelManager::getInstance().getDefaultLevel());
-        Loader::open(startFile_);
+        bool loaded = Loader::open(startFile_);
 
         Core::getInstance().updateLastLevelTimestamp();
+        if(!loaded)
+            GSRoot::delayedStartMainMenu();
     }
 
@@ -202,5 +205,5 @@
     /*static*/ void GSLevel::changeGame(const std::string& level)
     {
-        if(level != BLANKSTRING)
+        if(level != "")
             LevelManager::getInstance().setDefaultLevel(level);
 
Index: code/trunk/src/orxonox/gamestates/GSMainMenu.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSMainMenu.cc	(revision 7879)
+++ code/trunk/src/orxonox/gamestates/GSMainMenu.cc	(revision 8079)
@@ -57,8 +57,8 @@
     static const std::string __CC_setMainMenuSoundPath_name = "setMMSoundPath";
 
-    SetConsoleCommand(__CC_startStandalone_name,      &GSMainMenu::startStandalone).defaultValues(BLANKSTRING).deactivate();
-    SetConsoleCommand(__CC_startServer_name,          &GSMainMenu::startServer    ).defaultValues(BLANKSTRING).deactivate();
-    SetConsoleCommand(__CC_startClient_name,          &GSMainMenu::startClient    ).defaultValues(BLANKSTRING).deactivate();
-    SetConsoleCommand(__CC_startDedicated_name,       &GSMainMenu::startDedicated ).defaultValues(BLANKSTRING).deactivate();
+    SetConsoleCommand(__CC_startStandalone_name,      &GSMainMenu::startStandalone).defaultValues("").deactivate();
+    SetConsoleCommand(__CC_startServer_name,          &GSMainMenu::startServer    ).defaultValues("").deactivate();
+    SetConsoleCommand(__CC_startClient_name,          &GSMainMenu::startClient    ).defaultValues("").deactivate();
+    SetConsoleCommand(__CC_startDedicated_name,       &GSMainMenu::startDedicated ).defaultValues("").deactivate();
     SetConsoleCommand(__CC_setMainMenuSoundPath_name, &GSMainMenu::setMainMenuSoundPath).hide();
 
@@ -96,8 +96,7 @@
     {
         // show main menu
+        GraphicsManager::getInstance().setCamera(this->camera_);
         GUIManager::getInstance().showGUI("MainMenu", true);
-        GUIManager::getInstance().setCamera(this->camera_);
         GUIManager::getInstance().setBackgroundImage("MainMenuBackground", "Background");
-        GraphicsManager::getInstance().setCamera(this->camera_);
 
         InputManager::getInstance().enterState("MainMenuHackery");
@@ -129,8 +128,7 @@
         InputManager::getInstance().leaveState("MainMenuHackery");
 
-        GUIManager::getInstance().setCamera(0);
+        GraphicsManager::getInstance().setCamera(0);
         GUIManager::getInstance().setBackgroundImage("");
         GUIManager::hideGUI("MainMenu");
-        GraphicsManager::getInstance().setCamera(0);
 
         ModifyConsoleCommand(__CC_startStandalone_name).deactivate();
@@ -178,5 +176,5 @@
     void GSMainMenu::startStandalone(const std::string& level)
     {
-        if(level != BLANKSTRING)
+        if(level != "")
             LevelManager::getInstance().setDefaultLevel(level);
 
@@ -194,5 +192,5 @@
     void GSMainMenu::startServer(const std::string& level)
     {
-        if(level != BLANKSTRING)
+        if(level != "")
             LevelManager::getInstance().setDefaultLevel(level);
 
@@ -210,5 +208,5 @@
     void GSMainMenu::startClient(const std::string& destination)
     {
-        if(destination != BLANKSTRING)
+        if(destination != "")
             Client::getInstance()->setDestination(destination, NETWORK_PORT);
 
@@ -226,5 +224,5 @@
     void GSMainMenu::startDedicated(const std::string& level)
     {
-        if(level != BLANKSTRING)
+        if(level != "")
             LevelManager::getInstance().setDefaultLevel(level);
 
Index: code/trunk/src/orxonox/gamestates/GSMainMenu.h
===================================================================
--- code/trunk/src/orxonox/gamestates/GSMainMenu.h	(revision 7879)
+++ code/trunk/src/orxonox/gamestates/GSMainMenu.h	(revision 8079)
@@ -53,8 +53,8 @@
         void setMainMenuSoundPath(const std::string& path);
 
-        static void startStandalone(const std::string& level = BLANKSTRING); //!< Start a level in standalone mode.
-        static void startServer(const std::string& level = BLANKSTRING); //!< Start a level in server mode.
-        static void startClient(const std::string& destination = BLANKSTRING); //!< Connect to a game as client.
-        static void startDedicated(const std::string& level = BLANKSTRING); //!< Start a level in dedicated mode.
+        static void startStandalone(const std::string& level = ""); //!< Start a level in standalone mode.
+        static void startServer(const std::string& level = ""); //!< Start a level in server mode.
+        static void startClient(const std::string& destination = ""); //!< Connect to a game as client.
+        static void startDedicated(const std::string& level = ""); //!< Start a level in dedicated mode.
         static void startIOConsole();
 
Index: code/trunk/src/orxonox/gamestates/GSRoot.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSRoot.cc	(revision 7879)
+++ code/trunk/src/orxonox/gamestates/GSRoot.cc	(revision 8079)
@@ -38,4 +38,6 @@
 #include "tools/interfaces/Tickable.h"
 
+#include "GSLevel.h"
+
 namespace orxonox
 {
@@ -43,8 +45,12 @@
 
     static const std::string __CC_setTimeFactor_name = "setTimeFactor";
+    static const std::string __CC_setPause_name = "setPause";
     static const std::string __CC_pause_name = "pause";
+
+    /*static*/ bool GSRoot::startMainMenu_s = false;
 
     SetConsoleCommand("printObjects", &GSRoot::printObjects).hide();
     SetConsoleCommand(__CC_setTimeFactor_name, &GSRoot::setTimeFactor).accessLevel(AccessLevel::Master).defaultValues(1.0);
+    SetConsoleCommand(__CC_setPause_name,      &GSRoot::setPause     ).accessLevel(AccessLevel::Master).hide();
     SetConsoleCommand(__CC_pause_name,         &GSRoot::pause        ).accessLevel(AccessLevel::Master);
 
@@ -83,4 +89,5 @@
 
         ModifyConsoleCommand(__CC_setTimeFactor_name).setObject(this);
+        ModifyConsoleCommand(__CC_setPause_name).setObject(this);
         ModifyConsoleCommand(__CC_pause_name).setObject(this);
     }
@@ -89,4 +96,5 @@
     {
         ModifyConsoleCommand(__CC_setTimeFactor_name).setObject(0);
+        ModifyConsoleCommand(__CC_setPause_name).setObject(0);
         ModifyConsoleCommand(__CC_pause_name).setObject(0);
     }
@@ -94,4 +102,10 @@
     void GSRoot::update(const Clock& time)
     {
+        if(startMainMenu_s)
+        {
+            delayedStartMainMenu();
+            startMainMenu_s = false;
+        }
+
         for (ObjectList<Timer>::iterator it = ObjectList<Timer>::begin(); it; )
         {
@@ -157,4 +171,13 @@
     }
 
+    void GSRoot::setPause(bool pause)
+    {
+        if (GameMode::isMaster())
+        {
+            if (pause != this->bPaused_)
+                this->pause();
+        }
+    }
+
     void GSRoot::changedTimeFactor(float factor_new, float factor_old)
     {
@@ -162,3 +185,12 @@
             callStaticNetworkFunction(&TimeFactorListener::setTimeFactor, CLIENTID_UNKNOWN, factor_new);
     }
+
+    /*static*/ void GSRoot::delayedStartMainMenu(void)
+    {
+        if(!startMainMenu_s)
+            startMainMenu_s = true;
+        else
+            GSLevel::startMainMenu();
+    }
+
 }
Index: code/trunk/src/orxonox/gamestates/GSRoot.h
===================================================================
--- code/trunk/src/orxonox/gamestates/GSRoot.h	(revision 7879)
+++ code/trunk/src/orxonox/gamestates/GSRoot.h	(revision 8079)
@@ -51,5 +51,8 @@
         // when taking the function address.
         void setTimeFactor(float factor);
+        void setPause(bool pause);
         void pause();
+
+        static void delayedStartMainMenu(void);
 
     protected:
@@ -59,4 +62,5 @@
         bool                  bPaused_;
         float                 timeFactorPauseBackup_;
+        static bool           startMainMenu_s;
     };
 }
