Index: code/branches/core7/src/orxonox/Level.cc
===================================================================
--- code/branches/core7/src/orxonox/Level.cc	(revision 10573)
+++ code/branches/core7/src/orxonox/Level.cc	(revision 10575)
@@ -122,6 +122,8 @@
 
         Gametype* rootgametype = orxonox_cast<Gametype*>(identifier->fabricate(this));
+
         rootgametype->setLevel(NULL); // avoid circular references
         this->setGametype(rootgametype);
+        rootgametype->init(); // call init() AFTER the gametype was set
 
         if (LevelManager::exists())
Index: code/branches/core7/src/orxonox/gametypes/Gametype.cc
===================================================================
--- code/branches/core7/src/orxonox/gametypes/Gametype.cc	(revision 10573)
+++ code/branches/core7/src/orxonox/gametypes/Gametype.cc	(revision 10575)
@@ -64,7 +64,7 @@
 
         this->gtinfo_ = new GametypeInfo(context);
-        this->gtinfo_->setGametype(this);
 
         this->defaultControllableEntity_ = Class(Spectator);
+        this->scoreboard_ = 0;
 
         this->bAutoStart_ = false;
@@ -81,27 +81,31 @@
         this->setConfigValues();
 
+        ModifyConsoleCommand(__CC_addBots_name).setObject(this);
+        ModifyConsoleCommand(__CC_killBots_name).setObject(this);
+    }
+
+    Gametype::~Gametype()
+    {
+        if (this->isInitialized())
+        {
+            if (this->gtinfo_)
+                this->gtinfo_->destroy();
+
+            ModifyConsoleCommand(__CC_addBots_name).setObject(NULL);
+            ModifyConsoleCommand(__CC_killBots_name).setObject(NULL);
+        }
+    }
+
+    /**
+     * @brief Initializes sub-objects of the Gametype. This must be called after the constructor.
+     * At this point, the context is expected to have the current gametype. This allows to pass the current gametype to the sub-objects via constructor.
+     */
+    void Gametype::init()
+    {
         // load the corresponding score board
         if (GameMode::showsGraphics() && !this->scoreboardTemplate_.empty())
         {
-            this->scoreboard_ = new OverlayGroup(context);
+            this->scoreboard_ = new OverlayGroup(this->getContext());
             this->scoreboard_->addTemplate(this->scoreboardTemplate_);
-            this->scoreboard_->setGametype(this);
-        }
-        else
-            this->scoreboard_ = 0;
-
-        ModifyConsoleCommand(__CC_addBots_name).setObject(this);
-        ModifyConsoleCommand(__CC_killBots_name).setObject(this);
-    }
-
-    Gametype::~Gametype()
-    {
-        if (this->isInitialized())
-        {
-            if (this->gtinfo_)
-                this->gtinfo_->destroy();
-
-            ModifyConsoleCommand(__CC_addBots_name).setObject(NULL);
-            ModifyConsoleCommand(__CC_killBots_name).setObject(NULL);
         }
     }
Index: code/branches/core7/src/orxonox/gametypes/Gametype.h
===================================================================
--- code/branches/core7/src/orxonox/gametypes/Gametype.h	(revision 10573)
+++ code/branches/core7/src/orxonox/gametypes/Gametype.h	(revision 10575)
@@ -72,4 +72,6 @@
             virtual ~Gametype();
 
+            virtual void init();
+
             void setConfigValues();
 
Index: code/branches/core7/src/orxonox/overlays/OverlayGroup.cc
===================================================================
--- code/branches/core7/src/orxonox/overlays/OverlayGroup.cc	(revision 10573)
+++ code/branches/core7/src/orxonox/overlays/OverlayGroup.cc	(revision 10575)
@@ -149,13 +149,4 @@
         for (std::set< StrongPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
             (*it)->changedVisibility(); //inform all Child Overlays that our visibility has changed
-    }
-
-    //! Changes the gametype of all elements
-    void OverlayGroup::changedGametype()
-    {
-        SUPER( OverlayGroup, changedGametype );
-
-        for (std::set< StrongPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
-            (*it)->setGametype(this->getGametype());
     }
 
Index: code/branches/core7/src/orxonox/overlays/OverlayGroup.h
===================================================================
--- code/branches/core7/src/orxonox/overlays/OverlayGroup.h	(revision 10573)
+++ code/branches/core7/src/orxonox/overlays/OverlayGroup.h	(revision 10575)
@@ -69,5 +69,4 @@
 
         virtual void changedVisibility();
-        virtual void changedGametype();
 
         void setOwner(BaseObject* owner);
