Index: code/branches/miniprojects/src/orxonox/objects/infos/GametypeInfo.cc
===================================================================
--- code/branches/miniprojects/src/orxonox/objects/infos/GametypeInfo.cc	(revision 2755)
+++ code/branches/miniprojects/src/orxonox/objects/infos/GametypeInfo.cc	(revision 2789)
@@ -58,4 +58,5 @@
         registerVariable(this->startCountdown_,         variableDirection::toclient);
         registerVariable(this->bStartCountdownRunning_, variableDirection::toclient);
+        registerVariable(this->hudtemplate_,            variableDirection::toclient);
     }
 }
Index: code/branches/miniprojects/src/orxonox/objects/infos/GametypeInfo.h
===================================================================
--- code/branches/miniprojects/src/orxonox/objects/infos/GametypeInfo.h	(revision 2755)
+++ code/branches/miniprojects/src/orxonox/objects/infos/GametypeInfo.h	(revision 2789)
@@ -56,4 +56,7 @@
                 { return this->startCountdown_; }
 
+            inline const std::string& getHUDTemplate() const
+                { return this->hudtemplate_; }
+
         private:
             bool bStarted_;
@@ -61,4 +64,5 @@
             bool bStartCountdownRunning_;
             float startCountdown_;
+            std::string hudtemplate_;
     };
 }
Index: code/branches/miniprojects/src/orxonox/objects/infos/HumanPlayer.cc
===================================================================
--- code/branches/miniprojects/src/orxonox/objects/infos/HumanPlayer.cc	(revision 2755)
+++ code/branches/miniprojects/src/orxonox/objects/infos/HumanPlayer.cc	(revision 2789)
@@ -53,4 +53,6 @@
         this->defaultController_ = Class(HumanController);
 
+        this->humanHud_ = 0;
+
         this->setConfigValues();
         this->registerVariables();
@@ -59,4 +61,6 @@
     HumanPlayer::~HumanPlayer()
     {
+        if (this->isInitialized() && this->humanHud_)
+            delete this->humanHud_;
     }
 
@@ -89,5 +93,5 @@
     void HumanPlayer::configvaluecallback_changedHUDTemplate()
     {
-        this->changedController();
+        this->setHumanHUDTemplate(this->hudtemplate_);
     }
 
@@ -146,12 +150,25 @@
     }
 
-    void HumanPlayer::changedController()
+    void HumanPlayer::changedControllableEntity()
     {
-        if (this->getController())
+        PlayerInfo::changedControllableEntity();
+
+        if (this->humanHud_)
+            this->humanHud_->setOwner(this->getControllableEntity());
+    }
+
+    void HumanPlayer::updateHumanHUD()
+    {
+        if (this->humanHud_)
         {
-            this->getController()->setHUDTemplate(this->hudtemplate_);
+            delete this->humanHud_;
+            this->humanHud_ = 0;
+        }
 
-            if (this->getController() && this->getController()->getHUD())
-                this->getController()->getHUD()->setOwner(this->getControllableEntity());
+        if (this->humanHudTemplate_ != "")
+        {
+            this->humanHud_ = new OverlayGroup(this);
+            this->humanHud_->addTemplate(this->humanHudTemplate_);
+            this->humanHud_->setOwner(this->getControllableEntity());
         }
     }
Index: code/branches/miniprojects/src/orxonox/objects/infos/HumanPlayer.h
===================================================================
--- code/branches/miniprojects/src/orxonox/objects/infos/HumanPlayer.h	(revision 2755)
+++ code/branches/miniprojects/src/orxonox/objects/infos/HumanPlayer.h	(revision 2789)
@@ -51,5 +51,19 @@
             void setClientID(unsigned int clientID);
 
-            virtual void changedController();
+            virtual void changedControllableEntity();
+
+            inline void setHumanHUDTemplate(const std::string& name)
+            {
+                if (name != this->humanHudTemplate_)
+                {
+                    this->humanHudTemplate_ = name;
+                    this->updateHumanHUD();
+                }
+            }
+            inline const std::string& getHumanHUDTemplate() const
+                { return this->humanHudTemplate_; }
+
+            inline OverlayGroup* getHumanHUD() const
+                { return this->humanHud_; }
 
         protected:
@@ -61,4 +75,6 @@
             void networkcallback_client_initialized();
 
+            void updateHumanHUD();
+
             std::string nick_;
             std::string synchronize_nick_;
@@ -66,4 +82,7 @@
             bool server_initialized_;
             bool client_initialized_;
+
+            std::string humanHudTemplate_;
+            OverlayGroup* humanHud_;
     };
 }
Index: code/branches/miniprojects/src/orxonox/objects/infos/PlayerInfo.cc
===================================================================
--- code/branches/miniprojects/src/orxonox/objects/infos/PlayerInfo.cc	(revision 2755)
+++ code/branches/miniprojects/src/orxonox/objects/infos/PlayerInfo.cc	(revision 2789)
@@ -35,4 +35,5 @@
 #include "network/ClientInformation.h"
 #include "objects/gametypes/Gametype.h"
+#include "overlays/OverlayGroup.h"
 
 namespace orxonox
@@ -50,4 +51,5 @@
         this->controllableEntity_ = 0;
         this->controllableEntityID_ = CLIENTID_UNKNOWN;
+        this->gametypeHud_ = 0;
 
         this->registerVariables();
@@ -68,4 +70,7 @@
             if (this->getGametype())
                 this->getGametype()->playerLeft(this);
+
+            if (this->BaseObject::isInitialized() && this->gametypeHud_)
+                delete this->gametypeHud_;
         }
     }
@@ -104,4 +109,8 @@
                 else
                     this->getGametype()->playerEntered(this);
+
+                if (this->isLocalPlayer() && this->isHumanPlayer())
+                    if (this->getGametype()->getHUDTemplate() != "")
+                        this->setGametypeHUDTemplate(this->getGametype()->getHUDTemplate());
             }
         }
@@ -141,4 +150,6 @@
         if (this->controller_)
             this->controller_->setControllableEntity(entity);
+
+        this->changedControllableEntity();
     }
 
@@ -155,4 +166,6 @@
             if (callback)
                 entity->removePlayer();
+
+            this->changedControllableEntity();
         }
     }
@@ -172,3 +185,25 @@
         }
     }
+
+    void PlayerInfo::changedControllableEntity()
+    {
+        if (this->gametypeHud_)
+            this->gametypeHud_->setOwner(this->getControllableEntity());
+    }
+
+    void PlayerInfo::updateGametypeHUD()
+    {
+        if (this->gametypeHud_)
+        {
+            delete this->gametypeHud_;
+            this->gametypeHud_ = 0;
+        }
+
+        if (this->isLocalPlayer() && this->isHumanPlayer() && this->gametypeHudTemplate_ != "")
+        {
+            this->gametypeHud_ = new OverlayGroup(this);
+            this->gametypeHud_->addTemplate(this->gametypeHudTemplate_);
+            this->gametypeHud_->setOwner(this->getControllableEntity());
+        }
+    }
 }
Index: code/branches/miniprojects/src/orxonox/objects/infos/PlayerInfo.h
===================================================================
--- code/branches/miniprojects/src/orxonox/objects/infos/PlayerInfo.h	(revision 2755)
+++ code/branches/miniprojects/src/orxonox/objects/infos/PlayerInfo.h	(revision 2789)
@@ -49,4 +49,7 @@
             virtual void changedGametype();
 
+            virtual void changedController() {}
+            virtual void changedControllableEntity();
+
             inline bool isHumanPlayer() const
                 { return this->bHumanPlayer_; }
@@ -73,5 +76,18 @@
             inline Controller* getController() const
                 { return this->controller_; }
-            virtual void changedController() {}
+
+            inline void setGametypeHUDTemplate(const std::string& name)
+            {
+                if (name != this->gametypeHudTemplate_)
+                {
+                    this->gametypeHudTemplate_ = name;
+                    this->updateGametypeHUD();
+                }
+            }
+            inline const std::string& getGametypeHUDTemplate() const
+                { return this->gametypeHudTemplate_; }
+
+            inline OverlayGroup* getGametypeHUD() const
+                { return this->gametypeHud_; }
 
         protected:
@@ -86,4 +102,5 @@
         private:
             void networkcallback_changedcontrollableentityID();
+            void updateGametypeHUD();
 
             bool bReadyToSpawn_;
@@ -91,4 +108,6 @@
             ControllableEntity* controllableEntity_;
             unsigned int controllableEntityID_;
+            std::string gametypeHudTemplate_;
+            OverlayGroup* gametypeHud_;
     };
 }
