Index: code/branches/core4/src/core/CMakeLists.txt
===================================================================
--- code/branches/core4/src/core/CMakeLists.txt	(revision 3244)
+++ code/branches/core4/src/core/CMakeLists.txt	(revision 3245)
@@ -68,5 +68,4 @@
   TOLUA_FILES
     CommandExecutor.h
-    Game.h
     LuaBind.h
   DEFINE_SYMBOL
Index: code/branches/core4/src/core/Game.cc
===================================================================
--- code/branches/core4/src/core/Game.cc	(revision 3244)
+++ code/branches/core4/src/core/Game.cc	(revision 3245)
@@ -149,21 +149,4 @@
         SetConfigValue(statisticsAvgLength_, 1000000)
             .description("Sets the time in microseconds interval at which average fps, etc. gets calculated.");
-        SetConfigValue(levelName_, "presentation_dm.oxw")
-            .description("Sets the preselection of the level in the main menu.");
-    }
-
-    void Game::setLevel(std::string levelName)
-    {
-        ModifyConfigValue(levelName_, set, levelName);
-    }
-
-    std::string Game::getLevel()
-    {
-        std::string levelName;
-        CommandLine::getValue("level", &levelName);
-        if (levelName == "")
-            return levelName_;
-        else
-            return levelName;
     }
 
Index: code/branches/core4/src/core/Game.h
===================================================================
--- code/branches/core4/src/core/Game.h	(revision 3244)
+++ code/branches/core4/src/core/Game.h	(revision 3245)
@@ -64,10 +64,6 @@
         Main class responsible for running the game.
     */
-    class _CoreExport Game
-    // tolua_end
-        : public OrxonoxClass
-    // tolua_begin
+    class _CoreExport Game : public OrxonoxClass
     {
-    //tolua_end
     public:
         Game(int argc, char** argv);
@@ -94,8 +90,5 @@
         template <class T>
         static bool declareGameState(const std::string& className, const std::string& stateName, bool bIgnoreTickTime, bool bConsoleMode);
-        static Game& getInstance() { assert(singletonRef_s); return *singletonRef_s; } //tolua_export
-
-        void setLevel(std::string levelName); //tolua_export
-        std::string getLevel(); //tolua_export
+        static Game& getInstance() { assert(singletonRef_s); return *singletonRef_s; }
 
     private:
@@ -163,9 +156,8 @@
         unsigned int                    statisticsRefreshCycle_;
         unsigned int                    statisticsAvgLength_;
-        std::string                     levelName_;
 
         static std::map<std::string, GameStateInfo> gameStateDeclarations_s;
         static Game* singletonRef_s;        //!< Pointer to the Singleton
-    }; // tolua_export
+    };
 
     template <class T>
@@ -193,5 +185,5 @@
         return true;
     }
-} // tolua_export
+}
 
 #endif /* _Game_H__ */
Index: code/branches/core4/src/orxonox/CMakeLists.txt
===================================================================
--- code/branches/core4/src/orxonox/CMakeLists.txt	(revision 3244)
+++ code/branches/core4/src/orxonox/CMakeLists.txt	(revision 3245)
@@ -42,4 +42,5 @@
   FIND_HEADER_FILES
   TOLUA_FILES
+    LevelManager.h
     gui/GUIManager.h
     objects/pickup/BaseItem.h
Index: code/branches/core4/src/orxonox/LevelManager.cc
===================================================================
--- code/branches/core4/src/orxonox/LevelManager.cc	(revision 3244)
+++ code/branches/core4/src/orxonox/LevelManager.cc	(revision 3245)
@@ -30,4 +30,8 @@
 
 #include <map>
+
+#include "core/CommandLine.h"
+#include "core/ConfigValueIncludes.h"
+#include "core/CoreIncludes.h"
 #include "PlayerManager.h"
 #include "objects/Level.h"
@@ -42,4 +46,13 @@
         assert(singletonRef_s == 0);
         singletonRef_s = this;
+
+        RegisterRootObject(LevelManager);
+        this->setConfigValues();
+
+        // check override
+        if (!CommandLine::getArgument("level")->hasDefaultValue())
+        {
+            ModifyConfigValue(startLevelName_, tset, CommandLine::getValue("mediaPath").getString());
+        }
     }
 
@@ -48,4 +61,10 @@
         assert(singletonRef_s != 0);
         singletonRef_s = 0;
+    }
+
+    void LevelManager::setConfigValues()
+    {
+        SetConfigValue(startLevelName_, "presentation_dm.oxw")
+            .description("Sets the preselection of the level in the main menu.");
     }
 
@@ -93,3 +112,13 @@
         }
     }
+
+    void LevelManager::setStartLevel(const std::string& levelName)
+    {
+        ModifyConfigValue(startLevelName_, set, levelName);
+    }
+
+    const std::string& LevelManager::getStartLevel()
+    {
+        return startLevelName_;
+    }
 }
Index: code/branches/core4/src/orxonox/LevelManager.h
===================================================================
--- code/branches/core4/src/orxonox/LevelManager.h	(revision 3244)
+++ code/branches/core4/src/orxonox/LevelManager.h	(revision 3245)
@@ -34,12 +34,18 @@
 #include <cassert>
 #include <list>
+#include "core/OrxonoxClass.h"
 
+// tolua_begin
 namespace orxonox
 {
     class _OrxonoxExport LevelManager
-    {
+    // tolua_end
+        : public OrxonoxClass
+    { // tolua_export
         public:
             LevelManager();
             virtual ~LevelManager();
+
+            void setConfigValues();
 
             void requestActivity(Level* level);
@@ -47,6 +53,9 @@
             Level* getActiveLevel();
 
+            void setStartLevel(const std::string& levelName); //tolua_export
+            const std::string& getStartLevel(); //tolua_export
+
             static LevelManager* getInstancePtr() { return singletonRef_s; }
-            static LevelManager& getInstance() { assert(singletonRef_s); return *singletonRef_s; }
+            static LevelManager& getInstance() { assert(singletonRef_s); return *singletonRef_s; } // tolua_export
 
         private:
@@ -57,7 +66,10 @@
             std::list<Level*> levels_s;
 
+            // config values
+            std::string startLevelName_;
+
             static LevelManager* singletonRef_s;
-    };
-}
+    }; // tolua_export
+} // tolua_export
 
 #endif /* _LevelManager_H__ */
Index: code/branches/core4/src/orxonox/gamestates/GSLevel.cc
===================================================================
--- code/branches/core4/src/orxonox/gamestates/GSLevel.cc	(revision 3244)
+++ code/branches/core4/src/orxonox/gamestates/GSLevel.cc	(revision 3245)
@@ -71,5 +71,4 @@
         , radar_(0)
         , cameraManager_(0)
-        , levelManager_(0)
     {
         RegisterObject(GSLevel);
@@ -120,7 +119,4 @@
         if (GameMode::isMaster())
         {
-            // create the global LevelManager
-            this->levelManager_ = new LevelManager();
-
             this->loadLevel();
         }
@@ -202,10 +198,4 @@
         }
 
-        if (this->levelManager_)
-        {
-            delete this->levelManager_;
-            this->levelManager_ = 0;
-        }
-
         if (this->playerManager_)
         {
@@ -255,5 +245,5 @@
         CommandLine::getValue("level", &levelName);
         if (levelName == "")
-            startFile_s = new XMLFile(Core::getMediaPathString() + "levels" + '/' + Game::getInstance().getLevel());
+            startFile_s = new XMLFile(Core::getMediaPathString() + "levels" + '/' + LevelManager::getInstance().getStartLevel());
         else
             startFile_s = new XMLFile(Core::getMediaPathString() + "levels" + '/' + levelName);
Index: code/branches/core4/src/orxonox/gamestates/GSLevel.h
===================================================================
--- code/branches/core4/src/orxonox/gamestates/GSLevel.h	(revision 3244)
+++ code/branches/core4/src/orxonox/gamestates/GSLevel.h	(revision 3245)
@@ -68,5 +68,4 @@
         Radar*                radar_;                   //!< represents the Radar (not the HUD part)
         CameraManager*        cameraManager_;           //!< camera manager for this level
-        LevelManager*         levelManager_;            //!< global level manager
         PlayerManager*        playerManager_;           //!< player manager for this level
         QuestManager*         questManager_;
Index: code/branches/core4/src/orxonox/gamestates/GSMainMenu.cc
===================================================================
--- code/branches/core4/src/orxonox/gamestates/GSMainMenu.cc	(revision 3244)
+++ code/branches/core4/src/orxonox/gamestates/GSMainMenu.cc	(revision 3245)
@@ -67,5 +67,5 @@
 
         // show main menu
-        GUIManager::getInstance().showGUI("mainmenu_2");
+        GUIManager::getInstance().showGUI("mainmenu_3");
         GUIManager::getInstance().setCamera(this->camera_);
         GraphicsManager::getInstance().setCamera(this->camera_);
Index: code/branches/core4/src/orxonox/gamestates/GSRoot.cc
===================================================================
--- code/branches/core4/src/orxonox/gamestates/GSRoot.cc	(revision 3244)
+++ code/branches/core4/src/orxonox/gamestates/GSRoot.cc	(revision 3245)
@@ -37,4 +37,5 @@
 #include "interfaces/TimeFactorListener.h"
 #include "interfaces/Tickable.h"
+#include "LevelManager.h"
 
 namespace orxonox
@@ -83,4 +84,7 @@
         }
 
+        // create the global LevelManager
+        this->levelManager_ = new LevelManager();
+
         // Load level directly?
         bool loadLevel = false;
@@ -129,4 +133,6 @@
         }
 */
+
+        delete this->levelManager_;
     }
 
Index: code/branches/core4/src/orxonox/gamestates/GSRoot.h
===================================================================
--- code/branches/core4/src/orxonox/gamestates/GSRoot.h	(revision 3244)
+++ code/branches/core4/src/orxonox/gamestates/GSRoot.h	(revision 3245)
@@ -52,7 +52,9 @@
 
     private:
-        float                 timeFactor_;       //!< A factor that sets the gamespeed. 1 is normal.
+        float                 timeFactor_;              //!< A factor that sets the gamespeed. 1 is normal.
         bool                  bPaused_;
         float                 timeFactorPauseBackup_;
+
+        LevelManager*         levelManager_;            //!< global level manager
 
         // console commands
