Index: /code/branches/fabienHS15/data/levels/includes/weaponSettingsAssff.oxi
===================================================================
--- /code/branches/fabienHS15/data/levels/includes/weaponSettingsAssff.oxi	(revision 10687)
+++ /code/branches/fabienHS15/data/levels/includes/weaponSettingsAssff.oxi	(revision 10688)
@@ -24,6 +24,6 @@
             <Model mesh="hs-w01_reduced.mesh" roll="90" pitch="-76" yaw="-90" position="-1.5,1,0.3" scale=0.6 />
           </attached>
-          <HsW01 mode=0 munitionpershot=0 delay=0.125 damage=3.14159 material="Flares/point_lensflare" muzzleoffset=" 0.1, 1.6,-2" />
-          <HsW01 mode=0 munitionpershot=0 delay=0     damage=3.14159 material="Flares/point_lensflare" muzzleoffset="-1.6, 1.3,-2" />
+          <HsW01 mode=0 munitionpershot=1 delay=0.125 damage=3.14159 material="Flares/point_lensflare" muzzleoffset=" 0.1, 1.6,-2" />
+          <HsW01 mode=0 munitionpershot=1 delay=0     damage=3.14159 material="Flares/point_lensflare" muzzleoffset="-1.6, 1.3,-2" />
           <LightningGun mode=1 munitionpershot=1 muzzleoffset="0,0,0" damage=3.14159 shielddamage=20 />
         </Weapon>
@@ -34,6 +34,6 @@
             <Model mesh="hs-w01_reduced.mesh" roll="90" pitch="-104" yaw="-90" position="0,1.3,0.3" scale=0.6 />
           </attached>
-          <HsW01 mode=0 munitionpershot=0 delay=0     damage=3.14159 material="Flares/point_lensflare" muzzleoffset=" 1.6, 1.3, -2.0" />
-          <HsW01 mode=0 munitionpershot=0 delay=0.125 damage=3.14159 material="Flares/point_lensflare" muzzleoffset="-0.1, 1.6, -2.0" />
+          <HsW01 mode=0 munitionpershot=1 delay=0     damage=3.14159 material="Flares/point_lensflare" muzzleoffset=" 1.6, 1.3, -2.0" />
+          <HsW01 mode=0 munitionpershot=1 delay=0.125 damage=3.14159 material="Flares/point_lensflare" muzzleoffset="-0.1, 1.6, -2.0" />
           <LightningGun mode=1 munitionpershot=1 muzzleoffset="0,0,0" damage=23 />
         </Weapon>
Index: /code/branches/fabienHS15/data/levels/includes/weaponSettingsAssff2.oxi
===================================================================
--- /code/branches/fabienHS15/data/levels/includes/weaponSettingsAssff2.oxi	(revision 10687)
+++ /code/branches/fabienHS15/data/levels/includes/weaponSettingsAssff2.oxi	(revision 10688)
@@ -23,6 +23,6 @@
             <BlinkingBillboard position="-1.9, -.5, -5.5" material="PE/lensflare" colour="0.128, 0.28, 1" amplitude=0.25 frequency=16 quadratic=0 />
           </attached>
-          <HsW01 mode=0 munitionpershot=0 delay=0.125 healthamage=3.14159 material="Flares/point_lensflare" muzzleoffset="-1.6,1.3,-2.0" />
-          <HsW01 mode=0 munitionpershot=0 delay=0 healthdamage=3.14159 material="Flares/point_lensflare" muzzleoffset="-1.6,1.3,-2.0" />
+          <HsW01 mode=0 munitionpershot=1 delay=0.125 healthamage=3.14159 material="Flares/point_lensflare" muzzleoffset="-1.6,1.3,-2.0" />
+          <HsW01 mode=0 munitionpershot=1 delay=0 healthdamage=3.14159 material="Flares/point_lensflare" muzzleoffset="-1.6,1.3,-2.0" />
           <LightningGun mode=1 munitionpershot=1 muzzleoffset="0,0,0" shielddamage=23 />
         </Weapon>
@@ -32,6 +32,6 @@
             <BlinkingBillboard position="1.9, -.5, -5.5" material="PE/lensflare" colour="0.128, 0.28, 1" amplitude=0.25 frequency=16 quadratic=0 />
           </attached>
-          <HsW01 mode=0 munitionpershot=0 delay=0 healthdamage=3.14159 material="Flares/point_lensflare" muzzleoffset=" 1.6,1.3,-2.0" />
-          <HsW01 mode=0 munitionpershot=0 delay=0.125 healthdamage=3.14159 material="Flares/point_lensflare" muzzleoffset="-0.1,1.6,-2.0" />
+          <HsW01 mode=0 munitionpershot=1 delay=0 healthdamage=3.14159 material="Flares/point_lensflare" muzzleoffset=" 1.6,1.3,-2.0" />
+          <HsW01 mode=0 munitionpershot=1 delay=0.125 healthdamage=3.14159 material="Flares/point_lensflare" muzzleoffset="-0.1,1.6,-2.0" />
           <LightningGun mode=1 munitionpershot=1 muzzleoffset="0,0,0" shielddamage=23 />
         </Weapon>
Index: /code/branches/fabienHS15/data/levels/includes/weaponSettingsSwallow.oxi
===================================================================
--- /code/branches/fabienHS15/data/levels/includes/weaponSettingsSwallow.oxi	(revision 10687)
+++ /code/branches/fabienHS15/data/levels/includes/weaponSettingsSwallow.oxi	(revision 10688)
@@ -2,4 +2,5 @@
       <WeaponSlot position=" 8,1.66,-17.5" />
       <WeaponSlot position="-8,1.66,-17.5" />
+      <WeaponSlot position="0,1.66,-17.5" />
     </weaponslots>
     <weaponsets>
@@ -14,9 +15,11 @@
         </links>
         <Weapon>
-          <SplitGun mode=0 munitionpershot=0 damage=6.0 muzzleoffset="0.5,0.6,1.7" splittime=0.2 numberofsplits=2 numberofchilds=3 spread=0.1 damagereduction=2.0 />
+          <SplitGun mode=0 munitionpershot=1 damage=6.0 muzzleoffset="0.5,0.6,1.7" splittime=0.2 numberofsplits=2 numberofchilds=3 spread=0.1 damagereduction=2.0 />
+          <LaserFire mode=1 munitionpershot=0 damage=10.0 muzzleoffset="0.5,0.6,1.7" />
         </Weapon>
         <Weapon>
-          <SplitGun mode=0 munitionpershot=0 damage=6.0 muzzleoffset="-0.5,0.6,1.7" splittime=0.2 numberofsplits=2 numberofchilds=3 spread=0.1 damagereduction=2.0 />
-        </Weapon>
+          <SplitGun mode=0 munitionpershot=1 damage=6.0 muzzleoffset="-0.5,0.6,1.7" splittime=0.2 numberofsplits=2 numberofchilds=3 spread=0.1 damagereduction=2.0 />
+          <LaserFire mode=1 munitionpershot=0 damage=10.0 muzzleoffset="-0.5,0.6,1.7" />
+        </Weapon>       
       </WeaponPack>
     </weapons>
Index: /code/branches/fabienHS15/data/overlays/HUDTemplates3.oxo
===================================================================
--- /code/branches/fabienHS15/data/overlays/HUDTemplates3.oxo	(revision 10687)
+++ /code/branches/fabienHS15/data/overlays/HUDTemplates3.oxo	(revision 10688)
@@ -127,4 +127,13 @@
      mapAngle3D   			= 0.6435011
     />
+
+    <HUDWeaponSystem
+     name                   = "WeaponSystem"
+     correctaspect          = false
+     size                   = "0.6, 0.1"
+     position               = "0.0, 0.0"
+     pickpoint              = "0, 0"
+     visible                = "true"
+    />
     
     <HUDTimer
Index: /code/branches/fabienHS15/src/modules/overlays/hud/CMakeLists.txt
===================================================================
--- /code/branches/fabienHS15/src/modules/overlays/hud/CMakeLists.txt	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/overlays/hud/CMakeLists.txt	(revision 10688)
@@ -8,4 +8,7 @@
   HUDTimer.cc
   HUDEnemyHealthBar.cc
+  HUDWeaponMode.cc
+  HUDWeapon.cc
+  HUDWeaponSystem.cc
   ChatOverlay.cc
   AnnounceMessage.cc
Index: /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.cc	(revision 10688)
+++ /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.cc	(revision 10688)
@@ -0,0 +1,186 @@
+/*
+ *   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:
+ *      Yuning Chai
+ *      Felix Schulthess
+ *   Co-authors:
+ *      Reto Grieder
+ *      Wolfgang Roenninger
+ *
+ */
+
+#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"
+
+namespace orxonox
+{
+    RegisterClass(HUDWeapon);
+
+    HUDWeapon::HUDWeapon(Context* context) : OrxonoxOverlay(context)
+    {
+        RegisterObject(HUDWeapon);
+
+        overlayElement_ = static_cast<Ogre::PanelOverlayElement* >(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "HUDWeapon" + getUniqueNumberString()));
+        overlayElement_->setMaterialName("Orxonox/WSHUD_Weapon");
+        overlayElement_->setPosition(0.0f,0.0f);
+        overlayElement_->setDimensions(1.0f,1.0f);
+        this->background_->addChild(overlayElement_);
+    }
+
+    HUDWeapon::~HUDWeapon()
+    {
+        if (this->isInitialized())
+        {
+            destroyHUDChilds();
+            //this->overlayElement_->destroy();            
+        }
+    }
+
+    void HUDWeapon::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(HUDWeapon, XMLPort, xmlelement, mode);
+
+        /*XMLPortParam(HUDWeapons, "sensitivity", setRadarSensitivity, getRadarSensitivity, xmlelement, mode);
+        XMLPortParam(HUDWeapons, "halfDotSizeDistance", setHalfDotSizeDistance, getHalfDotSizeDistance, xmlelement, mode);*/
+    }
+
+    void HUDWeapon::tick(float dt)
+    {
+        SUPER(HUDWeapon, tick, dt);
+
+        if (this->owner_)
+        {
+
+        }
+    }    
+
+    void HUDWeapon::positionChanged()
+    {
+        OrxonoxOverlay::positionChanged();
+
+        positionHUDChilds();
+    }     
+
+    void HUDWeapon::changedOwner()
+    {
+        SUPER(HUDWeapon, changedOwner);
+
+        this->owner_ = orxonox_cast<Pawn*>(this->getOwner());
+
+        updateWeaponModeList();
+    }
+
+    void HUDWeapon::changedOverlayGroup()
+    {
+        SUPER(HUDWeapon, changedOverlayGroup);
+
+        //this->getOverlayGroup()->addElement(this->textOverlay_.get());
+    }   
+
+    void HUDWeapon::changedVisibility()
+    {
+        SUPER(HUDWeapon, changedVisibility);
+
+        //this->textOverlay_->setVisible(this->isVisible());
+    }
+
+    void HUDWeapon::changedName()
+    {
+        SUPER(HUDWeapon, changedName);
+
+        //this->textOverlay_->setName(this->getName() + "text");
+    }
+
+    void HUDWeapon::setWeapon(Weapon* weapon)
+    {
+        weapon_ = weapon;
+
+        if (!weapon_)
+        {
+            return;
+        }
+
+        updateWeaponModeList();
+    }
+
+    void HUDWeapon::updateWeaponModeList()
+    {
+        if (owner_ == NULL || weapon_ == NULL)
+        {
+            return;
+        }
+            
+        destroyHUDChilds();
+
+        weaponModes_ = weapon_->getAllWeaponmodes();
+
+        createHUDChilds();
+        positionHUDChilds();        
+    }  
+
+    void HUDWeapon::createHUDChilds()
+    {
+        for (std::multimap<unsigned int, WeaponMode*>::iterator it = weaponModes_->begin(); it != weaponModes_->end(); ++it)
+        {
+            HUDWeaponMode* hudWeaponMode = new HUDWeaponMode(this->getContext());
+            hudWeaponMode->setOwner(owner_);
+            hudWeaponMode->setWeaponMode(it->second);
+            hudWeaponModes_.push_back(hudWeaponMode);
+        }    
+    }      
+
+    void HUDWeapon::positionHUDChilds()
+    {
+        int positionIndex = 0;
+
+        for (std::vector<WeakPtr<HUDWeaponMode> >::iterator it = hudWeaponModes_.begin(); it != hudWeaponModes_.end(); ++it)
+        {
+            (*it)->setOverlayGroup(this->getOverlayGroup());            
+            (*it)->setAspectCorrection(this->getAspectCorrection());
+            (*it)->setPosition(this->getPosition() + Vector2(0.0f,0.025f*positionIndex));
+            (*it)->setSize(Vector2(0.15f,0.025f));
+            (*it)->setPickPoint(Vector2(0.0f,0.0f));
+
+            ++ positionIndex;        
+        }
+
+        overlayElement_->setDimensions(1.0f,0.25f*hudWeaponModes_.size());
+    }  
+
+    void HUDWeapon::destroyHUDChilds()
+    {
+        for (std::vector<WeakPtr<HUDWeaponMode> >::iterator it = hudWeaponModes_.begin(); it != hudWeaponModes_.end(); ++it)
+        {
+            (*it)->destroy();
+        } 
+
+        hudWeaponModes_.clear();
+    }
+}
Index: /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.h
===================================================================
--- /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.h	(revision 10688)
+++ /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeapon.h	(revision 10688)
@@ -0,0 +1,87 @@
+/*
+ *   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:
+ *      ...
+ *
+ */
+
+#ifndef _HUDWeapon_H__
+#define _HUDWeapon_H__
+
+#include "overlays/OverlaysPrereqs.h"
+
+#include <map>
+#include <vector>
+#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"
+#include "weaponsystem/Weapon.h"
+#include "weaponsystem/WeaponMode.h"
+#include "HUDWeaponMode.h"
+
+namespace orxonox
+{
+    class _OverlaysExport HUDWeapon : public OrxonoxOverlay, public Tickable
+    {
+    public:
+        HUDWeapon(Context* context);
+        virtual ~HUDWeapon();
+
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+        virtual void tick(float dt);
+        virtual void changedOwner();
+        virtual void changedOverlayGroup();
+        virtual void changedVisibility();
+        virtual void changedName();
+        virtual void positionChanged(); 
+
+        virtual void setWeapon(Weapon* weapon);
+
+    private:
+        virtual void createHUDChilds();
+        virtual void positionHUDChilds();
+        virtual void destroyHUDChilds();        
+        virtual void updateWeaponModeList();
+
+        WeakPtr<Pawn> owner_;
+        WeakPtr<Weapon> weapon_;
+
+        std::multimap<unsigned int, WeaponMode*>* weaponModes_;
+        std::vector<WeakPtr<HUDWeaponMode> > hudWeaponModes_;
+
+        Ogre::PanelOverlayElement* overlayElement_;        
+    };
+}
+
+#endif /* _HUDWeapon_H__ */
Index: /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc	(revision 10688)
+++ /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc	(revision 10688)
@@ -0,0 +1,258 @@
+/*
+ *   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:
+ *      Yuning Chai
+ *      Felix Schulthess
+ *   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"
+
+namespace orxonox
+{
+    RegisterClass(HUDWeaponMode);
+
+    HUDWeaponMode::HUDWeaponMode(Context* context) : OrxonoxOverlay(context)
+    {
+        RegisterObject(HUDWeaponMode);
+
+        overlayElementIcon_ = static_cast<Ogre::PanelOverlayElement* >(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "HUDWeaponMode" + getUniqueNumberString()));
+        overlayElementIcon_->setPosition(0.0f,0.0f);
+        overlayElementIcon_->setDimensions(1.0f,1.0f);
+        this->background_->addChild(overlayElementIcon_);
+
+        overlayElementReplenish_ = static_cast<Ogre::PanelOverlayElement* >(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "HUDWeaponMode" + getUniqueNumberString()));
+        overlayElementReplenish_->setPosition(0.0f,0.0f);
+        overlayElementReplenish_->setDimensions(1.0f,1.0f);
+        this->background_->addChild(overlayElementReplenish_);
+
+        overlayElementMunition_ = static_cast<Ogre::PanelOverlayElement* >(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "HUDWeaponMode" + getUniqueNumberString()));
+        overlayElementMunition_->setPosition(0.0f,0.0f);
+        overlayElementMunition_->setDimensions(1.0f,1.0f);
+        this->background_->addChild(overlayElementMunition_);
+
+        overlayElementState_ = static_cast<Ogre::PanelOverlayElement* >(Ogre::OverlayManager::getSingleton().createOverlayElement("Panel", "HUDWeaponMode" + getUniqueNumberString()));
+        overlayElementState_->setPosition(0.0f,0.0f);
+        overlayElementState_->setDimensions(1.0f,1.0f);
+        this->background_->addChild(overlayElementState_);
+
+        overlayElementIcon_->show();
+        overlayElementReplenish_->show();
+        overlayElementMunition_->show();
+        overlayElementState_->show();
+
+        // Create two text overlays
+        this->textOverlayLeft_ = new OverlayText(this->getContext());
+        assert(this->textOverlayLeft_.get());
+        this->textOverlayLeft_->setCaption("???");
+        textOverlayLeft_->setPickPoint(Vector2(0.0f,0.0f));
+        textOverlayLeft_->setVisible(true);
+        textOverlayLeft_->setAlignment(OverlayText::Left);
+        textOverlayLeft_->setTextSize(0.02f);
+        textOverlayLeft_->setColour(ColourValue(0.21,0.70,0.21,1.0));
+        textOverlayLeft_->setPosition(getPosition());
+        textOverlayLeft_->setAspectCorrection(this->getAspectCorrection());
+        
+        this->textOverlayRight_ = new OverlayText(this->getContext());
+        assert(this->textOverlayLeft_.get());
+        this->textOverlayRight_->setCaption("???");
+        textOverlayRight_->setPickPoint(Vector2(0.0f,0.0f));
+        textOverlayRight_->setVisible(true);
+        textOverlayRight_->setAlignment(OverlayText::Left);
+        textOverlayRight_->setTextSize(0.02f);
+        textOverlayRight_->setColour(ColourValue(0.21,0.70,0.21,1.0));
+        textOverlayRight_->setPosition(getPosition());
+        textOverlayRight_->setAspectCorrection(this->getAspectCorrection());        
+
+        materialNameState_ = "Orxonox/WSHUD_Reloading";
+
+        overlayElementReplenish_->setMaterialName("Orxonox/WSHUD_Replenish");
+    }
+
+    HUDWeaponMode::~HUDWeaponMode()
+    {
+        if (this->isInitialized())
+        {
+            //this->textOverlay_->destroy();            
+        }
+    }
+
+    void HUDWeaponMode::tick(float dt)
+    {
+        SUPER(HUDWeaponMode, tick, dt);
+
+        if (this->owner_ && this->weaponMode_)
+        {
+            std::string lastMaterialNameState = materialNameState_;
+
+            if (weaponMode_->getReloading())
+            {
+                materialNameState_ = "Orxonox/WSHUD_Reloading";
+            }
+            else
+            {
+                materialNameState_ = "Orxonox/WSHUD_Ready";
+            }            
+
+            Munition* munition = this->weaponMode_->getMunition();
+
+            if (munition != NULL)
+            {
+                bool useSeparateMagazines = munition->getUseSeparateMagazines();
+                bool stackMunition = munition->getStackMunition();
+
+                if (!useSeparateMagazines && !stackMunition)
+                {
+                    this->textOverlayLeft_->setCaption(multi_cast<std::string>(munition->getNumMunitionInCurrentMagazine(weaponMode_)));
+                    this->textOverlayRight_->setCaption(multi_cast<std::string>(munition->getNumMagazines()));
+                }
+                else if (!useSeparateMagazines && stackMunition)
+                {
+                    this->textOverlayLeft_->setCaption(multi_cast<std::string>(munition->getNumMunition(weaponMode_)));
+                    this->textOverlayRight_->setCaption("");
+                }
+                else if (useSeparateMagazines && !stackMunition)
+                {
+                    this->textOverlayLeft_->setCaption(multi_cast<std::string>(munition->getNumMunitionInCurrentMagazine(weaponMode_)));
+                    this->textOverlayRight_->setCaption(multi_cast<std::string>(munition->getNumMagazines()));
+                }
+
+                if (munition->getNumMunition(weaponMode_) == 0)
+                {
+                    materialNameState_ = "Orxonox/WSHUD_Empty";
+                }
+            }
+
+            if (munition->isA(Class(ReplenishingMunition)))
+            {
+                ReplenishingMunition* replenishingMunition = dynamic_cast<ReplenishingMunition*>(munition);
+
+                if (replenishingMunition->canAddMunition(1))
+                {
+                    float progress = 1.0f - replenishingMunition->getProgress();
+                    overlayElementReplenish_->setDimensions(1.0f,progress);                    
+                }
+                else
+                {
+                    overlayElementReplenish_->setDimensions(1.0f,1.0f);
+                }
+            }
+
+            if (materialNameState_ != lastMaterialNameState)
+            {
+                overlayElementState_->setMaterialName(materialNameState_);
+            }
+        }
+    }    
+
+    void HUDWeaponMode::positionChanged()
+    {
+        OrxonoxOverlay::positionChanged();
+
+        positionHUDChilds();
+    }    
+
+    void HUDWeaponMode::changedOwner()
+    {
+        SUPER(HUDWeaponMode, changedOwner);
+
+        this->owner_ = orxonox_cast<Pawn*>(this->getOwner());
+
+        //updateWeaponsList();
+    }
+
+    void HUDWeaponMode::changedOverlayGroup()
+    {
+        SUPER(HUDWeaponMode, changedOverlayGroup);
+
+        this->getOverlayGroup()->addElement(this->textOverlayLeft_.get());
+        this->getOverlayGroup()->addElement(this->textOverlayRight_.get());
+    }   
+
+    void HUDWeaponMode::changedVisibility()
+    {
+        SUPER(HUDWeaponMode, changedVisibility);
+
+        //this->textOverlay_->setVisible(this->isVisible());
+    }
+
+    void HUDWeaponMode::changedName()
+    {
+        SUPER(HUDWeaponMode, changedName);
+
+        //this->textOverlay_->setName(this->getName() + "text");
+    }  
+
+    void HUDWeaponMode::setWeaponMode(WeaponMode* weaponMode)
+    {
+        weaponMode_ = weaponMode;
+
+        if (!weaponMode_)
+        {
+            return;
+        }
+
+        std::string materialName = weaponMode_->getHUDImageString();
+
+        overlayElementIcon_->setMaterialName(materialName);
+
+        Munition* munition = this->weaponMode_->getMunition();
+
+        if (munition != NULL)
+        {
+            bool useSeparateMagazines = munition->getUseSeparateMagazines();
+            bool stackMunition = munition->getStackMunition();
+
+            if (!useSeparateMagazines && !stackMunition)
+            {
+                overlayElementMunition_->setMaterialName("Orxonox/WSHUD_MunitionShare");
+            }
+            else if (!useSeparateMagazines && stackMunition)
+            {
+                overlayElementMunition_->setMaterialName("Orxonox/WSHUD_MunitionStack");
+            }
+            else if (useSeparateMagazines && !stackMunition)
+            {
+                overlayElementMunition_->setMaterialName("Orxonox/WSHUD_MunitionSeparate");
+            }
+        }      
+    }
+
+    void HUDWeaponMode::positionHUDChilds()
+    {
+        textOverlayLeft_->setPosition(getPosition() + Vector2(0.06f,0.0f));
+        textOverlayRight_->setPosition(getPosition() + Vector2(0.105f,0.0f));
+    }  
+}
Index: /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.h
===================================================================
--- /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.h	(revision 10688)
+++ /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.h	(revision 10688)
@@ -0,0 +1,86 @@
+/*
+ *   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:
+ *      ...
+ *
+ */
+
+#ifndef _HUDWeaponMode_H__
+#define _HUDWeaponMode_H__
+
+#include "overlays/OverlaysPrereqs.h"
+
+#include <map>
+#include <vector>
+#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"
+#include "weaponsystem/ReplenishingMunition.h"
+
+namespace orxonox
+{
+    class _OverlaysExport HUDWeaponMode : public OrxonoxOverlay, public Tickable
+    {
+    public:
+        HUDWeaponMode(Context* context);
+        virtual ~HUDWeaponMode();
+
+        virtual void tick(float dt);
+        virtual void changedOwner();
+        virtual void changedOverlayGroup();
+        virtual void changedVisibility();
+        virtual void changedName();
+        virtual void positionChanged();
+
+        virtual void setWeaponMode(WeaponMode* weaponMode);
+
+    private:
+        virtual void positionHUDChilds();
+
+        WeakPtr<Pawn> owner_;
+        WeakPtr<WeaponMode> weaponMode_;
+
+        Ogre::PanelOverlayElement* overlayElementIcon_;
+        Ogre::PanelOverlayElement* overlayElementReplenish_;
+        Ogre::PanelOverlayElement* overlayElementMunition_;
+        Ogre::PanelOverlayElement* overlayElementState_;
+
+        std::string materialNameState_;
+
+        StrongPtr<OverlayText> textOverlayLeft_;
+        StrongPtr<OverlayText> textOverlayRight_;
+    };
+}
+
+#endif /* _HUDWeaponMode_H__ */
Index: /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.cc	(revision 10688)
+++ /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.cc	(revision 10688)
@@ -0,0 +1,183 @@
+/*
+ *   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:
+ *      Yuning Chai
+ *      Felix Schulthess
+ *   Co-authors:
+ *      Reto Grieder
+ *      Wolfgang Roenninger
+ *
+ */
+
+#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"
+#include "weaponsystem/Weapon.h"
+#include "util/Convert.h"
+#include "core/class/Super.h"
+
+namespace orxonox
+{
+    RegisterClass(HUDWeaponSystem);
+
+    HUDWeaponSystem::HUDWeaponSystem(Context* context) : OrxonoxOverlay(context)
+    {
+        RegisterObject(HUDWeaponSystem);
+
+        weapons_.clear();
+        hudWeapons_.clear();
+    }
+
+    HUDWeaponSystem::~HUDWeaponSystem()
+    {
+        if (this->isInitialized())
+        {
+            destroyHUDChilds();
+        }
+    }
+
+    void HUDWeaponSystem::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(HUDWeaponSystem, XMLPort, xmlelement, mode);
+
+        /*XMLPortParam(HUDWeaponSystem, "sensitivity", setRadarSensitivity, getRadarSensitivity, xmlelement, mode);
+        XMLPortParam(HUDWeaponSystem, "halfDotSizeDistance", setHalfDotSizeDistance, getHalfDotSizeDistance, xmlelement, mode);*/
+    }
+
+    void HUDWeaponSystem::tick(float dt)
+    {
+        SUPER(HUDWeaponSystem, tick, dt);
+
+        if (this->owner_)
+        {
+
+        }
+    }  
+
+    void HUDWeaponSystem::positionChanged()
+    {
+        OrxonoxOverlay::positionChanged();
+
+        positionHUDChilds();
+    }  
+
+    void HUDWeaponSystem::changedOwner()
+    {
+        SUPER(HUDWeaponSystem, changedOwner);
+
+        this->owner_ = orxonox_cast<Pawn*>(this->getOwner());
+
+        updateWeaponList();
+    }
+
+    void HUDWeaponSystem::changedOverlayGroup()
+    {
+        SUPER(HUDWeaponSystem, changedOverlayGroup);
+
+        //this->getOverlayGroup()->addElement(this->textOverlay_.get());
+    }   
+
+    void HUDWeaponSystem::changedVisibility()
+    {
+        SUPER(HUDWeaponSystem, changedVisibility);
+
+        //this->textOverlay_->setVisible(this->isVisible());
+    }
+
+    void HUDWeaponSystem::changedName()
+    {
+        SUPER(HUDWeaponSystem, changedName);
+
+        //this->textOverlay_->setName(this->getName() + "text");
+    }  
+
+    void HUDWeaponSystem::updateWeaponList()
+    {
+        if (owner_ == NULL)
+        {
+            return;
+        }
+
+        weapons_.clear();
+
+        destroyHUDChilds();
+
+        std::vector<WeaponPack*>* weaponPacks = owner_->getAllWeaponPacks();
+
+        for (std::vector<WeaponPack*>::const_iterator itPacks = weaponPacks->begin(); itPacks != weaponPacks->end(); ++itPacks)
+        {
+            std::vector<Weapon*>* weapons = (*itPacks)->getAllWeapons();
+
+            for (std::vector<Weapon*>::const_iterator itWeapons = weapons->begin(); itWeapons != weapons->end(); ++itWeapons)
+            {
+                this->weapons_.push_back(*itWeapons);
+            }
+        }
+
+        createHUDChilds();
+        positionHUDChilds();        
+    }
+
+    void HUDWeaponSystem::createHUDChilds()
+    {
+        for (std::vector<WeakPtr<Weapon> >::iterator it = weapons_.begin(); it != weapons_.end(); ++it)
+        {
+            HUDWeapon* hudWeapon = new HUDWeapon(this->getContext());            
+            hudWeapon->setOwner(owner_);
+            hudWeapon->setWeapon(*it);
+            hudWeapons_.push_back(hudWeapon);
+        }       
+    }      
+
+    void HUDWeaponSystem::positionHUDChilds()
+    {
+        int positionIndex = 0;
+
+        for (std::vector<WeakPtr<HUDWeapon> >::iterator it = hudWeapons_.begin(); it != hudWeapons_.end(); ++it)
+        {
+            (*it)->setOverlayGroup(this->getOverlayGroup());            
+            (*it)->setAspectCorrection(this->getAspectCorrection());
+            (*it)->setPosition(this->getPosition() + Vector2(0.15f*positionIndex,0.0f));            
+            (*it)->setSize(Vector2(0.15f,0.10f));
+            (*it)->setPickPoint(Vector2(0.0f,0.0f));
+
+            ++ positionIndex;
+        }        
+    }  
+
+    void HUDWeaponSystem::destroyHUDChilds()
+    {
+        for (std::vector<WeakPtr<HUDWeapon> >::iterator it = hudWeapons_.begin(); it != hudWeapons_.end(); ++it)
+        {
+            (*it)->destroy();
+        } 
+
+        hudWeapons_.clear();     
+    }     
+}
Index: /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.h
===================================================================
--- /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.h	(revision 10688)
+++ /code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponSystem.h	(revision 10688)
@@ -0,0 +1,80 @@
+/*
+ *   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:
+ *      ...
+ *
+ */
+
+#ifndef _HUDWeaponSystem_H__
+#define _HUDWeaponSystem_H__
+
+#include "overlays/OverlaysPrereqs.h"
+
+#include <map>
+#include <vector>
+#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"
+#include "HUDWeapon.h"
+
+namespace orxonox
+{
+    class _OverlaysExport HUDWeaponSystem : public OrxonoxOverlay, public Tickable
+    {
+    public:
+        HUDWeaponSystem(Context* context);
+        virtual ~HUDWeaponSystem();
+
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+        virtual void tick(float dt);
+        virtual void changedOwner();
+        virtual void changedOverlayGroup();
+        virtual void changedVisibility();
+        virtual void changedName();
+        virtual void positionChanged();     
+
+    private:
+        virtual void updateWeaponList();
+        virtual void createHUDChilds();
+        virtual void positionHUDChilds();
+        virtual void destroyHUDChilds();
+
+        WeakPtr<Pawn> owner_;
+
+        std::vector<WeakPtr<Weapon> > weapons_;
+        std::vector<WeakPtr<HUDWeapon> > hudWeapons_;
+    };
+}
+
+#endif /* _HUDWeaponSystem_H__ */
Index: /code/branches/fabienHS15/src/modules/weapons/munitions/CMakeLists.txt
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/CMakeLists.txt	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/munitions/CMakeLists.txt	(revision 10688)
@@ -1,5 +1,5 @@
 ADD_SOURCE_FILES(WEAPONS_SRC_FILES
-  ReplenishingMunition.cc
   LaserMunition.cc
+  LightningMunition.cc
   FusionMunition.cc
   RocketMunition.cc
Index: /code/branches/fabienHS15/src/modules/weapons/munitions/FusionMunition.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/FusionMunition.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/munitions/FusionMunition.cc	(revision 10688)
@@ -28,5 +28,5 @@
 
 /**
-    @file FusionMunition.h
+    @file FusionMunition.cc
     @brief Implementation of the FusionMunition class.
 */
@@ -47,10 +47,12 @@
         this->magazines_ = 10;
 
-        this->bUseSeparateMagazines_ = true;
-        this->bStackMunition_ = false;
+        this->deployment_ = DEPLOYMENT_SEPARATE;
+
         this->reloadTime_ = 1.0f;
 
         this->bAllowMunitionRefilling_ = true;
         this->bAllowMultiMunitionRemovementUnderflow_ = true;
+
+        this->reloadTime_ = 0.5f;
     }
 }
Index: /code/branches/fabienHS15/src/modules/weapons/munitions/GravityBombMunition.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/GravityBombMunition.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/munitions/GravityBombMunition.cc	(revision 10688)
@@ -19,9 +19,10 @@
         this->magazines_ = 15;
 
-        this->bUseSeparateMagazines_ = false;
-        this->bStackMunition_ = true;
+        this->deployment_ = DEPLOYMENT_STACK;
 
         this->bAllowMunitionRefilling_ = true;
         this->bAllowMultiMunitionRemovementUnderflow_ = false;
+
+        this->reloadTime_ = 0.0f;
     }
 
Index: /code/branches/fabienHS15/src/modules/weapons/munitions/IceMunition.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/IceMunition.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/munitions/IceMunition.cc	(revision 10688)
@@ -28,5 +28,5 @@
 
 /**
-    @file IceMunition.h
+    @file IceMunition.cc
     @brief Implementation of the IceMunition class.
 */
@@ -47,9 +47,10 @@
         this->magazines_ = 25;
 
-        this->bUseSeparateMagazines_ = false;
-        this->bStackMunition_ = true;
+        this->deployment_ = DEPLOYMENT_STACK;
 
         this->bAllowMunitionRefilling_ = false;
         this->bAllowMultiMunitionRemovementUnderflow_ = false;
+
+        this->reloadTime_ = 0.5f;
     }
 }
Index: /code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.cc	(revision 10688)
@@ -28,5 +28,5 @@
 
 /**
-    @file LaserMunition.h
+    @file LaserMunition.cc
     @brief Implementation of the LaserMunition class.
 */
@@ -43,10 +43,9 @@
         RegisterObject(LaserMunition);
 
-        this->maxMunitionPerMagazine_ = 20;
-        this->maxMagazines_ = 1;
-        this->magazines_ = 1;
+        this->maxMunitionPerMagazine_ = 10;
+        this->maxMagazines_ = 10;
+        this->magazines_ = 10;
 
-        this->bUseSeparateMagazines_ = false;
-        this->bStackMunition_ = true;
+        this->deployment_ = DEPLOYMENT_SEPARATE;
 
         this->bAllowMunitionRefilling_ = true;
@@ -55,4 +54,6 @@
         this->replenishInterval_ = 0.5f;
         this->replenishMunitionAmount_ = 1;
+
+        this->reloadTime_ = 0.8f;
     }
 }
Index: /code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.h
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.h	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.h	(revision 10688)
@@ -36,5 +36,5 @@
 
 #include "weapons/WeaponsPrereqs.h"
-#include "ReplenishingMunition.h"
+#include "weaponsystem/ReplenishingMunition.h"
 
 namespace orxonox
Index: /code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.cc	(revision 10688)
+++ /code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.cc	(revision 10688)
@@ -0,0 +1,56 @@
+/*
+ *   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 LightningMunition.cc
+    @brief Implementation of the LightningMunition class.
+*/
+
+#include "LightningMunition.h"
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+    RegisterClass(LightningMunition);
+
+    LightningMunition::LightningMunition(Context* context) : Munition(context)
+    {
+        RegisterObject(LightningMunition);
+
+        this->maxMunitionPerMagazine_ = 20;
+        this->maxMagazines_ = 1;
+        this->magazines_ = 1;
+
+        this->deployment_ = DEPLOYMENT_SHARE;
+
+        this->bAllowMunitionRefilling_ = true;
+        this->bAllowMultiMunitionRemovementUnderflow_ = true;
+
+        this->reloadTime_ = 0.5f;    
+    }
+}
Index: /code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.h
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.h	(revision 10688)
+++ /code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.h	(revision 10688)
@@ -0,0 +1,58 @@
+/*
+ *   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 LightningMunition.h
+    @brief Definition of the LightningMunition class.
+*/
+
+#ifndef _LightningMunition_H__
+#define _LightningMunition_H__
+
+#include "weapons/WeaponsPrereqs.h"
+#include "weaponsystem/Munition.h"
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        LightningMunition.
+    @author
+        Fabien Vultier
+    @ingroup WeaponsMunitions
+    */
+    class _WeaponsExport LightningMunition : public Munition
+    {
+        public:
+            LightningMunition(Context* context);
+            virtual ~LightningMunition() {}
+    };
+}
+
+#endif /* _LightningMunition_H__ */
Index: de/branches/fabienHS15/src/modules/weapons/munitions/ReplenishingMunition.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/ReplenishingMunition.cc	(revision 10687)
+++ 	(revision )
@@ -1,75 +1,0 @@
-/*
- *   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:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-/**
-    @file ReplenishingMunition.h
-    @brief Implementation of the ReplenishingMunition class.
-*/
-
-#include "ReplenishingMunition.h"
-
-#include "core/CoreIncludes.h"
-#include "core/command/Executor.h"
-
-namespace orxonox
-{
-    RegisterClass(ReplenishingMunition);
-
-    ReplenishingMunition::ReplenishingMunition(Context* context) : Munition(context)
-    {
-        RegisterObject(ReplenishingMunition);
-
-        this->replenishInterval_ = 1.0f;
-        this->replenishMunitionAmount_ = 1;
-
-        // Use the timer to initialize itself after the first tick (because the real values for
-        // replenishIntervall_ and replenishMunitionAmount_ will be set in the constructor of the
-        // inheriting class, which comes after this constructor)
-        this->replenishingTimer_.setTimer(0.0f, false, createExecutor(createFunctor(&ReplenishingMunition::initializeTimer, this)));
-    }
-
-    void ReplenishingMunition::initializeTimer()
-    {
-        // Initialize the timer
-        this->replenishingTimer_.setTimer(this->replenishInterval_, true, createExecutor(createFunctor(&ReplenishingMunition::replenish, this)));
-    }
-
-    void ReplenishingMunition::replenish()
-    {
-        // Make a temporary copy of bAllowMunitionRefilling_, because this might be disallowed in every
-        // case except the internal munition replenishing
-        bool temp = this->bAllowMunitionRefilling_;
-        this->bAllowMunitionRefilling_ = true;
-
-        // Replenish munition
-        this->addMunition(this->replenishMunitionAmount_);
-
-        // Write back the temporary value
-        this->bAllowMunitionRefilling_ = temp;
-    }
-}
Index: de/branches/fabienHS15/src/modules/weapons/munitions/ReplenishingMunition.h
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/ReplenishingMunition.h	(revision 10687)
+++ 	(revision )
@@ -1,70 +1,0 @@
-/*
- *   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:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-/**
-    @file ReplenishingMunition.h
-    @brief Definition of the ReplenishingMunition class.
-*/
-
-#ifndef _ReplenishingMunition_H__
-#define _ReplenishingMunition_H__
-
-#include "weapons/WeaponsPrereqs.h"
-
-#include "tools/Timer.h"
-#include "weaponsystem/Munition.h"
-
-namespace orxonox
-{
-
-    /**
-    @brief
-        Munition that is replenished by a certain amount each time interval.
-    @author
-        Fabian 'x3n' Landau
-    @ingroup WeaponsMunitions
-    */
-    class _WeaponsExport ReplenishingMunition : public Munition
-    {
-        public:
-            ReplenishingMunition(Context* context);
-            virtual ~ReplenishingMunition() {}
-
-        protected:
-            float replenishInterval_; //!< The interval in which the munition is replenished.
-            unsigned int replenishMunitionAmount_; //!< The amount by which it is replenished.
-
-        private:
-            void replenish();
-            void initializeTimer();
-
-            Timer replenishingTimer_; //!< Timer to do the replenishing.
-    };
-}
-
-#endif /* _ReplenishingMunition_H__ */
Index: /code/branches/fabienHS15/src/modules/weapons/munitions/RocketMunition.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/RocketMunition.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/munitions/RocketMunition.cc	(revision 10688)
@@ -28,5 +28,5 @@
 
 /**
-    @file RocketMunition.h
+    @file RocketMunition.cc
     @brief Implementation of the RocketMunition class.
 */
@@ -47,9 +47,10 @@
         this->magazines_ = 10;
 
-        this->bUseSeparateMagazines_ = false;
-        this->bStackMunition_ = true;
+        this->deployment_ = DEPLOYMENT_STACK;
 
         this->bAllowMunitionRefilling_ = false;
         this->bAllowMultiMunitionRemovementUnderflow_ = false;
+
+        this->reloadTime_ = 0.5f;
     }
 }
Index: /code/branches/fabienHS15/src/modules/weapons/munitions/SplitMunition.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/munitions/SplitMunition.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/munitions/SplitMunition.cc	(revision 10688)
@@ -28,5 +28,5 @@
 
 /**
-    @file SplitMunition.h
+    @file SplitMunition.cc
     @brief Implementation of the SplitMunition class.
 */
@@ -47,9 +47,10 @@
         this->magazines_ = 25;
 
-        this->bUseSeparateMagazines_ = false;
-        this->bStackMunition_ = true;
+        this->deployment_ = DEPLOYMENT_STACK;
 
         this->bAllowMunitionRefilling_ = true;
         this->bAllowMultiMunitionRemovementUnderflow_ = false;
+
+        this->reloadTime_ = 0.5f;
     }
 }
Index: /code/branches/fabienHS15/src/modules/weapons/projectiles/GravityBombField.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/projectiles/GravityBombField.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/projectiles/GravityBombField.cc	(revision 10688)
@@ -164,5 +164,4 @@
         if (lifetime_ <= -4)
         {
-            orxout(debug_output) << "Timeout. Destroying field." << endl;
             this->destroy();
         }
Index: /code/branches/fabienHS15/src/modules/weapons/weaponmodes/EnergyDrink.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/weaponmodes/EnergyDrink.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/weaponmodes/EnergyDrink.cc	(revision 10688)
@@ -63,4 +63,6 @@
         this->delayTimer_.setTimer(1.0f, false, createExecutor(createFunctor(&EnergyDrink::shot, this)));
         this->delayTimer_.stopTimer();
+
+        hudImageString_ = "Orxonox/WSHUD_WM_EnergyDrink";
     }
 
Index: /code/branches/fabienHS15/src/modules/weapons/weaponmodes/FusionFire.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/weaponmodes/FusionFire.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/weaponmodes/FusionFire.cc	(revision 10688)
@@ -58,4 +58,6 @@
 
         this->setMunitionName("FusionMunition");
+
+        hudImageString_ = "Orxonox/WSHUD_WM_FusionFire";
     }
 
Index: /code/branches/fabienHS15/src/modules/weapons/weaponmodes/GravityBombFire.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/weaponmodes/GravityBombFire.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/weaponmodes/GravityBombFire.cc	(revision 10688)
@@ -31,4 +31,6 @@
         this->setMunitionName("GravityBombMunition");
         this->setDefaultSoundWithVolume("sounds/Rocket_launch.ogg",0.8);    ///< sets sound of the bomb as it is fired.
+
+        hudImageString_ = "Orxonox/WSHUD_WM_GravityBombFire";
     }
 
Index: /code/branches/fabienHS15/src/modules/weapons/weaponmodes/HsW01.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/weaponmodes/HsW01.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/weaponmodes/HsW01.cc	(revision 10688)
@@ -69,4 +69,6 @@
 
         this->setDefaultSound(this->sound_);
+
+        hudImageString_ = "Orxonox/WSHUD_WM_HsW01";
     }
 
Index: /code/branches/fabienHS15/src/modules/weapons/weaponmodes/IceGun.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/weaponmodes/IceGun.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/weaponmodes/IceGun.cc	(revision 10688)
@@ -59,6 +59,8 @@
         this->setFreezeFactor(0.5);
 
-        this->setMunitionName("LaserMunition");
+        this->setMunitionName("IceMunition");
         this->setDefaultSound("sounds/Weapon_LightningGun.ogg");
+
+        hudImageString_ = "Orxonox/WSHUD_WM_IceGun";
     }
 
Index: /code/branches/fabienHS15/src/modules/weapons/weaponmodes/LaserFire.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/weaponmodes/LaserFire.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/weaponmodes/LaserFire.cc	(revision 10688)
@@ -56,4 +56,6 @@
 
         this->setMunitionName("LaserMunition");
+
+        hudImageString_ = "Orxonox/WSHUD_WM_LaserFire";
     }
 
Index: /code/branches/fabienHS15/src/modules/weapons/weaponmodes/LightningGun.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 10688)
@@ -54,6 +54,8 @@
         this->speed_ = 750.0f;
 
-        this->setMunitionName("LaserMunition");
+        this->setMunitionName("LightningMunition");
         this->setDefaultSound("sounds/Weapon_LightningGun.ogg");
+
+        hudImageString_ = "Orxonox/WSHUD_WM_LightningGun";
     }
 
Index: /code/branches/fabienHS15/src/modules/weapons/weaponmodes/RocketFire.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/weaponmodes/RocketFire.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/weaponmodes/RocketFire.cc	(revision 10688)
@@ -59,4 +59,6 @@
         this->setMunitionName("RocketMunition");
         // The firing sound of the Rocket is played in Rocket.cc (because of OpenAl sound positioning)
+
+        hudImageString_ = "Orxonox/WSHUD_WM_RocketFire";
     }
 
Index: /code/branches/fabienHS15/src/modules/weapons/weaponmodes/RocketFireOld.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/weaponmodes/RocketFireOld.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/weaponmodes/RocketFireOld.cc	(revision 10688)
@@ -59,4 +59,6 @@
         this->setMunitionName("RocketMunition");
         // The firing sound of the Rocket is played in Rocket.cc (because of OpenAl sound positioning)
+
+        hudImageString_ = "Orxonox/WSHUD_WM_SimpleRocketFire";
     }
 
Index: /code/branches/fabienHS15/src/modules/weapons/weaponmodes/SimpleRocketFire.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 10688)
@@ -64,4 +64,6 @@
         this->setDefaultSoundWithVolume("sounds/Rocket_launch.ogg",0.4f);
         // The firing sound of the Rocket is played in Rocket.cc (because of OpenAl sound positioning)
+
+        hudImageString_ = "Orxonox/WSHUD_WM_SimpleRocketFire";
     }
 
@@ -89,5 +91,6 @@
 
         WorldEntity* pawn = static_cast<ControllableEntity*>(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn())->getTarget();
-        if (pawn) controller->setTarget(pawn);
+        if (pawn)
+            controller->setTarget(pawn);
     }
 }
Index: /code/branches/fabienHS15/src/modules/weapons/weaponmodes/SplitGun.cc
===================================================================
--- /code/branches/fabienHS15/src/modules/weapons/weaponmodes/SplitGun.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/modules/weapons/weaponmodes/SplitGun.cc	(revision 10688)
@@ -62,4 +62,6 @@
         this->setMunitionName("SplitMunition");
         this->setDefaultSound("sounds/Weapon_LightningGun.ogg");
+
+        hudImageString_ = "Orxonox/WSHUD_WM_SplitGun";
     }
 
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/CMakeLists.txt
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/CMakeLists.txt	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/CMakeLists.txt	(revision 10688)
@@ -1,4 +1,5 @@
 ADD_SOURCE_FILES(ORXONOX_SRC_FILES
   Munition.cc
+  ReplenishingMunition.cc
   Weapon.cc
   WeaponMode.cc
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.cc
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.cc	(revision 10688)
@@ -45,10 +45,9 @@
         this->magazines_ = 10;
 
-        this->bUseSeparateMagazines_ = false;
-        this->bStackMunition_ = true;
+        this->deployment_ = DEPLOYMENT_STACK;
         this->bAllowMunitionRefilling_ = true;
         this->bAllowMultiMunitionRemovementUnderflow_ = true;
 
-        this->reloadTime_ = 0;
+        this->reloadTime_ = 0.5f;
     }
 
@@ -61,5 +60,5 @@
     Munition::Magazine* Munition::getMagazine(WeaponMode* user) const
     {
-        if (this->bUseSeparateMagazines_)
+        if (deployment_ == DEPLOYMENT_SEPARATE)
         {
             // For separated magazines we definitively need a given user
@@ -87,5 +86,5 @@
         if (magazine)
         {
-            if (this->bStackMunition_)
+            if (deployment_ == DEPLOYMENT_STACK)
                 // With stacked munition every magazine contributes to the total amount
                 return this->maxMunitionPerMagazine_ * this->magazines_ + magazine->munition_;
@@ -109,5 +108,5 @@
     unsigned int Munition::getNumMagazines() const
     {
-        if (this->bStackMunition_)
+        if (deployment_ == DEPLOYMENT_STACK)
         {
             // If we stack munition and the current magazine is still full, it counts too
@@ -122,5 +121,5 @@
     unsigned int Munition::getMaxMunition() const
     {
-        if (this->bStackMunition_)
+        if (deployment_ == DEPLOYMENT_STACK)
             return this->maxMunitionPerMagazine_ * this->maxMagazines_;
         else
@@ -135,6 +134,6 @@
             unsigned int munition = magazine->munition_;
 
-            // If we stack munition, we con't care about the current magazine - we just need enough munition in total
-            if (this->bStackMunition_)
+            // If we stack munition, we don't care about the current magazine - we just need enough munition in total
+            if (deployment_ == DEPLOYMENT_STACK)
                 munition += this->maxMunitionPerMagazine_ * this->magazines_;
 
@@ -169,5 +168,5 @@
             {
                 // Not enough munition
-                if (this->bStackMunition_)
+                if (deployment_ == DEPLOYMENT_STACK)
                 {
                     // We stack munition, so just take what we can and then load the next magazine
@@ -199,5 +198,5 @@
     {
         // As long as we have enough magazines (and don't stack munition) we can reload
-        return (this->magazines_ > 0 && !this->bStackMunition_);
+        return (this->magazines_ > 0 && !deployment_ == DEPLOYMENT_STACK);
     }
 
@@ -207,5 +206,5 @@
         if (magazine)
         {
-            if (this->bStackMunition_)
+            if (deployment_ == DEPLOYMENT_STACK)
                 // With stacked munition, we never have to reload
                 return false;
@@ -231,9 +230,9 @@
 
         // If we use separate magazines for each user, we definitively need a user given
-        if (this->bUseSeparateMagazines_ && !user)
+        if (deployment_ == DEPLOYMENT_SEPARATE && !user)
             return false;
 
         // If we don't use separate magazines, set user to 0
-        if (!this->bUseSeparateMagazines_)
+        if (!deployment_ == DEPLOYMENT_SEPARATE)
             user = 0;
 
@@ -260,5 +259,5 @@
             return false;
 
-        if (this->bStackMunition_)
+        if (deployment_ == DEPLOYMENT_STACK)
         {
             // If we stack munition, we can always add munition until we reach the limit
@@ -281,5 +280,5 @@
             return false;
 
-        if (this->bStackMunition_)
+        if (deployment_ == DEPLOYMENT_STACK)
         {
             // Stacking munition means, if a magazine gets full, the munition adds to a new magazine
@@ -340,5 +339,5 @@
         // TODO: 'amount' is not used
 
-        if (this->bStackMunition_)
+        if (deployment_ == DEPLOYMENT_STACK)
             // If we stack munition, we can always add new magazines because they contribute directly to the munition
             return (this->getNumMunition(0) < this->getMaxMunition());
@@ -357,5 +356,5 @@
 
         // If zero or less magazines are needed, we definitively don't need more magazines (unless we stack munition - then a magazine contributes directly to the munition)
-        if (needed_magazines <= 0 && !this->bStackMunition_)
+        if (needed_magazines <= 0 && !deployment_ == DEPLOYMENT_STACK)
             return false;
 
@@ -369,5 +368,5 @@
             // We get more magazines than we need, so just add the needed amount
             this->magazines_ += needed_magazines;
-            if (this->bStackMunition_)
+            if (deployment_ == DEPLOYMENT_STACK)
             {
                 // We stack munition, so the additional amount contributes directly to the munition of the current magazine
@@ -383,5 +382,5 @@
     bool Munition::canRemoveMagazines(unsigned int amount) const
     {
-        if (this->bStackMunition_)
+        if (deployment_ == DEPLOYMENT_STACK)
         {
             if (this->magazines_ >= amount)
@@ -422,5 +421,5 @@
             this->magazines_ -= amount;
         }
-        else if (this->bStackMunition_)
+        else if (deployment_ == DEPLOYMENT_STACK)
         {
             // We don't have enough magazines, but we're stacking munition, so additionally remove the bullets from the current magazine
@@ -437,9 +436,9 @@
     {
         // If we use separate magazines, we need a user
-        if (this->bUseSeparateMagazines_ && !user)
+        if (deployment_ == DEPLOYMENT_SEPARATE && !user)
             return false;
 
         // If we don't use separate magazines, set user to 0
-        if (!this->bUseSeparateMagazines_)
+        if (!deployment_ == DEPLOYMENT_SEPARATE)
             user = 0;
 
@@ -465,5 +464,5 @@
         this->bLoaded_ = false;
 
-        if (bUseReloadTime && munition->reloadTime_ > 0 && !munition->bStackMunition_)
+        if (bUseReloadTime && munition->reloadTime_ > 0 && !munition->deployment_ == DEPLOYMENT_STACK)
         {
             const ExecutorPtr& executor = createExecutor(createFunctor(&Magazine::loaded, this));
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.h
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.h	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.h	(revision 10688)
@@ -39,6 +39,14 @@
 namespace orxonox
 {
+    enum Deployment
+    {
+        DEPLOYMENT_SHARE,
+        DEPLOYMENT_STACK,
+        DEPLOYMENT_SEPARATE
+    };
+
+
     class _OrxonoxExport Munition : public BaseObject
-    {
+    {        
         struct Magazine
         {
@@ -68,4 +76,8 @@
             inline unsigned int getMaxMunitionPerMagazine() const
                 { return this->maxMunitionPerMagazine_; }
+            inline bool getUseSeparateMagazines() const
+                { return deployment_ == DEPLOYMENT_SEPARATE; }
+            inline bool getStackMunition() const
+                { return deployment_ == DEPLOYMENT_STACK; }
 
             bool canTakeMunition(unsigned int amount, WeaponMode* user) const;
@@ -95,6 +107,6 @@
             std::map<WeaponMode*, Magazine*> currentMagazines_;
 
-            bool bUseSeparateMagazines_;
-            bool bStackMunition_;
+            Deployment deployment_;
+
             bool bAllowMunitionRefilling_;
             bool bAllowMultiMunitionRemovementUnderflow_;
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.cc
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.cc	(revision 10688)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.cc	(revision 10688)
@@ -0,0 +1,83 @@
+/*
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file ReplenishingMunition.h
+    @brief Implementation of the ReplenishingMunition class.
+*/
+
+#include "ReplenishingMunition.h"
+
+#include "core/CoreIncludes.h"
+#include "core/command/Executor.h"
+
+namespace orxonox
+{
+    RegisterClass(ReplenishingMunition);
+
+    ReplenishingMunition::ReplenishingMunition(Context* context) : Munition(context)
+    {
+        RegisterObject(ReplenishingMunition);
+
+        this->replenishInterval_ = 1.0f;
+        this->replenishMunitionAmount_ = 1;
+
+        // Use the timer to initialize itself after the first tick (because the real values for
+        // replenishIntervall_ and replenishMunitionAmount_ will be set in the constructor of the
+        // inheriting class, which comes after this constructor)
+        this->replenishingTimer_.setTimer(0.0f, false, createExecutor(createFunctor(&ReplenishingMunition::initializeTimer, this)));
+    }
+
+    float ReplenishingMunition::getProgress()
+    {
+        return replenishingTimer_.getRemainingTime()/this->replenishInterval_;
+    }
+
+    void ReplenishingMunition::initializeTimer()
+    {
+        // Initialize the timer
+        this->replenishingTimer_.setTimer(this->replenishInterval_, true, createExecutor(createFunctor(&ReplenishingMunition::replenish, this)));
+    }
+
+    void ReplenishingMunition::replenish()
+    {
+        if (this->canAddMunition(this->replenishMunitionAmount_))
+        {
+            // Make a temporary copy of bAllowMunitionRefilling_, because this might be disallowed in every
+            // case except the internal munition replenishing
+            bool temp = this->bAllowMunitionRefilling_;
+            this->bAllowMunitionRefilling_ = true;
+
+            // Replenish munition
+            this->addMunition(this->replenishMunitionAmount_);
+
+            // Write back the temporary value
+            this->bAllowMunitionRefilling_ = temp;            
+        }
+    }
+}
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.h
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.h	(revision 10688)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.h	(revision 10688)
@@ -0,0 +1,71 @@
+/*
+ *   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:
+ *      Fabian 'x3n' Landau
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file ReplenishingMunition.h
+    @brief Definition of the ReplenishingMunition class.
+*/
+
+#ifndef _ReplenishingMunition_H__
+#define _ReplenishingMunition_H__
+
+#include "tools/Timer.h"
+#include "Munition.h"
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        Munition that is replenished by a certain amount each time interval.
+    @author
+        Fabian 'x3n' Landau
+    @ingroup WeaponsMunitions
+    */
+    class _OrxonoxExport ReplenishingMunition : public Munition
+    {
+        public:
+            ReplenishingMunition(Context* context);
+            virtual ~ReplenishingMunition() {}
+            virtual float getProgress();
+            inline float getReplenishingMunitionAmount() const
+                { return replenishMunitionAmount_; }
+
+        protected:                          
+            float replenishInterval_; //!< The interval in which the munition is replenished.
+            unsigned int replenishMunitionAmount_; //!< The amount by which it is replenished.
+
+        private:
+            void replenish();
+            void initializeTimer();
+
+            Timer replenishingTimer_; //!< Timer to do the replenishing.
+    };
+}
+
+#endif /* _ReplenishingMunition_H__ */
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.cc
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.cc	(revision 10688)
@@ -134,4 +134,8 @@
     }
 
+    /**
+    @brief
+        Reload all @ref orxonox::WeaponMode weapon modes of this weapon.
+    */
     void Weapon::reload()
     {
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.h
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.h	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.h	(revision 10688)
@@ -57,4 +57,8 @@
             void addWeaponmode(WeaponMode* weaponmode);
             WeaponMode* getWeaponmode(unsigned int index) const;
+            inline std::multimap<unsigned int, WeaponMode*>* getAllWeaponmodes()
+                { return &weaponmodes_; }
+            inline int getNumWeaponModes() const
+                { return weaponmodes_.size(); }
 
             /**
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.cc
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.cc	(revision 10688)
@@ -75,4 +75,6 @@
         this->muzzleOrientation_ = Quaternion::IDENTITY;
 
+        hudImageString_ = "WSHUD_WM_Unknown";
+
         if( GameMode::isMaster() )
         {
@@ -125,5 +127,6 @@
             this->bSoundAttached_ = true;
         }
-
+        
+        // Fireing is only possible if this weapon mode is not reloading and there is enough munition
         if (!this->bReloading_ && this->munition_ && this->munition_->takeMunition(this->munitionPerShot_, this))
         {
@@ -134,11 +137,19 @@
                 if (this->munition_->reload(this))
                 {
+                    // If true, the weapon reloads in parallel to the magazine reloading
                     if (this->bParallelReload_)
+                    {
+                        // The time needed to reload is the maximum of the reload time of the weapon mode and the magazine.
                         tempReloadtime = std::max(this->reloadTime_, this->munition_->getReloadTime());
+                    }                        
                     else
+                    {
+                        // The time needed to reload is the sum of the reload time of the weapon mode and the magazine.
                         tempReloadtime = this->reloadTime_ + this->munition_->getReloadTime();
+                    }                        
                 }
             }
 
+            // Mark this weapon mode as reloading and start the reload timer
             this->bReloading_ = true;
             this->reloadTimer_.setInterval(tempReloadtime);
@@ -283,6 +294,8 @@
     }
 
-    void WeaponMode::setDefaultSoundWithVolume(const std::string& soundPath, const float soundVolume){
-        if (this->defSndWpnFire_) {
+    void WeaponMode::setDefaultSoundWithVolume(const std::string& soundPath, const float soundVolume)
+    {
+        if (this->defSndWpnFire_)
+        {
             this->defSndWpnFire_->setSource(soundPath);
             this->defSndWpnFire_->setVolume(soundVolume);
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.h
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.h	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.h	(revision 10688)
@@ -38,4 +38,5 @@
 #include "core/class/SubclassIdentifier.h"
 #include "tools/Timer.h"
+#include "Munition.h"
 
 namespace orxonox
@@ -104,4 +105,6 @@
             inline bool getParallelReload() const
                 { return this->bParallelReload_; }
+            inline bool getReloading() const
+                { return this->bReloading_; }
 
 
@@ -147,4 +150,7 @@
             Vector3 getTarget();
 
+            inline const std::string& getHUDImageString() const
+                { return this->hudImageString_; }            
+
         protected:
             virtual void fire() = 0;
@@ -155,6 +161,6 @@
 
             float reloadTime_;
-            bool bAutoReload_;
-            bool bParallelReload_;
+            bool bAutoReload_; // If true, the weapon reloads the magazine automatically.
+            bool bParallelReload_; // If true, the weapon reloads in parallel to the magazine reloading.
 
             float damage_;
@@ -162,4 +168,6 @@
             float shielddamage_;
             Vector3 muzzleOffset_;
+
+            std::string hudImageString_;
 
         private:
@@ -175,5 +183,5 @@
 
             Timer reloadTimer_;
-            bool bReloading_;
+            bool bReloading_; // If true, this weapon mode is marked as reloading.
 
             Vector3 muzzlePosition_;
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.cc
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.cc	(revision 10688)
@@ -124,4 +124,9 @@
     }
 
+    std::vector<Weapon*>* WeaponPack::getAllWeapons()
+    {
+        return &weapons_;        
+    }    
+
     void WeaponPack::addDefaultWeaponmodeLink(DefaultWeaponmodeLink* link)
     {
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.h
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.h	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.h	(revision 10688)
@@ -52,4 +52,5 @@
             void removeWeapon(Weapon * weapon);
             Weapon * getWeapon(unsigned int index) const;
+            std::vector<Weapon*>* getAllWeapons();
 
             inline size_t getNumWeapons() const
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.cc
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.cc	(revision 10688)
@@ -240,4 +240,9 @@
     }
 
+    std::vector<WeaponPack *> * WeaponSystem::getAllWeaponPacks()
+    {
+        return &weaponPacks_;
+    }    
+
     bool WeaponSystem::swapWeaponSlots(WeaponSlot * wSlot1, WeaponSlot * wSlot2)
     {
Index: /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.h
===================================================================
--- /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.h	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.h	(revision 10688)
@@ -67,4 +67,5 @@
             void removeWeaponPack(WeaponPack * wPack);
             WeaponPack * getWeaponPack(unsigned int index) const;
+            std::vector<WeaponPack *> * getAllWeaponPacks();
 
             // configure slots and firemodes
Index: /code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- /code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.cc	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.cc	(revision 10688)
@@ -554,4 +554,12 @@
     }
 
+    std::vector<WeaponPack *> * Pawn::getAllWeaponPacks()
+    {
+        if (this->weaponSystem_)
+            return this->weaponSystem_->getAllWeaponPacks();
+        else
+            return 0;        
+    }    
+
     //Tell the Map (RadarViewable), if this is a playership
     void Pawn::startLocalHumanControl()
Index: /code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.h
===================================================================
--- /code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.h	(revision 10687)
+++ /code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.h	(revision 10688)
@@ -154,4 +154,5 @@
             void addWeaponPackXML(WeaponPack * wPack);
             WeaponPack * getWeaponPack(unsigned int index) const;
+            std::vector<WeaponPack *> * getAllWeaponPacks();
 
             virtual void addedWeaponPack(WeaponPack* wPack) {}
