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_;
     };
