Index: code/branches/pickup2/src/modules/overlays/hud/ChatOverlay.cc
===================================================================
--- code/branches/pickup2/src/modules/overlays/hud/ChatOverlay.cc	(revision 5942)
+++ code/branches/pickup2/src/modules/overlays/hud/ChatOverlay.cc	(revision 6412)
@@ -33,5 +33,5 @@
 
 #include "util/Convert.h"
-#include "util/UTFStringConversions.h"
+#include "util/DisplayStringConversions.h"
 #include "core/CoreIncludes.h"
 #include "core/ConfigValueIncludes.h"
@@ -86,5 +86,5 @@
         }
 
-        this->messages_.push_back(multi_cast<Ogre::UTFString>(text));
+        this->messages_.push_back(multi_cast<Ogre::DisplayString>(text));
         COUT(0) << "Chat: " << text << std::endl;
 
@@ -110,5 +110,5 @@
         this->text_->setCaption("");
 
-        for (std::list<Ogre::UTFString>::reverse_iterator it = this->messages_.rbegin(); it != this->messages_.rend(); ++it)
+        for (std::list<Ogre::DisplayString>::reverse_iterator it = this->messages_.rbegin(); it != this->messages_.rend(); ++it)
         {
             this->text_->setCaption(this->text_->getCaption() + "\n" + (*it));
Index: code/branches/pickup2/src/modules/overlays/hud/ChatOverlay.h
===================================================================
--- code/branches/pickup2/src/modules/overlays/hud/ChatOverlay.h	(revision 5942)
+++ code/branches/pickup2/src/modules/overlays/hud/ChatOverlay.h	(revision 6412)
@@ -33,5 +33,5 @@
 
 #include <list>
-#include <OgreUTFString.h>
+#include <OgreOverlayElement.h>
 
 #include "network/ChatListener.h"
@@ -51,5 +51,5 @@
             virtual void incomingChat(const std::string& message, unsigned int senderID);
 
-            std::list<Ogre::UTFString> messages_;
+            std::list<Ogre::DisplayString> messages_;
 
         private:
Index: code/branches/pickup2/src/modules/overlays/hud/HUDBar.cc
===================================================================
--- code/branches/pickup2/src/modules/overlays/hud/HUDBar.cc	(revision 5942)
+++ code/branches/pickup2/src/modules/overlays/hud/HUDBar.cc	(revision 6412)
@@ -67,10 +67,10 @@
 
     HUDBar::HUDBar(BaseObject* creator)
-        : OrxonoxOverlay(creator)
+        : OrxonoxOverlay(creator), right2Left_(false), autoColour_(false)
     {
         RegisterObject(HUDBar);
 
         // create new material
-        std::string materialname = "barmaterial" + multi_cast<std::string>(materialcount_s++);
+        const std::string& materialname = "barmaterial" + multi_cast<std::string>(materialcount_s++);
         Ogre::MaterialPtr material = static_cast<Ogre::MaterialPtr>(Ogre::MaterialManager::getSingleton().create(materialname, "General"));
         material->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA);
@@ -85,7 +85,7 @@
 
         this->value_ = 1.0f;  // initielize with 1.0f to trigger a change when calling setValue(0.0f) on the line below
+        this->setAutoColour(true);
         this->setValue(0.0f); // <--
         this->setRightToLeft(false);
-        this->setAutoColour(true);
         this->currentColour_ = ColourValue::White;
 
@@ -122,13 +122,13 @@
             {
                 ColourValue colour1(0, 0, 0, 1);
-                ColourValue colour2 = (*this->colours_.rbegin()).second;
+                ColourValue colour2 = this->colours_.rbegin()->second;
                 float value1(0);
-                float value2 = (*this->colours_.rbegin()).first;
+                float value2 = this->colours_.rbegin()->first;
                 for (std::map<float, ColourValue>::reverse_iterator it = this->colours_.rbegin(); it != this->colours_.rend(); ++it)
                 {
                     colour1 = colour2;
                     value1 = value2;
-                    colour2 = (*it).second;
-                    value2 = (*it).first;
+                    colour2 = it->second;
+                    value2 = it->first;
 
                     if (value2 < this->value_)
Index: code/branches/pickup2/src/modules/overlays/hud/HUDHealthBar.cc
===================================================================
--- code/branches/pickup2/src/modules/overlays/hud/HUDHealthBar.cc	(revision 5942)
+++ code/branches/pickup2/src/modules/overlays/hud/HUDHealthBar.cc	(revision 6412)
@@ -48,5 +48,5 @@
         this->textoverlay_ = new OverlayText(this);
 
-        assert(this->textoverlay_);
+        assert(this->textoverlay_.get());
 
         this->textoverlay_->setCaption("");
@@ -56,5 +56,8 @@
     {
         if (this->isInitialized())
+        {
             this->textoverlay_->destroy();
+            this->textoverlay_ = 0;
+        }
     }
 
@@ -106,5 +109,5 @@
         SUPER(HUDHealthBar, changedOverlayGroup);
 
-        this->getOverlayGroup()->addElement(this->textoverlay_);
+        this->getOverlayGroup()->addElement(this->textoverlay_.get());
     }
 
Index: code/branches/pickup2/src/modules/overlays/hud/HUDHealthBar.h
===================================================================
--- code/branches/pickup2/src/modules/overlays/hud/HUDHealthBar.h	(revision 5942)
+++ code/branches/pickup2/src/modules/overlays/hud/HUDHealthBar.h	(revision 6412)
@@ -53,5 +53,5 @@
 
             inline void setTextFont(const std::string& font)
-                { if (font != "") { this->textoverlay_->setFont(font); } }
+                { if (!font.empty()) { this->textoverlay_->setFont(font); } }
             inline const std::string& getTextFont() const
                 { return this->textoverlay_->getFont(); }
@@ -112,5 +112,5 @@
         private:
             WeakPtr<Pawn> owner_;
-            OverlayText* textoverlay_;
+            SmartPtr<OverlayText> textoverlay_;
             bool bUseBarColour_;
             ColourValue textColour_;
Index: code/branches/pickup2/src/modules/overlays/hud/HUDNavigation.cc
===================================================================
--- code/branches/pickup2/src/modules/overlays/hud/HUDNavigation.cc	(revision 5942)
+++ code/branches/pickup2/src/modules/overlays/hud/HUDNavigation.cc	(revision 6412)
@@ -30,4 +30,5 @@
 
 #include <string>
+#include <OgreCamera.h>
 #include <OgreOverlayManager.h>
 #include <OgreTextAreaOverlayElement.h>
@@ -35,10 +36,13 @@
 
 #include "util/Math.h"
-#include "util/StringUtils.h"
 #include "util/Convert.h"
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
+#include "CameraManager.h"
 #include "Scene.h"
 #include "Radar.h"
+#include "graphics/Camera.h"
+#include "controllers/HumanController.h"
+#include "worldentities/pawns/Pawn.h"
 
 namespace orxonox
@@ -60,4 +64,5 @@
         navMarker_->setMaterialName("Orxonox/NavArrows");
 
+/*
         // create aim marker
         aimMarker_ = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton()
@@ -70,7 +75,8 @@
         setNavMarkerSize(0.05f);
         setAimMarkerSize(0.04f);
+*/
 
         background_->addChild(navMarker_);
-        background_->addChild(aimMarker_);
+//        background_->addChild(aimMarker_);
         background_->addChild(navText_);
 
@@ -85,5 +91,5 @@
             Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->navMarker_);
             Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->navText_);
-            Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->aimMarker_);
+//            Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->aimMarker_);
         }
     }
@@ -96,10 +102,10 @@
         XMLPortParam(HUDNavigation, "textSize", setTextSize, getTextSize, xmlElement, mode);
         XMLPortParam(HUDNavigation, "navMarkerSize", setNavMarkerSize, getNavMarkerSize, xmlElement, mode);
-        XMLPortParam(HUDNavigation, "aimMarkerSize", setAimMarkerSize, getAimMarkerSize, xmlElement, mode);
+//        XMLPortParam(HUDNavigation, "aimMarkerSize", setAimMarkerSize, getAimMarkerSize, xmlElement, mode);
     }
 
     void HUDNavigation::setFont(const std::string& font)
     {
-        if (this->navText_ && font != "")
+        if (this->navText_ && !font.empty())
             this->navText_->setFontName(font);
     }
@@ -149,10 +155,10 @@
         float textLength = multi_cast<std::string>(dist).size() * navText_->getCharHeight() * 0.3;
 
-/*
-        Ogre::Camera* navCam = SpaceShip::getLocalShip()->getCamera()->cam_;
-        Matrix4 transformationMatrix = navCam->getProjectionMatrix() * navCam->getViewMatrix();
-*/
+        orxonox::Camera* cam = CameraManager::getInstance().getActiveCamera();
+        if (!cam)
+            return;
+        const Matrix4& transform = cam->getOgreCamera()->getProjectionMatrix() * cam->getOgreCamera()->getViewMatrix();
         // transform to screen coordinates
-        Vector3 pos = /*transformationMatrix * */radar->getFocus()->getRVWorldPosition();
+        Vector3 pos = transform * radar->getFocus()->getRVWorldPosition();
 
         bool outOfView;
@@ -172,5 +178,5 @@
         {
             // object is not in view
-            aimMarker_->hide();
+//            aimMarker_->hide();
 
             if (!wasOutOfView_)
@@ -227,5 +233,5 @@
             // object is in view
 /*
-            Vector3 aimpos = transformationMatrix * getPredictedPosition(SpaceShip::getLocalShip()->getPosition(),
+            Vector3 aimpos = transform * getPredictedPosition(SpaceShip::getLocalShip()->getPosition(),
                     Projectile::getSpeed(), Radar::getInstance().getFocus()->getRVWorldPosition(), Radar::getInstance().getFocus()->getRVOrientedVelocity());
 */
@@ -241,6 +247,6 @@
             navMarker_->setTop((-pos.y + 1.0 - navMarker_->getHeight()) * 0.5);
 
+/*
             aimMarker_->show();
-/*
             aimMarker_->setLeft((aimpos.x + 1.0 - aimMarker_->getWidth()) * 0.5);
             aimMarker_->setTop((-aimpos.y + 1.0 - aimMarker_->getHeight()) * 0.5);
@@ -253,9 +259,8 @@
     float HUDNavigation::getDist2Focus() const
     {
-/*
-        if (Radar::getInstance().getFocus())
-            return (Radar::getInstance().getFocus()->getRVWorldPosition() - SpaceShip::getLocalShip()->getPosition()).length();
-        else
-*/
+        Radar* radar = this->getOwner()->getScene()->getRadar();
+        if (radar->getFocus() && HumanController::getLocalControllerEntityAsPawn())
+            return (radar->getFocus()->getRVWorldPosition() - HumanController::getLocalControllerEntityAsPawn()->getWorldPosition()).length();
+        else
             return 0;
     }
@@ -267,11 +272,13 @@
     void HUDNavigation::sizeChanged()
     {
-        // use size to compensate for apspect ratio if enabled.
+        // use size to compensate for aspect ratio if enabled.
         float xScale = this->getActualSize().x;
         float yScale = this->getActualSize().y;
         if (this->navMarker_)
             navMarker_->setDimensions(navMarkerSize_ * xScale, navMarkerSize_ * yScale);
+/*
         if (this->aimMarker_)
             aimMarker_->setDimensions(aimMarkerSize_ * xScale, aimMarkerSize_ * yScale);
+*/
         if (this->navText_)
             navText_->setCharHeight(navText_->getCharHeight() * yScale);
Index: code/branches/pickup2/src/modules/overlays/hud/HUDNavigation.h
===================================================================
--- code/branches/pickup2/src/modules/overlays/hud/HUDNavigation.h	(revision 5942)
+++ code/branches/pickup2/src/modules/overlays/hud/HUDNavigation.h	(revision 6412)
@@ -56,6 +56,8 @@
         float getNavMarkerSize() const    { return this->navMarkerSize_; }
 
+/*
         void setAimMarkerSize(float size) { this->aimMarkerSize_ = size; this->sizeChanged(); }
         float getAimMarkerSize() const    { return this->aimMarkerSize_; }
+*/
 
         void setTextSize(float size);
@@ -71,6 +73,8 @@
         Ogre::PanelOverlayElement* navMarker_;      //!< the panel used to show the arrow and the target marker
         float navMarkerSize_;                       //!< One paramter size of the navigation marker
+/*
         Ogre::PanelOverlayElement* aimMarker_;      //!< Panel used to show the aim Marker
         float aimMarkerSize_;                       //!< One paramter size of the aim marker
+*/
         Ogre::TextAreaOverlayElement* navText_;     //!< Text overlay to display the target distance
         bool wasOutOfView_;                         //!< Performance booster variable: setMaterial is not cheap
Index: code/branches/pickup2/src/modules/overlays/hud/HUDRadar.cc
===================================================================
--- code/branches/pickup2/src/modules/overlays/hud/HUDRadar.cc	(revision 5942)
+++ code/branches/pickup2/src/modules/overlays/hud/HUDRadar.cc	(revision 6412)
@@ -126,5 +126,5 @@
             panel = *itRadarDots_;
             ++itRadarDots_;
-            std::string materialName = TextureGenerator::getMaterialName(
+            const std::string& materialName = TextureGenerator::getMaterialName(
                 shapeMaterials_[object->getRadarObjectShape()], object->getRadarObjectColour());
             if (materialName != panel->getMaterialName())
Index: code/branches/pickup2/src/modules/overlays/hud/TeamBaseMatchScore.cc
===================================================================
--- code/branches/pickup2/src/modules/overlays/hud/TeamBaseMatchScore.cc	(revision 5942)
+++ code/branches/pickup2/src/modules/overlays/hud/TeamBaseMatchScore.cc	(revision 6412)
@@ -71,9 +71,9 @@
         if (this->owner_)
         {
-            std::string bases1 = "(" + multi_cast<std::string>(this->owner_->getTeamBases(0)) + ")";
-            std::string bases2 = "(" + multi_cast<std::string>(this->owner_->getTeamBases(1)) + ")";
+            const std::string& bases1 = '(' + multi_cast<std::string>(this->owner_->getTeamBases(0)) + ')';
+            const std::string& bases2 = '(' + multi_cast<std::string>(this->owner_->getTeamBases(1)) + ')';
 
-            std::string score1 = multi_cast<std::string>(this->owner_->getTeamPoints(0));
-            std::string score2 = multi_cast<std::string>(this->owner_->getTeamPoints(1));
+            const std::string& score1 = multi_cast<std::string>(this->owner_->getTeamPoints(0));
+            const std::string& score2 = multi_cast<std::string>(this->owner_->getTeamPoints(1));
 
             std::string output1;
@@ -99,9 +99,9 @@
             }
 
-            std::string output = "";
+            std::string output;
             if (this->bShowBases_ || this->bShowScore_)
             {
                 if (this->bShowLeftTeam_ && this->bShowRightTeam_)
-                    output = output1 + ":" + output2;
+                    output = output1 + ':' + output2;
                 else if (this->bShowLeftTeam_ || this->bShowRightTeam_)
                     output = output1 + output2;
Index: code/branches/pickup2/src/modules/overlays/hud/UnderAttackHealthBar.cc
===================================================================
--- code/branches/pickup2/src/modules/overlays/hud/UnderAttackHealthBar.cc	(revision 5942)
+++ code/branches/pickup2/src/modules/overlays/hud/UnderAttackHealthBar.cc	(revision 6412)
@@ -34,4 +34,5 @@
 #include "gametypes/UnderAttack.h"
 #include "worldentities/pawns/Destroyer.h"
+#include "overlays/OverlayGroup.h"
 
 namespace orxonox
@@ -58,5 +59,8 @@
     {
         if (this->isInitialized())
+        {
             this->text_->destroy();
+            this->text_ = 0;
+        }
     }
 
@@ -91,4 +95,11 @@
     }
 
+    void UnderAttackHealthBar::changedOverlayGroup()
+    {
+        SUPER(UnderAttackHealthBar, changedOverlayGroup);
+
+        this->getOverlayGroup()->addElement(this->text_.get());
+    }
+
     void UnderAttackHealthBar::init()
     {
Index: code/branches/pickup2/src/modules/overlays/hud/UnderAttackHealthBar.h
===================================================================
--- code/branches/pickup2/src/modules/overlays/hud/UnderAttackHealthBar.h	(revision 5942)
+++ code/branches/pickup2/src/modules/overlays/hud/UnderAttackHealthBar.h	(revision 6412)
@@ -46,4 +46,5 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
             virtual void changedOwner();
+            virtual void changedOverlayGroup();
 
             inline void setDescriptionPickPoint(const Vector2& pickpoint)
@@ -61,5 +62,5 @@
 
             PlayerInfo* owner_;
-            OverlayText* text_;
+            SmartPtr<OverlayText> text_;
             Timer inittimer_;
     };
