Index: code/branches/objecthierarchy2/src/orxonox/gamestates/GSGraphics.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/gamestates/GSGraphics.cc	(revision 2212)
+++ code/branches/objecthierarchy2/src/orxonox/gamestates/GSGraphics.cc	(revision 2344)
@@ -164,5 +164,6 @@
         FunctorMember<GSGraphics>* functor1 = createFunctor(&GSGraphics::printScreen);
         functor1->setObject(this);
-        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(functor1, "printScreen"));
+        ccPrintScreen_ = createConsoleCommand(functor1, "printScreen");
+        CommandExecutor::addConsoleCommandShortcut(ccPrintScreen_);
     }
 
@@ -170,4 +171,6 @@
     {
         using namespace Ogre;
+
+        delete this->ccPrintScreen_;
 
         // remove our WindowEventListener first to avoid bad calls after the window has been destroyed
Index: code/branches/objecthierarchy2/src/orxonox/gamestates/GSGraphics.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/gamestates/GSGraphics.h	(revision 2212)
+++ code/branches/objecthierarchy2/src/orxonox/gamestates/GSGraphics.h	(revision 2344)
@@ -112,4 +112,7 @@
         unsigned int          detailLevelParticle_;      //!< Detail level of particle effects (0: off, 1: low, 2: normal, 3: high)
         std::string           defaultMasterKeybindings_; //!< Filename of default master keybindings.
+
+        // console commands
+        ConsoleCommand*       ccPrintScreen_;
     };
 }
Index: code/branches/objecthierarchy2/src/orxonox/gamestates/GSLevel.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/gamestates/GSLevel.cc	(revision 2212)
+++ code/branches/objecthierarchy2/src/orxonox/gamestates/GSLevel.cc	(revision 2344)
@@ -47,4 +47,5 @@
 #include "CameraManager.h"
 #include "LevelManager.h"
+#include "PlayerManager.h"
 #include "Settings.h"
 
@@ -99,4 +100,5 @@
             // create the global LevelManager
             this->levelManager_ = new LevelManager();
+            this->playerManager_ = new PlayerManager();
 
             // reset game speed to normal
@@ -114,8 +116,10 @@
             FunctorMember<GSLevel>* functor1 = createFunctor(&GSLevel::keybind);
             functor1->setObject(this);
-            CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(functor1, "keybind"));
+            ccKeybind_ = createConsoleCommand(functor1, "keybind");
+            CommandExecutor::addConsoleCommandShortcut(ccKeybind_);
             FunctorMember<GSLevel>* functor2 = createFunctor(&GSLevel::tkeybind);
             functor2->setObject(this);
-            CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(functor2, "tkeybind"));
+            ccTkeybind_ = createConsoleCommand(functor2, "tkeybind");
+            CommandExecutor::addConsoleCommandShortcut(ccTkeybind_);
             // set our console command as callback for the key detector
             InputManager::getInstance().setKeyDetectorCallback(std::string("keybind ") + keyDetectorCallbackCode_);
@@ -130,5 +134,6 @@
             FunctorMember<GSLevel>* functor = createFunctor(&GSLevel::setTimeFactor);
             functor->setObject(this);
-            CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(functor, "setTimeFactor")).accessLevel(AccessLevel::Offline).defaultValue(0, 1.0);;
+            ccSetTimeFactor_ = createConsoleCommand(functor, "setTimeFactor");
+            CommandExecutor::addConsoleCommandShortcut(ccSetTimeFactor_).accessLevel(AccessLevel::Offline).defaultValue(0, 1.0);;
         }
     }
@@ -136,4 +141,9 @@
     void GSLevel::leave()
     {
+        // destroy console commands
+        delete this->ccKeybind_;
+        delete this->ccSetTimeFactor_;
+        delete this->ccTkeybind_;
+
         // this call will delete every BaseObject!
         // But currently this will call methods of objects that exist no more
@@ -156,4 +166,7 @@
         if (this->levelManager_)
             delete this->levelManager_;
+
+        if (this->playerManager_)
+            delete this->playerManager_;
 
         if (Core::showsGraphics())
Index: code/branches/objecthierarchy2/src/orxonox/gamestates/GSLevel.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/gamestates/GSLevel.h	(revision 2212)
+++ code/branches/objecthierarchy2/src/orxonox/gamestates/GSLevel.h	(revision 2344)
@@ -70,4 +70,5 @@
         CameraManager*        cameraManager_;
         LevelManager*         levelManager_;
+        PlayerManager*        playerManager_;
 
         //##### ConfigValues #####
@@ -75,4 +76,9 @@
         //! Filename of default keybindings.
         std::string           defaultKeybindings_;
+
+        // console commands
+        ConsoleCommand*       ccKeybind_;
+        ConsoleCommand*       ccTkeybind_;
+        ConsoleCommand*       ccSetTimeFactor_;
 
     private:
Index: code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.cc	(revision 2212)
+++ code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.cc	(revision 2344)
@@ -40,4 +40,5 @@
 #include "core/TclBind.h"
 #include "core/TclThreadManager.h"
+#include "core/LuaBind.h"
 #include "tools/Timer.h"
 #include "objects/Tickable.h"
@@ -87,4 +88,7 @@
         // creates the class hierarchy for all classes with factories
         Factory::createClassHierarchy();
+
+        // Create the lua interface
+        this->luaBind_ = new LuaBind();
 
         // instantiate Settings class
@@ -117,15 +121,19 @@
         FunctorMember<GSRoot>* functor1 = createFunctor(&GSRoot::exitGame);
         functor1->setObject(this);
-        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(functor1, "exit"));
+        ccExit_ = createConsoleCommand(functor1, "exit");
+        CommandExecutor::addConsoleCommandShortcut(ccExit_);
 
         // add console commands
         FunctorMember01<GameStateBase, const std::string&>* functor2 = createFunctor(&GameStateBase::requestState);
         functor2->setObject(this);
-        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(functor2, "selectGameState"));
+        ccSelectGameState_ = createConsoleCommand(functor2, "selectGameState");
+        CommandExecutor::addConsoleCommandShortcut(ccSelectGameState_);
     }
 
     void GSRoot::leave()
     {
-        // TODO: remove and destroy console commands
+        // destroy console commands
+        delete this->ccExit_;
+        delete this->ccSelectGameState_;
 
         delete this->shell_;
@@ -133,6 +141,6 @@
         delete this->tclBind_;
 
-        delete settings_;
-
+        delete this->settings_;
+        delete this->luaBind_;
     }
 
Index: code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.h	(revision 2212)
+++ code/branches/objecthierarchy2/src/orxonox/gamestates/GSRoot.h	(revision 2344)
@@ -59,4 +59,9 @@
         TclThreadManager*     tclThreadManager_;
         Shell*                shell_;
+        LuaBind*              luaBind_;
+
+        // console commands
+        ConsoleCommand*       ccExit_;
+        ConsoleCommand*       ccSelectGameState_;
     };
 }
