Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.cc
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.cc	(revision 10721)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.cc	(revision 10724)
@@ -29,10 +29,6 @@
 #include "HUDWeapon.h"
 
-#include <OgreOverlayManager.h>
-#include <OgrePanelOverlayElement.h>
-
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
-#include "tools/TextureGenerator.h"
 #include "util/Convert.h"
 #include "core/class/Super.h"
@@ -186,5 +182,4 @@
             (*it)->setWeaponIndex(this->weaponIndex_);
             (*it)->setWeaponModeHUDActualSize(this->weaponModeHUDActualSize_);
-            (*it)->positionHUDChilds();
 
             ++ positionIndex;
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.h
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.h	(revision 10721)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.h	(revision 10724)
@@ -37,11 +37,7 @@
 
 #include <OgreOverlayManager.h>
-#include <OgreMaterialManager.h>
-#include <OgreTechnique.h>
-#include <OgrePass.h>
 #include <OgrePanelOverlayElement.h> 
 
 #include "overlays/OrxonoxOverlay.h"
-#include "overlays/OverlayText.h"
 #include "tools/interfaces/Tickable.h"
 #include "worldentities/pawns/Pawn.h"
@@ -79,11 +75,9 @@
             { weaponIndex_ = index;
               this->updatePosition();
-            }
-
-        virtual void positionHUDChilds();
+            }        
 
     private:
         virtual void createHUDChilds();
-        
+        virtual void positionHUDChilds();
         virtual void destroyHUDChilds();
         virtual void updateWeaponModeList();
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc	(revision 10721)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc	(revision 10724)
@@ -21,23 +21,16 @@
  *
  *   Author:
- *      Yuning Chai
- *      Felix Schulthess
+ *      Fabien Vultier
  *   Co-authors:
- *      Reto Grieder
- *      Wolfgang Roenninger
+ *      ...
  *
  */
 
 #include "HUDWeaponMode.h"
-
-#include <OgreOverlayManager.h>
-#include <OgrePanelOverlayElement.h>
 
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
-#include "tools/TextureGenerator.h"
-#include "weaponsystem/WeaponMode.h"
-#include "weaponsystem/Munition.h"
 #include "util/Convert.h"
+#include "core/class/Super.h"
 
 namespace orxonox
@@ -87,4 +80,5 @@
         textOverlayLeft_->setColour(ColourValue(0.21,0.70,0.21,1.0));
         textOverlayLeft_->setAspectCorrection(false);
+        textOverlayLeft_->setZOrder(600);
         
         this->textOverlayRight_ = new OverlayText(this->getContext());
@@ -97,4 +91,5 @@
         textOverlayRight_->setColour(ColourValue(0.21,0.70,0.21,1.0));
         textOverlayRight_->setAspectCorrection(false);
+        textOverlayRight_->setZOrder(600);
 
         materialNameState_ = "Orxonox/WSHUD_Reloading";
@@ -137,18 +132,17 @@
             if (munition != NULL)
             {
-                bool useSeparateMagazines = munition->getUseSeparateMagazines();
-                bool stackMunition = munition->getStackMunition();
-
-                if (!useSeparateMagazines && !stackMunition)
+                MunitionDeployment::Value deployment = munition->getMunitionDeployment();
+
+                if (deployment == MunitionDeployment::Share)
                 {
                     this->textOverlayLeft_->setCaption(multi_cast<std::string>(munition->getNumMunitionInCurrentMagazine(weaponMode_)));
                     this->textOverlayRight_->setCaption(multi_cast<std::string>(munition->getNumMagazines()));
                 }
-                else if (!useSeparateMagazines && stackMunition)
+                else if (deployment == MunitionDeployment::Stack)
                 {
                     this->textOverlayLeft_->setCaption(multi_cast<std::string>(munition->getNumMunition(weaponMode_)));
                     this->textOverlayRight_->setCaption("");
                 }
-                else if (useSeparateMagazines && !stackMunition)
+                else if (deployment == MunitionDeployment::Separate)
                 {
                     this->textOverlayLeft_->setCaption(multi_cast<std::string>(munition->getNumMunitionInCurrentMagazine(weaponMode_)));
@@ -245,16 +239,15 @@
         if (munition != NULL)
         {
-            bool useSeparateMagazines = munition->getUseSeparateMagazines();
-            bool stackMunition = munition->getStackMunition();
-
-            if (!useSeparateMagazines && !stackMunition)
+            MunitionDeployment::Value deployment = munition->getMunitionDeployment();
+
+            if (deployment == MunitionDeployment::Share)
             {
                 overlayElementMunition_->setMaterialName("Orxonox/WSHUD_MunitionShare");
             }
-            else if (!useSeparateMagazines && stackMunition)
+            else if (deployment == MunitionDeployment::Stack)
             {
                 overlayElementMunition_->setMaterialName("Orxonox/WSHUD_MunitionStack");
             }
-            else if (useSeparateMagazines && !stackMunition)
+            else if (deployment == MunitionDeployment::Separate)
             {
                 overlayElementMunition_->setMaterialName("Orxonox/WSHUD_MunitionSeparate");
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.h
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.h	(revision 10721)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.h	(revision 10724)
@@ -38,7 +38,4 @@
 
 #include <OgreOverlayManager.h>
-#include <OgreMaterialManager.h>
-#include <OgreTechnique.h>
-#include <OgrePass.h>
 #include <OgrePanelOverlayElement.h> 
 
@@ -49,4 +46,6 @@
 #include "overlays/OverlayGroup.h"
 #include "weaponsystem/ReplenishingMunition.h"
+#include "weaponsystem/WeaponMode.h"
+#include "weaponsystem/Munition.h"
 
 namespace orxonox
@@ -84,9 +83,8 @@
             }
 
-        virtual void positionHUDChilds();
-
     private:
         virtual void updateSize();
         virtual void updatePosition();
+        virtual void positionHUDChilds();
 
         WeakPtr<Pawn> owner_;
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.cc
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.cc	(revision 10721)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.cc	(revision 10724)
@@ -21,9 +21,7 @@
  *
  *   Author:
- *      Yuning Chai
- *      Felix Schulthess
+ *      Fabien Vultier
  *   Co-authors:
- *      Reto Grieder
- *      Wolfgang Roenninger
+ *      ...
  *
  */
@@ -31,10 +29,6 @@
 #include "HUDWeaponSystem.h"
 
-#include <OgreOverlayManager.h>
-#include <OgrePanelOverlayElement.h>
-
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
-#include "tools/TextureGenerator.h"
 #include "weaponsystem/WeaponSystem.h"
 #include "weaponsystem/WeaponPack.h"
@@ -73,14 +67,4 @@
     }
 
-    void HUDWeaponSystem::tick(float dt)
-    {
-        SUPER(HUDWeaponSystem, tick, dt);
-
-        if (this->owner_)
-        {
-
-        }
-    }  
-
     void HUDWeaponSystem::positionChanged()
     {
@@ -111,6 +95,4 @@
     {
         SUPER(HUDWeaponSystem, changedOverlayGroup);
-
-        //this->getOverlayGroup()->addElement(this->textOverlay_.get());
     }   
 
@@ -118,6 +100,4 @@
     {
         SUPER(HUDWeaponSystem, changedVisibility);
-
-        //this->textOverlay_->setVisible(this->isVisible());
     }
 
@@ -125,6 +105,4 @@
     {
         SUPER(HUDWeaponSystem, changedName);
-
-        //this->textOverlay_->setName(this->getName() + "text");
     }  
 
@@ -178,6 +156,4 @@
     {
         int positionIndex = 0;
-        //this->setSize(weaponModeHUDSize_);
-        // this->weaponModeHUDActualSize_ = this->getActualSize();
 
         for (std::vector<WeakPtr<HUDWeapon> >::iterator it = hudWeapons_.begin(); it != hudWeapons_.end(); ++it)
@@ -185,5 +161,4 @@
             (*it)->setWeaponIndex(positionIndex);
             (*it)->setWeaponModeHUDActualSize(this->weaponModeHUDActualSize_);
-            (*it)->positionHUDChilds();           
 
             ++ positionIndex;
Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.h
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.h	(revision 10721)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.h	(revision 10724)
@@ -36,13 +36,5 @@
 #include <string>
 
-#include <OgreOverlayManager.h>
-#include <OgreMaterialManager.h>
-#include <OgreTechnique.h>
-#include <OgrePass.h>
-#include <OgrePanelOverlayElement.h> 
-
 #include "overlays/OrxonoxOverlay.h"
-#include "overlays/OverlayText.h"
-#include "tools/interfaces/Tickable.h"
 #include "worldentities/pawns/Pawn.h"
 #include "overlays/OverlayGroup.h"
@@ -51,5 +43,5 @@
 namespace orxonox
 {
-    class _OverlaysExport HUDWeaponSystem : public OrxonoxOverlay, public Tickable
+    class _OverlaysExport HUDWeaponSystem : public OrxonoxOverlay
     {
     public:
@@ -58,5 +50,4 @@
 
         virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-        virtual void tick(float dt);
         virtual void changedOwner();
         virtual void changedOverlayGroup();
Index: code/branches/fabienHS15/src/modules/pickup/items/BoostPickup.cc
===================================================================
--- code/branches/fabienHS15/src/modules/pickup/items/BoostPickup.cc	(revision 10724)
+++ code/branches/fabienHS15/src/modules/pickup/items/BoostPickup.cc	(revision 10724)
@@ -0,0 +1,147 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabien Vultier
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file BoostPickup.cc
+    @brief Implementation of the BoostPickup class.
+*/
+
+#include "BoostPickup.h"
+
+#include <sstream>
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+
+#include "worldentities/pawns/SpaceShip.h"
+
+namespace orxonox
+{
+    RegisterClass(BoostPickup);
+
+    /**
+    @brief
+        Constructor. Registers the object and initializes the member variables.
+    */
+    BoostPickup::BoostPickup(Context* context) : Pickup(context)
+    {
+        RegisterObject(BoostPickup);
+
+        this->initialize();
+    }
+
+    /**
+    @brief
+        Destructor.
+    */
+    BoostPickup::~BoostPickup()
+    {
+    }
+
+    /**
+    @brief
+        Initializes the member variables.
+    */
+    void BoostPickup::initialize(void)
+    {
+        this->boostRefill_ = 0.0f;
+        //Defines who is allowed to pick up the pickup.
+        this->addTarget(ClassIdentifier<SpaceShip>::getIdentifier());
+    }
+
+    /**
+    @brief
+        Method for creating a BoostPickup object through XML.
+    */
+    void BoostPickup::XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode)
+    {
+        SUPER(BoostPickup, XMLPort, xmlelement, mode);
+
+        XMLPortParam(BoostPickup, "boostrefill", setBoostRefill, getBoostRefill, xmlelement, mode);
+    }
+
+    /**
+    @brief
+        Set the boost refill of this pickup.
+    */
+    void BoostPickup::setBoostRefill(float boostRefill)
+    {
+        if(boostRefill >= 0.0f && boostRefill <= 1.0f)
+        {
+            this->boostRefill_ = boostRefill;
+        }
+    }
+
+    /**
+    @brief
+        Is called when the pickup has transisted from used to unused or the other way around.
+    */
+    void BoostPickup::changedUsed(void)
+    {
+        SUPER(BoostPickup, changedUsed);
+
+        SpaceShip* ship = this->carrierToSpaceShipHelper();
+        if(ship == NULL) // If the PickupCarrier is no SpaceShip, then this pickup is useless and therefore is destroyed.
+            this->Pickupable::destroy();
+
+        // If the pickup has transited to used.
+        if(this->isUsed())
+        {
+            float gainedBoostPower = ship->getInitialBoostPower() * boostRefill_;
+            ship->gainBoostPower(gainedBoostPower);
+
+            // This will destroy the pickp
+            this->setUsed(false);
+        }
+        else
+        {
+            this->Pickupable::destroy();
+        }
+    }
+
+    /**
+    @brief
+        Helper to transform the PickupCarrier to a SpaceShip, and throw an error message if the conversion fails.
+    @return
+        A pointer to the SpaceShip, or NULL if the conversion failed.
+    */
+    SpaceShip* BoostPickup::carrierToSpaceShipHelper(void)
+    {
+        PickupCarrier* carrier = this->getCarrier();
+        SpaceShip* ship = orxonox_cast<SpaceShip*>(carrier);
+
+        if(ship == NULL)
+        {
+            orxout(internal_error, context::pickups) << "Invalid PickupCarrier in BoostPickup." << endl;
+        }
+
+        return ship;
+    }
+
+
+}
+
Index: code/branches/fabienHS15/src/modules/pickup/items/BoostPickup.h
===================================================================
--- code/branches/fabienHS15/src/modules/pickup/items/BoostPickup.h	(revision 10724)
+++ code/branches/fabienHS15/src/modules/pickup/items/BoostPickup.h	(revision 10724)
@@ -0,0 +1,72 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabien Vultier
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file BoostPickup.h
+    @brief Declaration of the BoostPickup class.
+    @ingroup PickupItems
+*/
+
+#ifndef _BoostPickup_H__
+#define _BoostPickup_H__
+
+#include "pickup/PickupPrereqs.h"
+
+#include <string>
+
+#include "pickup/Pickup.h"
+
+namespace orxonox
+{
+
+    class _PickupExport BoostPickup : public Pickup
+    {
+        public:
+
+            BoostPickup(Context* context); //!< Constructor.
+            virtual ~BoostPickup(); //!< Destructor.
+
+            virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode); //!< Method for creating a BoostPickup object through XML.
+
+            virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around.
+            inline float getBoostRefill()
+                { return this->boostRefill_; }
+
+        protected:
+            void setBoostRefill(float boostRefill); //!< Sets the boost refill according to the XML.
+
+        private:
+            void initialize(void); //!< Initializes the member variables.
+            Pawn* carrierToPawnHelper(void); //!< Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
+            SpaceShip* carrierToSpaceShipHelper(void); //!< Helper to transform the PickupCarrier to a SpaceShip, and throw an error message if the conversion fails.
+
+            float boostRefill_; //!< The amount of boost refilled by the user of the pickup. 1.0 means full refill, 0.5 means half refill.
+    };
+}
+
+#endif /* _BoostPickup_H__ */
Index: code/branches/fabienHS15/src/modules/pickup/items/CMakeLists.txt
===================================================================
--- code/branches/fabienHS15/src/modules/pickup/items/CMakeLists.txt	(revision 10721)
+++ code/branches/fabienHS15/src/modules/pickup/items/CMakeLists.txt	(revision 10724)
@@ -8,4 +8,5 @@
   ShrinkPickup.cc
   DamageBoostPickup.cc
+  BoostPickup.cc
   MunitionPickup.cc
   MunitionContainer.cc
Index: code/branches/fabienHS15/src/modules/pickup/items/MunitionPickup.cc
===================================================================
--- code/branches/fabienHS15/src/modules/pickup/items/MunitionPickup.cc	(revision 10721)
+++ code/branches/fabienHS15/src/modules/pickup/items/MunitionPickup.cc	(revision 10724)
@@ -111,5 +111,4 @@
             this->Pickupable::destroy();
 
-
         // If the pickup has transited to used.
         if(this->isUsed())
Index: code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.cc
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.cc	(revision 10721)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.cc	(revision 10724)
@@ -43,5 +43,5 @@
         RegisterObject(LaserMunition);
 
-        this->maxMunitionPerMagazine_ = 10;
+        this->maxMunitionPerMagazine_ = 20;
         this->maxMagazines_ = 10;
         this->magazines_ = 10;
@@ -55,5 +55,5 @@
         this->replenishMunitionAmount_ = 1;
 
-        this->reloadTime_ = 0.8f;
+        this->reloadTime_ = 0.5f;
     }
 }
Index: code/branches/fabienHS15/src/orxonox/overlays/OrxonoxOverlay.cc
===================================================================
--- code/branches/fabienHS15/src/orxonox/overlays/OrxonoxOverlay.cc	(revision 10721)
+++ code/branches/fabienHS15/src/orxonox/overlays/OrxonoxOverlay.cc	(revision 10724)
@@ -450,3 +450,11 @@
         tempTx->setColourOperationEx(Ogre::LBX_MODULATE, Ogre::LBS_MANUAL, Ogre::LBS_CURRENT, colour);
     }
+
+    void OrxonoxOverlay::setZOrder(unsigned short order)
+    {
+        if (this->overlay_)
+        {
+            this->overlay_->setZOrder(order);
+        }
+    }
 }
Index: code/branches/fabienHS15/src/orxonox/overlays/OrxonoxOverlay.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/overlays/OrxonoxOverlay.h	(revision 10721)
+++ code/branches/fabienHS15/src/orxonox/overlays/OrxonoxOverlay.h	(revision 10724)
@@ -186,4 +186,5 @@
         virtual void changedOverlayGroup()
             { this->changedVisibility(); }
+        virtual void setZOrder(unsigned short order);
 
     protected:
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.cc
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.cc	(revision 10721)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.cc	(revision 10724)
@@ -351,5 +351,5 @@
 
                 // If there was no change in a loop, all magazines are full (or locked due to loading)
-                // Because the first loop does not stat at the beginning of the map we have to treat is separately
+                // Because the first loop does not start at the beginning of the map we have to treat is separately
                 if (!change && !firstLoop)
                 {
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.h	(revision 10721)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.h	(revision 10724)
@@ -78,8 +78,7 @@
             inline unsigned int getMaxMunitionPerMagazine() const
                 { return this->maxMunitionPerMagazine_; }
-            inline bool getUseSeparateMagazines() const
-                { return deployment_ == MunitionDeployment::Separate; }
-            inline bool getStackMunition() const
-                { return deployment_ == MunitionDeployment::Stack; }
+            inline MunitionDeployment::Value getMunitionDeployment() const
+                { return deployment_; }
+
 
             bool canTakeMunition(unsigned int amount, WeaponMode* user) const;
Index: code/branches/fabienHS15/src/orxonox/worldentities/pawns/SpaceShip.cc
===================================================================
--- code/branches/fabienHS15/src/orxonox/worldentities/pawns/SpaceShip.cc	(revision 10721)
+++ code/branches/fabienHS15/src/orxonox/worldentities/pawns/SpaceShip.cc	(revision 10724)
@@ -297,4 +297,22 @@
         }
     }
+
+    void SpaceShip::gainBoostPower(float gainedBoostPower)
+    {
+        this->boostPower_ += gainedBoostPower;
+        
+        if (this->boostPower_ > this->initialBoostPower_)
+        {
+            this->boostPower_ = this->initialBoostPower_;
+        }
+
+        // If the booster is in cooldown mode and we gained boost power, the abort the cooldown.
+        if (this->isBoostCoolingDown() && this->boostPower_ > 0.0f)
+        {
+            timer_.stopTimer();
+            this->boostCooledDown();
+        }
+    }
+
     /**
     @brief
Index: code/branches/fabienHS15/src/orxonox/worldentities/pawns/SpaceShip.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/worldentities/pawns/SpaceShip.h	(revision 10721)
+++ code/branches/fabienHS15/src/orxonox/worldentities/pawns/SpaceShip.h	(revision 10724)
@@ -250,4 +250,9 @@
             inline float getShakeAmplitude() const
                 { return this->shakeAmplitude_; }
+            /**
+            @brief Add boost power. Is non-negative.
+            @return Returns the current boost power.
+            */
+            void gainBoostPower(float gainedBoostPower);
 
         protected:
