Index: code/trunk/src/orxonox/objects/infos/HumanPlayer.cc
===================================================================
--- code/trunk/src/orxonox/objects/infos/HumanPlayer.cc	(revision 2963)
+++ code/trunk/src/orxonox/objects/infos/HumanPlayer.cc	(revision 2973)
@@ -167,12 +167,4 @@
     }
 
-    void HumanPlayer::changedControllableEntity()
-    {
-        PlayerInfo::changedControllableEntity();
-
-        if (this->humanHud_)
-            this->humanHud_->setOwner(this->getControllableEntity());
-    }
-
     void HumanPlayer::updateHumanHUD()
     {
@@ -187,5 +179,5 @@
             this->humanHud_ = new OverlayGroup(this);
             this->humanHud_->addTemplate(this->humanHudTemplate_);
-            this->humanHud_->setOwner(this->getControllableEntity());
+            this->humanHud_->setOwner(this);
         }
     }
@@ -203,5 +195,5 @@
             this->gametypeHud_ = new OverlayGroup(this);
             this->gametypeHud_->addTemplate(this->gametypeHudTemplate_);
-            this->gametypeHud_->setOwner(this->getGametype());
+            this->gametypeHud_->setOwner(this);
         }
     }
Index: code/trunk/src/orxonox/objects/infos/HumanPlayer.h
===================================================================
--- code/trunk/src/orxonox/objects/infos/HumanPlayer.h	(revision 2963)
+++ code/trunk/src/orxonox/objects/infos/HumanPlayer.h	(revision 2973)
@@ -52,5 +52,4 @@
 
             virtual void changedGametype();
-            virtual void changedControllableEntity();
 
             inline void setHumanHUDTemplate(const std::string& name)
Index: code/trunk/src/orxonox/objects/infos/PlayerInfo.cc
===================================================================
--- code/trunk/src/orxonox/objects/infos/PlayerInfo.cc	(revision 2963)
+++ code/trunk/src/orxonox/objects/infos/PlayerInfo.cc	(revision 2973)
@@ -51,4 +51,8 @@
         this->controllableEntityID_ = CLIENTID_UNKNOWN;
 
+        this->gtinfo_ = 0;
+        this->gtinfoID_ = OBJECTID_UNKNOWN;
+        this->updateGametypeInfo();
+
         this->registerVariables();
     }
@@ -76,4 +80,5 @@
         registerVariable(this->controllableEntityID_, variableDirection::toclient, new NetworkCallback<PlayerInfo>(this, &PlayerInfo::networkcallback_changedcontrollableentityID));
         registerVariable(this->bReadyToSpawn_,        variableDirection::toserver);
+        registerVariable(this->gtinfoID_,             variableDirection::toclient, new NetworkCallback<PlayerInfo>(this, &PlayerInfo::networkcallback_changedgtinfoID));
     }
 
@@ -88,4 +93,6 @@
     void PlayerInfo::changedGametype()
     {
+        this->updateGametypeInfo();
+
         if (this->isInitialized())
         {
@@ -108,4 +115,16 @@
     }
 
+    void PlayerInfo::updateGametypeInfo()
+    {
+        this->gtinfo_ = 0;
+        this->gtinfoID_ = OBJECTID_UNKNOWN;
+
+        if (this->getGametype() && this->getGametype()->getGametypeInfo())
+        {
+            this->gtinfo_ = this->getGametype()->getGametypeInfo();
+            this->gtinfoID_ = this->gtinfo_->getObjectID();
+        }
+    }
+
     void PlayerInfo::createController()
     {
@@ -181,3 +200,14 @@
         }
     }
+
+    void PlayerInfo::networkcallback_changedgtinfoID()
+    {
+        if (this->gtinfoID_ != OBJECTID_UNKNOWN)
+        {
+            this->gtinfo_ = dynamic_cast<GametypeInfo*>(Synchronisable::getSynchronisable(this->gtinfoID_));
+
+            if (!this->gtinfo_)
+                this->gtinfoID_ = OBJECTID_UNKNOWN;
+        }
+    }
 }
Index: code/trunk/src/orxonox/objects/infos/PlayerInfo.h
===================================================================
--- code/trunk/src/orxonox/objects/infos/PlayerInfo.h	(revision 2963)
+++ code/trunk/src/orxonox/objects/infos/PlayerInfo.h	(revision 2973)
@@ -77,4 +77,7 @@
                 { return this->controller_; }
 
+            inline const GametypeInfo* getGametypeInfo() const
+                { return this->gtinfo_; }
+
         protected:
             void createController();
@@ -88,4 +91,6 @@
         private:
             void networkcallback_changedcontrollableentityID();
+            void networkcallback_changedgtinfoID();
+            void updateGametypeInfo();
 
             bool bReadyToSpawn_;
@@ -93,4 +98,7 @@
             ControllableEntity* controllableEntity_;
             unsigned int controllableEntityID_;
+
+            const GametypeInfo* gtinfo_;
+            unsigned int gtinfoID_;
     };
 }
Index: code/trunk/src/orxonox/objects/worldentities/ControllableEntity.cc
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/ControllableEntity.cc	(revision 2963)
+++ code/trunk/src/orxonox/objects/worldentities/ControllableEntity.cc	(revision 2973)
@@ -42,5 +42,4 @@
 #include "objects/worldentities/Camera.h"
 #include "objects/worldentities/CameraPosition.h"
-#include "objects/gametypes/Gametype.h"
 #include "overlays/OverlayGroup.h"
 
@@ -67,8 +66,4 @@
         this->mouseLookSpeed_ = 200;
 
-        this->gtinfo_ = 0;
-        this->gtinfoID_ = OBJECTID_UNKNOWN;
-        this->changedGametype();
-
         this->server_position_         = Vector3::ZERO;
         this->client_position_         = Vector3::ZERO;
@@ -125,19 +120,4 @@
     {
         SetConfigValue(mouseLookSpeed_, 3.0f);
-    }
-
-    void ControllableEntity::changedGametype()
-    {
-        //SUPER(ControllableEntity, changedGametype);
-        WorldEntity::changedGametype();
-
-        this->gtinfo_ = 0;
-        this->gtinfoID_ = OBJECTID_UNKNOWN;
-
-        if (this->getGametype() && this->getGametype()->getGametypeInfo())
-        {
-            this->gtinfo_ = this->getGametype()->getGametypeInfo();
-            this->gtinfoID_ = this->gtinfo_->getObjectID();
-        }
     }
 
@@ -283,15 +263,4 @@
     }
 
-    void ControllableEntity::networkcallback_changedgtinfoID()
-    {
-        if (this->gtinfoID_ != OBJECTID_UNKNOWN)
-        {
-            this->gtinfo_ = dynamic_cast<GametypeInfo*>(Synchronisable::getSynchronisable(this->gtinfoID_));
-
-            if (!this->gtinfo_)
-                this->gtinfoID_ = OBJECTID_UNKNOWN;
-        }
-    }
-
     void ControllableEntity::startLocalHumanControl()
     {
@@ -394,5 +363,4 @@
 
         registerVariable(this->playerID_,                variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::networkcallback_changedplayerID));
-        registerVariable(this->gtinfoID_,                variableDirection::toclient, new NetworkCallback<ControllableEntity>(this, &ControllableEntity::networkcallback_changedgtinfoID));
     }
 
Index: code/trunk/src/orxonox/objects/worldentities/ControllableEntity.h
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/ControllableEntity.h	(revision 2963)
+++ code/trunk/src/orxonox/objects/worldentities/ControllableEntity.h	(revision 2973)
@@ -48,5 +48,4 @@
             void setConfigValues();
 
-            virtual void changedGametype();
             virtual void changedPlayer() {}
 
@@ -126,7 +125,4 @@
                 { return this->bHasHumanController_; }
 
-            inline const GametypeInfo* getGametypeInfo() const
-                { return this->gtinfo_; }
-
             inline bool isInMouseLook() const
                 { return this->bMouseLook_; }
@@ -157,5 +153,4 @@
 
             void networkcallback_changedplayerID();
-            void networkcallback_changedgtinfoID();
 
             // Bullet btMotionState related
@@ -190,7 +185,4 @@
             std::list<CameraPosition*> cameraPositions_;
             std::string cameraPositionTemplate_;
-
-            const GametypeInfo* gtinfo_;
-            unsigned int gtinfoID_;
     };
 }
