Index: code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.cc
===================================================================
--- code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.cc	(revision 11185)
+++ code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.cc	(revision 11189)
@@ -31,5 +31,4 @@
 #include "util/Convert.h"
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 #include "worldentities/pawns/Pawn.h"
 #include "overlays/OverlayGroup.h"
@@ -45,46 +44,8 @@
 
         this->owner_ = nullptr;
-        this->bUseBarColour_ = false;
-        this->textOffset_ = Vector2(0.0f, 0.0f);
-        this->textScale_ = 1.0f;
-        this->correspondingMode_ = nullptr;
-
-        this->setIconPosition(Vector2(0.05f,0.5f));
-        this->setIconDimensions(Vector2(0.1f,0.5f));
-
-        this->textoverlay_ = new OverlayText(this->getContext());
-
-        assert(this->textoverlay_.get());
-
-        this->textoverlay_->setCaption("");
-        this->textoverlay_->setAspectCorrection(false);
-
-        positionText();
+        this->correspondingMode_ = nullptr;             // usually no chargeable weapon equipped
     }
 
-    HUDChargeBar::~HUDChargeBar()
-    {
-        if (this->isInitialized())
-        {
-            this->textoverlay_->destroy();
-            this->textoverlay_ = nullptr;
-        }
-    }
-
-    void HUDChargeBar::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(HUDChargeBar, XMLPort, xmlelement, mode);
-
-        XMLPortParam(HUDChargeBar, "showtext",          setTextVisible,          getTextVisible,          xmlelement, mode).defaultValues(true);
-        XMLPortParam(HUDChargeBar, "textfont",          setTextFont,             getTextFont,             xmlelement, mode).defaultValues("Monofur");
-        XMLPortParam(HUDChargeBar, "textusebarcolour",  setTextUseBarColour,     getTextUseBarColour,     xmlelement, mode).defaultValues(false);
-        XMLPortParam(HUDChargeBar, "textcolour",        setTextColour,           getTextColour,           xmlelement, mode).defaultValues(ColourValue(1.0, 1.0, 1.0, 1.0));
-        XMLPortParam(HUDChargeBar, "textalign",         setTextAlignmentString,  getTextAlignmentString,  xmlelement, mode).defaultValues("left");
-        XMLPortParam(HUDChargeBar, "textoffset",        setTextOffset,           getTextOffset,           xmlelement, mode).defaultValues(Vector2::ZERO);
-        XMLPortParam(HUDChargeBar, "textscale",         setTextScale,            getTextScale,            xmlelement, mode).defaultValues(1.0f);
-        XMLPortParam(HUDChargeBar, "textpickpoint",     setTextPickPoint,        getTextPickPoint,        xmlelement, mode).defaultValues(Vector2::ZERO);
-        XMLPortParam(HUDChargeBar, "textrotation",      setTextRotation,         getTextRotation,         xmlelement, mode).defaultValues(0.0f);
-        XMLPortParam(HUDChargeBar, "textspacewidth",    setTextSpaceWidth,       getTextSpaceWidth,       xmlelement, mode).defaultValues(true);
-    }
+    HUDChargeBar::~HUDChargeBar() { }
 
     void HUDChargeBar::tick(float dt)
@@ -94,20 +55,21 @@
         if (this->owner_)
         {
-            if(correspondingMode_ != nullptr){
-                this->setValue( correspondingMode_->getCharges() * 1.0f / correspondingMode_->getMaxCharges() );
-                this->textoverlay_->setCaption(multi_cast<std::string>(static_cast<int>(this->owner_->getHealth())));
+            if(correspondingMode_ != nullptr)                                                                       // if there is a chargeable weapon equipped we want to show the charged amount with a HUDBar
+            {
+                this->setValue( correspondingMode_->getCharges() * 1.0f / correspondingMode_->getMaxCharges() );    // The Value of the HUDBar is the ratio of current Charges and the maximum Charges possible
+                
+                if(this->correspondingMode_->getCharges() > 0)                                                      // The HUDBar should only be visible when we are charging up
+                    this->setVisible(true);
+                }
+                else
+                {
+                    this->setVisible(false);
+                }
             }
-
-            
         }
         else
         {
             this->setValue(0);
-            this->textoverlay_->setCaption("0");
         }
-
-        if (this->bUseBarColour_)
-            this->textoverlay_->setColour(this->getCurrentBarColour());
-
 
     }
@@ -116,4 +78,7 @@
     {
         SUPER(HUDChargeBar, changedOwner);
+
+        this->setVisible(false);
+        this->correspondingMode_ = nullptr;
 
         this->owner_ = orxonox_cast<Pawn*>(this->getOwner());
@@ -141,56 +106,3 @@
         }
     }
-
-    void HUDChargeBar::changedOverlayGroup()
-    {
-        SUPER(HUDChargeBar, changedOverlayGroup);
-
-        this->getOverlayGroup()->addElement(this->textoverlay_.get());
-    }
-
-    void HUDChargeBar::changedVisibility()
-    {
-        SUPER(HUDChargeBar, changedVisibility);
-
-        this->textoverlay_->setVisible(this->isVisible());
-    }
-
-    void HUDChargeBar::changedName()
-    {
-        SUPER(HUDChargeBar, changedName);
-
-        this->textoverlay_->setName(this->getName() + "text");
-    }
-
-    void HUDChargeBar::setTextColour(const ColourValue& colour)
-    {
-        this->textColour_ = colour;
-        if (!this->bUseBarColour_)
-            this->textoverlay_->setColour(colour);
-    }
-
-    void HUDChargeBar::setTextUseBarColour(bool bUseBarColour)
-    {
-        this->bUseBarColour_ = bUseBarColour;
-        if (!bUseBarColour)
-            this->textoverlay_->setColour(this->textColour_);
-    }
-
-    void HUDChargeBar::positionText()
-    {
-        this->textoverlay_->setPosition(this->getPosition() + this->textOffset_*this->getActualSize());
-        this->textoverlay_->setTextSize(this->getActualSize().y*this->textScale_);
-    }
-
-    void HUDChargeBar::positionChanged()
-    {
-        HUDBar::positionChanged();
-        positionText();
-    }
-
-    void HUDChargeBar::sizeChanged()
-    {
-        HUDBar::sizeChanged();
-        positionText();
-    }    
 }
Index: code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.h
===================================================================
--- code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.h	(revision 11185)
+++ code/branches/sagerjFS16/src/modules/overlays/hud/HUDChargeBar.h	(revision 11189)
@@ -22,5 +22,5 @@
  *
  *   Author:
- *      Fabian 'x3n' Landau
+ *      Johannes Sager
  *   Co-authors:
  *      ...
@@ -28,13 +28,13 @@
  */
 
-#ifndef _HUDHealthBar_H__
-#define _HUDHealthBar_H__
+#ifndef _HUDChargeBar_H__
+#define _HUDChargeBar_H__
 
 #include "overlays/OverlaysPrereqs.h"
-
 #include "util/Math.h"
 #include "tools/interfaces/Tickable.h"
 #include "overlays/OverlayText.h"
 #include "HUDBar.h"
+
 #include "weaponsystem/WeaponSystem.h"
 #include "weaponsystem/WeaponPack.h"
@@ -44,4 +44,10 @@
 namespace orxonox
 {
+    /**
+    @brief
+        The HUDChargeBar displays the amount of charges of its owner (a @ref Pawn).
+        The length of the bar is given by the ratio of the current charges and the maximal charges of the @ref Pawn.
+    */
+
     class _OverlaysExport HUDChargeBar : public HUDBar, public Tickable
     {
@@ -50,82 +56,13 @@
             virtual ~HUDChargeBar();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             virtual void tick(float dt) override;
             virtual void changedOwner() override;
-            virtual void changedOverlayGroup() override;
-            virtual void changedVisibility() override;
-            virtual void changedName() override;
-
-            inline void setTextFont(const std::string& font)
-                { if (!font.empty()) { this->textoverlay_->setFont(font); } }
-            inline const std::string& getTextFont() const
-                { return this->textoverlay_->getFont(); }
-
-            void setTextColour(const ColourValue& colour);
-            inline const ColourValue& getTextColour() const
-                { return this->textoverlay_->getColour(); }
-
-            void setTextUseBarColour(bool bUseBarColour);
-            inline bool getTextUseBarColour() const
-                { return this->bUseBarColour_; }
-
-            inline void setTextAlignment(OverlayText::Alignment alignment)
-                { this->textoverlay_->setAlignment(alignment); }
-            inline OverlayText::Alignment getTextAlignment() const
-                { return this->textoverlay_->getAlignment(); }
-
-            void setTextAlignmentString(const std::string& alignment)
-                { this->textoverlay_->setAlignmentString(alignment); }
-            std::string getTextAlignmentString() const
-                { return this->textoverlay_->getAlignmentString(); }
-
-            inline void setTextVisible(bool bVisible)
-                { this->textoverlay_->setVisible(bVisible); }
-            inline bool getTextVisible() const
-                { return this->textoverlay_->isVisible(); }
-
-            inline void setTextScale(float scale)
-                { this->textScale_ = scale;
-                  positionText();
-                }
-            inline float getTextScale() const
-                { return this->textScale_; }
-
-            inline void setTextPickPoint(const Vector2& pickpoint)
-                { this->textoverlay_->setPickPoint(pickpoint); }
-            inline Vector2 getTextPickPoint() const
-                { return this->textoverlay_->getPickPoint(); }
-
-            inline void setTextOffset(const Vector2& position)
-                { this->textOffset_ = position;
-                  this->positionText();
-                }
-            inline Vector2 getTextOffset() const
-                { return this->textOffset_; }
-
-            inline void setTextRotation(const Degree& angle)
-                { this->textoverlay_->setRotation(angle); }
-            inline const Degree& getTextRotation() const
-                { return this->textoverlay_->getRotation(); }
-
-            inline void setTextSpaceWidth(float width)
-                { this->textoverlay_->setSpaceWidth(width); }
-            inline float getTextSpaceWidth() const
-                { return this->textoverlay_->getSpaceWidth(); }
 
             inline void setHealthBarOwner(Pawn* owner)
                 { this->owner_ = owner; }
-        protected:
-            virtual void positionChanged() override;
-            virtual void sizeChanged() override;
+        
         private:
-            WeaponMode* correspondingMode_;
-            void positionText();
+            WeaponMode* correspondingMode_;         // pointer on the chargeable weaponmode (=nullptr if no chargeable weapons equipped)
             WeakPtr<Pawn> owner_;
-            StrongPtr<OverlayText> textoverlay_;
-            bool bUseBarColour_;
-            ColourValue textColour_;
-            Vector2 textOffset_;
-            float textScale_;
     };
 }
Index: code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.cc
===================================================================
--- code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.cc	(revision 11185)
+++ code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.cc	(revision 11189)
@@ -21,5 +21,5 @@
  *
  *   Author:
- *      God of everything
+ *      Johannes Sager
  *   Co-authors:
  *    
@@ -51,8 +51,8 @@
         RegisterObject(Discharger);
 
-        this->reloadTime_ = 3.14159f;
-        this->damage_ = 0.0f;
-        this->speed_ = 100.0f;
-        this->chargeable_ = true;
+        this->reloadTime_ = 3.14159f;           // how long you cannot charge after fire
+        this->damage_ = 0.0f;                   // if 0.0f then it uses weaponsettings.oxi
+        this->speed_ = 100.0f;                  // base projectile speed
+        this->chargeable_ = true;               // true if weapon chargeable
 
         this->setMunitionName("LaserMunition");
@@ -70,11 +70,10 @@
         projectile->setOrientation(this->getMuzzleOrientation());
         projectile->setPosition(this->getMuzzlePosition());
-        projectile->setVelocity(this->getMuzzleDirection() * this->speed_ * this->charges_ / 5);
-
+        projectile->setVelocity(this->getMuzzleDirection() * this->speed_ * this->charges_ / 5);// we scale the projectile speed with the current charges / 5
         projectile->setShooter(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
         projectile->setDamage(this->getDamage() * this->charges_);
-        projectile->setShieldDamage(this->getShieldDamage() * this->charges_);
-        projectile->setHealthDamage(this->getHealthDamage() * this->charges_);
-        this->charges_ = 0;
+        projectile->setShieldDamage(this->getShieldDamage() * this->charges_);                  // we scale both types of damage with the current charges as
+        projectile->setHealthDamage(this->getHealthDamage() * this->charges_);                  // well since this is the whole purpose of a chareable weapon
+        this->charges_ = 0;                                                                     // firing "consumes" the current charges (reset after fire)
     }
 }
Index: code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.h
===================================================================
--- code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.h	(revision 11185)
+++ code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.h	(revision 11189)
@@ -21,5 +21,5 @@
  *
  *   Author:
- *       God of everything
+ *       Johannes Sager
  *   Co-authors:
  *      
Index: code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.cc
===================================================================
--- code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.cc	(revision 11185)
+++ code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.cc	(revision 11189)
@@ -24,5 +24,5 @@
  *      Fabian 'x3n' Landau
  *   Co-authors:
- *      ...
+ *      Johannes Sager
  *
  */
@@ -63,7 +63,7 @@
         this->bAutoReload_ = true;
         this->bParallelReload_ = true;
-        this->chargeable_ = false;
-        this->charges_ = 0;
-        this->maxCharges_ = 100;
+        this->chargeable_ = false;              // most weapons are not chargeable
+        this->charges_ = 0;                     // always start with no charges
+        this->maxCharges_ = 100;                // default maximum charges one can have are 100
 
         this->reloadTimer_.setTimer(0.0f, false, createExecutor(createFunctor(&WeaponMode::reloaded, this)));
@@ -123,5 +123,4 @@
     bool WeaponMode::fire(float* reloadTime)
     {
-        orxout() << "--- " << endl;
         (*reloadTime) = this->reloadTime_;
         // Fireing is only possible if this weapon mode is not reloading and there is enough munition
@@ -175,21 +174,27 @@
     {
 
-        if( this->chargeable_)
-        {
-            if(this->charges_ < this->maxCharges_){
-                this->charges_ += 1;
-            }
+        if( this->chargeable_)                                                                                                          // chargeable weapons are supposed to charge on push
+        {
+            this->munition_ = this->weapon_->getWeaponPack()->getWeaponSystem()->getMunition(&this->munitiontype_);                     // updates the pointer to the munition(which we use in the next step)
+            if(this->charges_ < this->maxCharges_ && this->bReloading_ == false && this->munition_->canTakeMunition(1, this))           // charges up unless:
+            {                                                                                                                           // - we are fully charged
+                this->charges_ += 1;                                                                                                    // - we are reloading
+            }                                                                                                                           // - we have no munition
             return false;
-        } else {
+        }
+        else                                                                                                                            // normal (not chargeable) weapons are supposed to fire on push
+        {
             return fire(reloadTime);
         }
     }
 
-    bool WeaponMode::release(float* reloadTime)
-    {
-        if( this->chargeable_)
+    bool WeaponMode::release(float* reloadTime)                 
+    {
+        if( this->chargeable_)                                                                                                          // chargeable weapons are supposed to fire on release
         { 
             return fire(reloadTime);
-        }else{
+        }
+        else                                                                                                                            // normal (not chargeable) weapons should do nothing on release
+        {
             return false;
         }
Index: code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.h
===================================================================
--- code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.h	(revision 11185)
+++ code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.h	(revision 11189)
@@ -24,5 +24,5 @@
  *      Fabian 'x3n' Landau
  *   Co-authors:
- *      ...
+ *      Johannes Sager
  *
  */
@@ -110,9 +110,9 @@
 
             // Fire
-            inline unsigned int getMaxCharges()
+            inline unsigned int getMaxCharges()                 // get the maximum of charges one can have
                 { return this->maxCharges_;}
-            inline unsigned int getCharges()
+            inline unsigned int getCharges()                    // get the current amount of charges
                 { return this->charges_;}
-            inline bool isChargeable()
+            inline bool isChargeable()                          // returns if the weaponmode is chargeable
                 { return this->chargeable_;}
             inline void setDamage(float damage)
@@ -176,11 +176,11 @@
             unsigned int initialMagazines_;
             unsigned int munitionPerShot_;
-            unsigned int charges_;
-            unsigned int maxCharges_;
+            unsigned int charges_;                  // current amount of charges only matters for chargeable weapons(chargeable == true)
+            unsigned int maxCharges_;               // maximum amount of charges (is initialized with 100 in weaponmode.cc) only matters for chargeable weapons(chargeable == true)
 
             float reloadTime_;
-            bool bAutoReload_; // If true, the weapon reloads the magazine automatically.
-            bool bParallelReload_; // If true, the weapon reloads in parallel to the magazine reloading.
-            bool chargeable_; // If true, the weapon fires at release instead at push(where he charges up)
+            bool bAutoReload_;                      // If true, the weapon reloads the magazine automatically.
+            bool bParallelReload_;                  // If true, the weapon reloads in parallel to the magazine reloading.
+            bool chargeable_;                       // If true, the weapon charges up on push and fires on release
 
             float damage_;
@@ -202,14 +202,14 @@
 
             Timer reloadTimer_;
-            bool bReloading_; // If true, this weapon mode is marked as reloading.
+            bool bReloading_;                       // If true, this weapon mode is marked as reloading.
 
             Vector3 muzzlePosition_;
             Quaternion muzzleOrientation_;
 
-            std::string fireSoundPath_; // The path of the sound played when fireing
-            float fireSoundVolume_; // The volume of the sound played when fireing
-            std::vector<WorldSound*> fireSounds_; // List of sounds used by the weapon mode. Because multiple sounds may overlap, we need mor than one WorldSound instance.
-            std::string reloadSoundPath_; // The path of the sound played when reloading
-            float reloadSoundVolume_; // The volume of the sound played when reloading
+            std::string fireSoundPath_;             // The path of the sound played when fireing
+            float fireSoundVolume_;                 // The volume of the sound played when fireing
+            std::vector<WorldSound*> fireSounds_;   // List of sounds used by the weapon mode. Because multiple sounds may overlap, we need mor than one WorldSound instance.
+            std::string reloadSoundPath_;           // The path of the sound played when reloading
+            float reloadSoundVolume_;               // The volume of the sound played when reloading
             WorldSound* reloadSound_;
     };
