Index: code/branches/pickup/src/modules/overlays/FadeoutText.cc
===================================================================
--- code/branches/pickup/src/modules/overlays/FadeoutText.cc	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/FadeoutText.cc	(revision 5935)
@@ -46,5 +46,5 @@
 
         this->bFadingOut_ = false;
-        this->fadeouttimer_.setTimer(3.0f, false, this, createExecutor(createFunctor(&FadeoutText::fadeout)));
+        this->fadeouttimer_.setTimer(3.0f, false, createExecutor(createFunctor(&FadeoutText::fadeout, this)));
         this->fadeouttimer_.stopTimer();
 
Index: code/branches/pickup/src/modules/overlays/FadeoutText.h
===================================================================
--- code/branches/pickup/src/modules/overlays/FadeoutText.h	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/FadeoutText.h	(revision 5935)
@@ -68,5 +68,5 @@
 
             bool bFadingOut_;
-            Timer<FadeoutText> fadeouttimer_;
+            Timer fadeouttimer_;
 
             float initialAlpha_;
Index: code/branches/pickup/src/modules/overlays/OverlaysPrereqs.h
===================================================================
--- code/branches/pickup/src/modules/overlays/OverlaysPrereqs.h	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/OverlaysPrereqs.h	(revision 5935)
@@ -28,6 +28,7 @@
 
 /**
-  @file
-  @brief Contains all the necessary forward declarations for all classes and structs.
+@file
+@brief
+    Shared library macros, enums, constants and forward declarations for the overlays module
 */
 
@@ -36,8 +37,10 @@
 
 #include "OrxonoxConfig.h"
+#include "OrxonoxPrereqs.h"
 
 //-----------------------------------------------------------------------
 // Shared library settings
 //-----------------------------------------------------------------------
+
 #if defined(ORXONOX_PLATFORM_WINDOWS) && !defined(ORXONOX_STATIC_BUILD)
 #  ifdef OVERLAYS_SHARED_BUILD
@@ -62,23 +65,29 @@
 namespace orxonox
 {
-    class BarColour;
+    class FadeoutText;
+    class GUIOverlay;
+    class OverlayText;
+
+    // debugging
     class DebugFPSText;
     class DebugRTRText;
-    class GUIOverlay;
+
+    // hud
+    class AnnounceMessage;
+    class BarColour;
+    class ChatOverlay;
+    class DeathMessage;
+    class GametypeStatus;
     class HUDBar;
+    class HUDHealthBar;
     class HUDNavigation;
     class HUDRadar;
     class HUDSpeedBar;
-    class HUDHealthBar;
     class HUDTimer;
-    class OrxonoxOverlay;
-    class OverlayGroup;
-    class OverlayText;
-    class FadeoutText;
-    class GametypeStatus;
-    class AnnounceMessage;
     class KillMessage;
-    class DeathMessage;
+    class TeamBaseMatchScore;
+    class UnderAttackHealthBar;
 
+    // stats
     class CreateLines;
     class Scoreboard;
Index: code/branches/pickup/src/modules/overlays/hud/ChatOverlay.cc
===================================================================
--- code/branches/pickup/src/modules/overlays/hud/ChatOverlay.cc	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/hud/ChatOverlay.cc	(revision 5935)
@@ -58,4 +58,6 @@
     ChatOverlay::~ChatOverlay()
     {
+        for (std::set<Timer*>::iterator it = this->timers_.begin(); it != this->timers_.end(); ++it)
+            delete (*it);
     }
 
@@ -87,14 +89,19 @@
         COUT(0) << "Chat: " << text << std::endl;
 
-        new Timer<ChatOverlay>(this->displayTime_, false, this, createExecutor(createFunctor(&ChatOverlay::dropMessage)), true);
+        Timer* timer = new Timer();
+        this->timers_.insert(timer); // store the timer in a set to destroy it in the destructor
+        Executor* executor = createExecutor(createFunctor(&ChatOverlay::dropMessage, this));
+        executor->setDefaultValues(timer);
+        timer->setTimer(this->displayTime_, false, executor, true);
 
         this->updateOverlayText();
     }
 
-    void ChatOverlay::dropMessage()
+    void ChatOverlay::dropMessage(Timer* timer)
     {
         if (this->messages_.size() > 0)
             this->messages_.pop_front();
         this->updateOverlayText();
+        this->timers_.erase(timer); // the timer destroys itself, but we have to remove it from the set
     }
 
Index: code/branches/pickup/src/modules/overlays/hud/ChatOverlay.h
===================================================================
--- code/branches/pickup/src/modules/overlays/hud/ChatOverlay.h	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/hud/ChatOverlay.h	(revision 5935)
@@ -55,7 +55,8 @@
         private:
             void updateOverlayText();
-            void dropMessage();
+            void dropMessage(Timer* timer);
 
             float displayTime_;
+            std::set<Timer*> timers_;
     };
 }
Index: code/branches/pickup/src/modules/overlays/hud/HUDBar.cc
===================================================================
--- code/branches/pickup/src/modules/overlays/hud/HUDBar.cc	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/hud/HUDBar.cc	(revision 5935)
@@ -96,5 +96,9 @@
     {
         if (this->isInitialized())
+        {
             Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->bar_);
+            for (std::vector<BarColour*>::const_iterator it = this->barColours_.begin(); it != this->barColours_.end(); )
+                (*it++)->destroy();
+        }
     }
 
Index: code/branches/pickup/src/modules/overlays/hud/HUDHealthBar.cc
===================================================================
--- code/branches/pickup/src/modules/overlays/hud/HUDHealthBar.cc	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/hud/HUDHealthBar.cc	(revision 5935)
@@ -56,5 +56,5 @@
     {
         if (this->isInitialized())
-            delete this->textoverlay_;
+            this->textoverlay_->destroy();
     }
 
@@ -84,4 +84,9 @@
             this->setValue(this->owner_->getHealth() / this->owner_->getInitialHealth());
             this->textoverlay_->setCaption(multi_cast<std::string>(static_cast<int>(this->owner_->getHealth())));
+        }
+        else
+        {
+            this->setValue(0);
+            this->textoverlay_->setCaption("0");
         }
 
Index: code/branches/pickup/src/modules/overlays/hud/HUDHealthBar.h
===================================================================
--- code/branches/pickup/src/modules/overlays/hud/HUDHealthBar.h	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/hud/HUDHealthBar.h	(revision 5935)
@@ -111,5 +111,5 @@
 
         private:
-            Pawn* owner_;
+            WeakPtr<Pawn> owner_;
             OverlayText* textoverlay_;
             bool bUseBarColour_;
Index: code/branches/pickup/src/modules/overlays/hud/HUDNavigation.cc
===================================================================
--- code/branches/pickup/src/modules/overlays/hud/HUDNavigation.cc	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/hud/HUDNavigation.cc	(revision 5935)
@@ -39,4 +39,5 @@
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
+#include "Scene.h"
 #include "Radar.h"
 
@@ -130,5 +131,8 @@
         SUPER(HUDNavigation, tick, dt);
 
-        if (!Radar::getInstance().getFocus())
+        // Get radar
+        Radar* radar = this->getOwner()->getScene()->getRadar();
+
+        if (!radar->getFocus())
         {
             this->overlay_->hide();
@@ -150,5 +154,5 @@
 */
         // transform to screen coordinates
-        Vector3 pos = /*transformationMatrix * */Radar::getInstance().getFocus()->getRVWorldPosition();
+        Vector3 pos = /*transformationMatrix * */radar->getFocus()->getRVWorldPosition();
 
         bool outOfView;
Index: code/branches/pickup/src/modules/overlays/hud/TeamBaseMatchScore.cc
===================================================================
--- code/branches/pickup/src/modules/overlays/hud/TeamBaseMatchScore.cc	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/hud/TeamBaseMatchScore.cc	(revision 5935)
@@ -118,5 +118,5 @@
 
         if (this->getOwner() && this->getOwner()->getGametype())
-            this->owner_ = orxonox_cast<TeamBaseMatch*>(this->getOwner()->getGametype());
+            this->owner_ = orxonox_cast<TeamBaseMatch*>(this->getOwner()->getGametype().get());
         else
             this->owner_ = 0;
Index: code/branches/pickup/src/modules/overlays/hud/UnderAttackHealthBar.cc
===================================================================
--- code/branches/pickup/src/modules/overlays/hud/UnderAttackHealthBar.cc	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/hud/UnderAttackHealthBar.cc	(revision 5935)
@@ -52,5 +52,5 @@
         this->text_->setPickPoint(Vector2(0.5, 0));
 
-        this->inittimer_.setTimer(0.0f, false, this, createExecutor(createFunctor(&UnderAttackHealthBar::init)));
+        this->inittimer_.setTimer(0.0f, false, createExecutor(createFunctor(&UnderAttackHealthBar::init, this)));
     }
 
@@ -58,5 +58,5 @@
     {
         if (this->isInitialized())
-            delete this->text_;
+            this->text_->destroy();
     }
 
@@ -78,5 +78,5 @@
             this->owner_ = player;
 
-            UnderAttack* ua = orxonox_cast<UnderAttack*>(player->getGametype());
+            UnderAttack* ua = orxonox_cast<UnderAttack*>(player->getGametype().get());
             if (ua)
             {
Index: code/branches/pickup/src/modules/overlays/hud/UnderAttackHealthBar.h
===================================================================
--- code/branches/pickup/src/modules/overlays/hud/UnderAttackHealthBar.h	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/hud/UnderAttackHealthBar.h	(revision 5935)
@@ -62,5 +62,5 @@
             PlayerInfo* owner_;
             OverlayText* text_;
-            Timer<UnderAttackHealthBar> inittimer_;
+            Timer inittimer_;
     };
 }
Index: code/branches/pickup/src/modules/overlays/stats/CreateLines.cc
===================================================================
--- code/branches/pickup/src/modules/overlays/stats/CreateLines.cc	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/stats/CreateLines.cc	(revision 5935)
@@ -59,8 +59,8 @@
     CreateLines::~CreateLines()
     {
-        delete this->playerNameText_;
-        delete this->scoreText_;
-        delete this->deathsText_;
-        delete this->background_;
+        this->playerNameText_->destroy();
+        this->scoreText_->destroy();
+        this->deathsText_->destroy();
+        this->background_->destroy();
     }
 
Index: code/branches/pickup/src/modules/overlays/stats/Scoreboard.cc
===================================================================
--- code/branches/pickup/src/modules/overlays/stats/Scoreboard.cc	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/stats/Scoreboard.cc	(revision 5935)
@@ -44,4 +44,14 @@
     {
         RegisterObject(Scoreboard);
+    }
+
+    Scoreboard::~Scoreboard()
+    {
+        while (this->lines_.size() > 0)
+        {
+            // destroy lines
+            delete this->lines_.back();
+            this->lines_.pop_back();
+        }
     }
 
Index: code/branches/pickup/src/modules/overlays/stats/Scoreboard.h
===================================================================
--- code/branches/pickup/src/modules/overlays/stats/Scoreboard.h	(revision 5815)
+++ code/branches/pickup/src/modules/overlays/stats/Scoreboard.h	(revision 5935)
@@ -42,5 +42,5 @@
     public: // functions
         Scoreboard(BaseObject* creator);
-        virtual ~Scoreboard() {}
+        virtual ~Scoreboard();
 
         virtual void XMLPort(Element& xmlElement, XMLPort::Mode mode);
