Index: code/branches/gui/src/core/Clock.h
===================================================================
--- code/branches/gui/src/core/Clock.h	(revision 2800)
+++ code/branches/gui/src/core/Clock.h	(revision 2805)
@@ -45,9 +45,9 @@
     class _CoreExport Clock
     {
-        friend class RootGameState;
-
     public:
         Clock();
         ~Clock();
+
+        void capture();
 
         unsigned long long getMicroseconds()   const { return tickTime_; }
@@ -63,5 +63,4 @@
     private:
         Clock(const Clock& instance);
-        void capture();
 
         Ogre::Timer*       timer_;
Index: code/branches/gui/src/core/GameState.h
===================================================================
--- code/branches/gui/src/core/GameState.h	(revision 2800)
+++ code/branches/gui/src/core/GameState.h	(revision 2805)
@@ -65,4 +65,6 @@
         template <class ParentType>
         friend class GameState;
+        // Hack
+        friend class Game;
 
     public:
Index: code/branches/gui/src/core/RootGameState.cc
===================================================================
--- code/branches/gui/src/core/RootGameState.cc	(revision 2800)
+++ code/branches/gui/src/core/RootGameState.cc	(revision 2805)
@@ -32,10 +32,7 @@
 #include "util/Exception.h"
 #include "Clock.h"
-#include "CommandLine.h"
 
 namespace orxonox
 {
-    SetCommandLineArgument(state, "gui").shortcut("s");
-
     RootGameState::RootGameState(const std::string& name)
         : GameState<GameStateBase>(name)
@@ -119,60 +116,3 @@
         this->stateRequest_ = name;
     }
-
-    /**
-    @brief
-        Main loop of the orxonox game.
-        Starts the game. The little 'while' denotes the main loop.
-        Whenever the root state is selected, the game ends.
-    @param name
-        State to start with (usually main menu or specified by command line)
-    @note
-        We use the Ogre::Timer to measure time since it uses the most precise
-        method an a platform (however the windows timer lacks time when under
-        heavy kernel load!).
-    */
-    void RootGameState::start()
-    {
-        // Don't catch errors when having a debugger in msvc
-#if !defined(ORXONOX_COMPILER_MSVC) || defined(NDEBUG)
-        try
-        {
-#endif
-            // start global orxonox time
-            Clock clock;
-
-            this->activate();
-
-            // get initial state from command line
-            gotoState(CommandLine::getValue("state"));
-
-            while (this->activeChild_)
-            {
-                clock.capture();
-
-                this->tick(clock);
-
-                if (this->stateRequest_ != "")
-                    gotoState(stateRequest_);
-            }
-
-            this->deactivate();
-#if !defined(ORXONOX_COMPILER_MSVC) || defined(NDEBUG)
-        }
-        // Note: These are all unhandled exceptions that should not have made its way here!
-        // almost complete game catch block to display the messages appropriately.
-        catch (std::exception& ex)
-        {
-            COUT(0) << ex.what() << std::endl;
-            COUT(0) << "Program aborted." << std::endl;
-            abort();
-        }
-        // anything that doesn't inherit from std::exception
-        catch (...)
-        {
-            COUT(0) << "An unidentifiable exception has occured. Program aborted." << std::endl;
-            abort();
-        }
-#endif
-    }
 }
Index: code/branches/gui/src/core/RootGameState.h
===================================================================
--- code/branches/gui/src/core/RootGameState.h	(revision 2800)
+++ code/branches/gui/src/core/RootGameState.h	(revision 2805)
@@ -37,4 +37,7 @@
     class _CoreExport RootGameState : public GameState<GameStateBase>
     {
+        // Hack!
+        friend class Game;
+
     public:
         RootGameState(const std::string& name);
@@ -42,5 +45,4 @@
 
         void requestState(const std::string& name);
-        void start();
 
     private:
