Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDBar.cc
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDBar.cc	(revision 10724)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDBar.cc	(revision 10739)
@@ -47,9 +47,8 @@
     RegisterClass(BarColour);
 
-    BarColour::BarColour(Context* context)
-        : BaseObject(context)
+    BarColour::BarColour(Context* context) : BaseObject(context)
     {
         RegisterObject(BarColour);
-
+        
         this->setColour(ColourValue(1.0, 1.0, 1.0, 1.0));
         this->setPosition(0.0);
@@ -69,6 +68,5 @@
     RegisterClass(HUDBar);
 
-    HUDBar::HUDBar(Context* context)
-        : OrxonoxOverlay(context), right2Left_(false), autoColour_(false)
+    HUDBar::HUDBar(Context* context) : OrxonoxOverlay(context), right2Left_(false), autoColour_(false)
     {
         RegisterObject(HUDBar);
@@ -88,4 +86,8 @@
         this->bar_->setMaterialName(materialname);
 
+        this->bar_->setPosition(0.0f,0.0f);
+        this->bar_->setDimensions(1.0f,1.0f);
+
+        this->bUseIcon_ = false;
         this->value_ = 1.0f;  // initialize with 1.0f to trigger a change when calling setValue(0.0f) on the line below
         this->setAutoColour(true);
@@ -95,4 +97,9 @@
 
         this->background_->addChild(bar_);
+
+        this->icon_ = static_cast<Ogre::PanelOverlayElement* >(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "HUDBar_icon_" + getUniqueNumberString()));
+        this->icon_->setPosition(0.06f,0.0f);
+        this->icon_->setDimensions(0.1f,1.0f);
+        this->background_->addChild(this->icon_);
     }
 
@@ -115,4 +122,5 @@
         XMLPortParam(HUDBar, "autocolour",   setAutoColour,  getAutoColour,  xmlelement, mode);
         XMLPortParam(HUDBar, "bartexture",   setBarTexture,  getBarTexture, xmlelement, mode);
+        XMLPortParam(HUDBar, "iconmaterial", setIconMaterial, getIconMaterial, xmlelement, mode);
         XMLPortObject(HUDBar, BarColour, "", addColour, getColour, xmlelement, mode);
     }
@@ -161,17 +169,37 @@
         }
 
+        float height = this->bar_->getHeight();
+        float top = this->bar_->getTop();
+
         // set value
         if (this->right2Left_)
         {
             // backward case
-            this->bar_->setPosition(0.06f + 0.88f * (1 - this->value_), 0.0f);
-            this->bar_->setDimensions(0.88f * this->value_, 1.0f);
+            if (this->bUseIcon_)
+            {
+                this->bar_->setPosition(0.16f + 0.78f * (1 - this->value_), top);
+                this->bar_->setDimensions(0.78f * this->value_, height);
+            }
+            else
+            {
+                this->bar_->setPosition(0.06f + 0.88f * (1 - this->value_), top);
+                this->bar_->setDimensions(0.88f * this->value_, height);
+            }
         }
         else
         {
             // default case
-            this->bar_->setPosition(0.06f, 0.0f);
-            this->bar_->setDimensions(0.88f * this->value_, 1.0f);
-        }
+            if (this->bUseIcon_)
+            {
+                this->bar_->setPosition(0.16f, top);
+                this->bar_->setDimensions(0.78f * this->value_, height);
+            }
+            else
+            {
+                this->bar_->setPosition(0.06f, top);
+                this->bar_->setDimensions(0.88f * this->value_, height);
+            }
+        }
+
         if (this->value_ != 0)
             this->bar_->setTiling(this->value_, 1.0);
@@ -208,3 +236,15 @@
         return this->textureUnitState_->getTextureName();
     }
+
+    void HUDBar::setIconMaterial(const std::string& iconMaterial)
+    {
+        this->bUseIcon_ = true;
+        this->icon_->setMaterialName(iconMaterial);
+        valueChanged();
+    }
+
+    const std::string& HUDBar::getIconMaterial() const
+    {
+        return this->icon_->getMaterialName();
+    }
 }
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDBar.h
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDBar.h	(revision 10724)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDBar.h	(revision 10739)
@@ -37,4 +37,5 @@
 #include <map>
 #include <vector>
+#include <OgrePanelOverlayElement.h>
 
 #include "util/Math.h"
@@ -51,5 +52,5 @@
         virtual ~BarColour() { }
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);     
 
         void setColour(const ColourValue& colour) { this->colour_ = colour; }
@@ -115,10 +116,17 @@
         const std::string& getBarTexture() const;
 
+        void setIconMaterial(const std::string& iconMaterial);
+        const std::string& getIconMaterial() const;
+
         inline const ColourValue& getCurrentBarColour() const
             { return this->currentColour_; }
 
+        inline void setIconPosition(Vector2 position)
+            { this->icon_->setPosition(position.x, position.y); }
+        inline void setIconDimensions(Vector2 dimensions)
+            { this->icon_->setDimensions(dimensions.x, dimensions.y); }
+
     protected:
         virtual void valueChanged();
-
     private:
         void addColour(BarColour* colour);
@@ -129,7 +137,9 @@
         float value_;                       //!< progress of bar
         ColourValue currentColour_;
+        bool bUseIcon_;
 
         Ogre::PanelOverlayElement* bar_;
         Ogre::TextureUnitState* textureUnitState_;
+        Ogre::PanelOverlayElement* icon_;
         std::map<float, ColourValue> colours_;
         std::vector<BarColour*> barColours_;
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDBoostBar.cc
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDBoostBar.cc	(revision 10724)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDBoostBar.cc	(revision 10739)
@@ -59,5 +59,5 @@
             if (this->owner_->isBoostCoolingDown())
             {
-                this->setBackgroundColour(ColourValue(0.7f, 0.2f, 0.2f));
+                //this->setBackgroundColour(ColourValue(0.7f, 0.2f, 0.2f));
                 if (this->flashDt_ <= 0.0f)
                 {
@@ -72,5 +72,5 @@
                 this->flashDt_ = 0.0f;
                 this->show();
-                this->setBackgroundColour(ColourValue(0.2f, 0.7f, 0.2f));
+                //this->setBackgroundColour(ColourValue(0.2f, 0.7f, 0.2f));
             }
 
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDHealthBar.cc
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDHealthBar.cc	(revision 10724)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDHealthBar.cc	(revision 10739)
@@ -45,4 +45,9 @@
         this->owner_ = 0;
         this->bUseBarColour_ = false;
+        this->textOffset_ = Vector2(0.0f, 0.0f);
+        this->textScale_ = 1.0f;
+
+        this->setIconPosition(Vector2(0.05f,0.5f));
+        this->setIconDimensions(Vector2(0.1f,0.5f));
 
         this->textoverlay_ = new OverlayText(this->getContext());
@@ -51,4 +56,7 @@
 
         this->textoverlay_->setCaption("");
+        this->textoverlay_->setAspectCorrection(false);
+
+        positionText();
     }
 
@@ -58,5 +66,5 @@
         {
             this->textoverlay_->destroy();
-            this->textoverlay_ = 0;
+            this->textoverlay_ = NULL;
         }
     }
@@ -70,10 +78,9 @@
         XMLPortParam(HUDHealthBar, "textusebarcolour",  setTextUseBarColour,     getTextUseBarColour,     xmlelement, mode).defaultValues(false);
         XMLPortParam(HUDHealthBar, "textcolour",        setTextColour,           getTextColour,           xmlelement, mode).defaultValues(ColourValue(1.0, 1.0, 1.0, 1.0));
-        XMLPortParam(HUDHealthBar, "textsize",          setTextSize,             getTextSize,             xmlelement, mode).defaultValues(1.0f);
         XMLPortParam(HUDHealthBar, "textalign",         setTextAlignmentString,  getTextAlignmentString,  xmlelement, mode).defaultValues("left");
         XMLPortParam(HUDHealthBar, "textoffset",        setTextOffset,           getTextOffset,           xmlelement, mode).defaultValues(Vector2::ZERO);
+        XMLPortParam(HUDHealthBar, "textscale",         setTextScale,            getTextScale,            xmlelement, mode).defaultValues(1.0f);
         XMLPortParam(HUDHealthBar, "textpickpoint",     setTextPickPoint,        getTextPickPoint,        xmlelement, mode).defaultValues(Vector2::ZERO);
         XMLPortParam(HUDHealthBar, "textrotation",      setTextRotation,         getTextRotation,         xmlelement, mode).defaultValues(0.0f);
-        XMLPortParam(HUDHealthBar, "textcorrectaspect", setTextAspectCorrection, getTextAspectCorrection, xmlelement, mode).defaultValues(true);
         XMLPortParam(HUDHealthBar, "textspacewidth",    setTextSpaceWidth,       getTextSpaceWidth,       xmlelement, mode).defaultValues(true);
     }
@@ -139,3 +146,21 @@
             this->textoverlay_->setColour(this->textColour_);
     }
+
+    void HUDHealthBar::positionText()
+    {
+        this->textoverlay_->setPosition(this->getPosition() + this->textOffset_*this->getActualSize());
+        this->textoverlay_->setTextSize(this->getActualSize().y*this->textScale_);
+    }
+
+    void HUDHealthBar::positionChanged()
+    {
+        HUDBar::positionChanged();
+        positionText();
+    }
+
+    void HUDHealthBar::sizeChanged()
+    {
+        HUDBar::sizeChanged();
+        positionText();
+    }    
 }
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDHealthBar.h
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDHealthBar.h	(revision 10724)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDHealthBar.h	(revision 10739)
@@ -75,13 +75,15 @@
                 { return this->textoverlay_->getAlignmentString(); }
 
-            inline void setTextSize(float size)
-                { this->textoverlay_->setTextSize(size); }
-            inline float getTextSize() const
-                { return this->textoverlay_->getTextSize(); }
-
             inline void setTextVisible(bool bVisible)
                 { this->textoverlay_->setVisible(bVisible); }
             inline bool getTextVisible() const
                 { return this->textoverlay_->isVisible(); }
+
+            inline void setTextScale(float scale)
+                { this->textScale_ = scale;
+                  positionText();
+                }
+            inline float getTextScale() const
+                { return this->textScale_; }
 
             inline void setTextPickPoint(const Vector2& pickpoint)
@@ -91,12 +93,9 @@
 
             inline void setTextOffset(const Vector2& position)
-                { this->textoverlay_->setPosition(this->getPosition() + (position - this->getPickPoint()) * this->getSize()); }
+                { this->textOffset_ = position;
+                  this->positionText();
+                }
             inline Vector2 getTextOffset() const
-                { return (this->textoverlay_->getPosition() - this->getPosition()) / this->getSize() + this->getPickPoint(); }
-
-            inline void setTextAspectCorrection(bool correct)
-                { this->textoverlay_->setAspectCorrection(correct); }
-            inline bool getTextAspectCorrection() const
-                { return this->textoverlay_->getAspectCorrection(); }
+                { return this->textOffset_; }
 
             inline void setTextRotation(const Degree& angle)
@@ -112,10 +111,15 @@
             inline void setHealthBarOwner(Pawn* owner)
                 { this->owner_ = owner; }
-
+        protected:
+            virtual void positionChanged();
+            virtual void sizeChanged();
         private:
+            virtual void positionText();
             WeakPtr<Pawn> owner_;
             StrongPtr<OverlayText> textoverlay_;
             bool bUseBarColour_;
             ColourValue textColour_;
+            Vector2 textOffset_;
+            float textScale_;
     };
 }
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.cc
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.cc	(revision 10724)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.cc	(revision 10739)
@@ -60,5 +60,4 @@
         {
             destroyHUDChilds();
-            //this->overlayElement_->destroy();            
         }
     }
@@ -179,4 +178,5 @@
         for (std::vector<WeakPtr<HUDWeaponMode> >::iterator it = hudWeaponModes_.begin(); it != hudWeaponModes_.end(); ++it)
         {
+            (*it)->setPositionOffset(this->positionOffset_);
             (*it)->setWeaponModeIndex(positionIndex);
             (*it)->setWeaponIndex(this->weaponIndex_);
@@ -210,5 +210,5 @@
         if (weaponModes_ != NULL)
         {
-            this->setPosition(Vector2(weaponModeHUDActualSize_.x*weaponIndex_,0.0f));
+            this->setPosition(Vector2(weaponModeHUDActualSize_.x*weaponIndex_,0.0f) + this->positionOffset_);
         }        
     }       
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.h
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.h	(revision 10724)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.h	(revision 10739)
@@ -72,7 +72,13 @@
         inline Vector2 getWeaponModeHUDActualSize() const
             { return weaponModeHUDActualSize_; }
+        inline void setPositionOffset(Vector2 positionOffset)
+            {
+                this->positionOffset_ = positionOffset;
+                this->updatePosition();
+            }            
         inline void setWeaponIndex(int index)
-            { weaponIndex_ = index;
-              this->updatePosition();
+            {
+                weaponIndex_ = index;
+                this->updatePosition();
             }        
 
@@ -94,4 +100,5 @@
 
         Vector2 weaponModeHUDActualSize_;
+        Vector2 positionOffset_;
         int weaponIndex_;
     };
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc	(revision 10724)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc	(revision 10739)
@@ -102,5 +102,6 @@
         if (this->isInitialized())
         {
-            //this->textOverlay_->destroy();
+            this->textOverlayLeft_->destroy();
+            this->textOverlayRight_->destroy();
         }
     }
@@ -280,5 +281,5 @@
     void HUDWeaponMode::updatePosition()
     {
-        this->setPosition(Vector2(weaponModeHUDActualSize_.x*weaponIndex_,weaponModeHUDActualSize_.y*weaponModeIndex_));
+        this->setPosition(Vector2(weaponModeHUDActualSize_.x*weaponIndex_,weaponModeHUDActualSize_.y*weaponModeIndex_) + this->positionOffset_);
     }      
 }
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.h
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.h	(revision 10724)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.h	(revision 10739)
@@ -82,4 +82,9 @@
               this->updatePosition();
             }
+        inline void setPositionOffset(Vector2 positionOffset)
+            {
+                this->positionOffset_ = positionOffset;
+                this->updatePosition();
+            }
 
     private:
@@ -102,4 +107,5 @@
 
         Vector2 weaponModeHUDActualSize_;
+        Vector2 positionOffset_;
         int weaponIndex_;
         int weaponModeIndex_;
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.cc
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.cc	(revision 10724)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.cc	(revision 10739)
@@ -156,7 +156,9 @@
     {
         int positionIndex = 0;
+        Vector2 offset = this->getPosition();
 
         for (std::vector<WeakPtr<HUDWeapon> >::iterator it = hudWeapons_.begin(); it != hudWeapons_.end(); ++it)
         {
+            (*it)->setPositionOffset(offset);
             (*it)->setWeaponIndex(positionIndex);
             (*it)->setWeaponModeHUDActualSize(this->weaponModeHUDActualSize_);
Index: code/branches/fabienHS15/src/modules/towerdefense/TowerDefenseTower.cc
===================================================================
--- code/branches/fabienHS15/src/modules/towerdefense/TowerDefenseTower.cc	(revision 10724)
+++ code/branches/fabienHS15/src/modules/towerdefense/TowerDefenseTower.cc	(revision 10739)
@@ -61,12 +61,6 @@
         {
             upgrade++;
-            float reloadrate = getReloadRate();
-            float reloadwaittime = getReloadWaitTime();
             this->setDamageMultiplier((upgrade+1)*2);
             //this->setRotationThrust(2*this->getRotationThrust());
-            reloadrate = 0.5f*reloadrate;
-            reloadwaittime = 0.5f*reloadwaittime;
-            setReloadRate(reloadrate);
-            setReloadWaitTime(reloadwaittime);
             //this->addTemplate("towerturret1");
         }
Index: code/branches/fabienHS15/src/modules/weapons/projectiles/BasicProjectile.cc
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/projectiles/BasicProjectile.cc	(revision 10724)
+++ code/branches/fabienHS15/src/modules/weapons/projectiles/BasicProjectile.cc	(revision 10739)
@@ -68,5 +68,5 @@
     @brief
         The function called when a projectile hits another thing.
-        Calls the hit-function, starts the reload countdown, displays visual hit effects defined in Pawn.
+        Calls the hit-function, starts the shield recharge countdown, displays visual hit effects defined in Pawn.
         Needs to be called in the collidesAgainst() function by every Class directly inheriting from BasicProjectile.
     @param otherObject
@@ -97,5 +97,5 @@
             {
                 victim->hit(this->getShooter(), contactPoint, cs, this->getDamage(), this->getHealthDamage(), this->getShieldDamage());
-                victim->startReloadCountdown();
+                victim->startShieldRechargeCountdown();
             }
 
