Index: code/branches/presentationFS16/src/modules/invader/InvaderEnemyShooter.cc
===================================================================
--- code/branches/presentationFS16/src/modules/invader/InvaderEnemyShooter.cc	(revision 11202)
+++ code/branches/presentationFS16/src/modules/invader/InvaderEnemyShooter.cc	(revision 11208)
@@ -71,5 +71,5 @@
     void InvaderEnemyShooter::shoot()
     {
-        ControllableEntity::fire(0);
+        ControllableEntity::push(0);
     }
 
Index: code/branches/presentationFS16/src/modules/invader/InvaderShip.cc
===================================================================
--- code/branches/presentationFS16/src/modules/invader/InvaderShip.cc	(revision 11202)
+++ code/branches/presentationFS16/src/modules/invader/InvaderShip.cc	(revision 11208)
@@ -91,5 +91,5 @@
         // shoot!
         if (isFireing)
-            ControllableEntity::fire(0);
+            ControllableEntity::push(0);
 
         // Camera
Index: code/branches/presentationFS16/src/modules/jump/JumpFigure.cc
===================================================================
--- code/branches/presentationFS16/src/modules/jump/JumpFigure.cc	(revision 11202)
+++ code/branches/presentationFS16/src/modules/jump/JumpFigure.cc	(revision 11208)
@@ -398,10 +398,10 @@
     }
 
-    void JumpFigure::fire(unsigned int firemode)
-    {
-
-    }
-
-    void JumpFigure::fired(unsigned int firemode)
+    void JumpFigure::push(unsigned int firemode)
+    {
+
+    }
+
+    void JumpFigure::pushed(unsigned int firemode)
     {
         firePressed_ = true;
Index: code/branches/presentationFS16/src/modules/jump/JumpFigure.h
===================================================================
--- code/branches/presentationFS16/src/modules/jump/JumpFigure.h	(revision 11202)
+++ code/branches/presentationFS16/src/modules/jump/JumpFigure.h	(revision 11208)
@@ -47,6 +47,6 @@
             virtual void rotatePitch(const Vector2& value) override;
             virtual void rotateRoll(const Vector2& value) override;
-            void fire(unsigned int firemode);
-            virtual void fired(unsigned int firemode) override;
+            void push(unsigned int firemode);
+            virtual void pushed(unsigned int firemode) override;
             virtual void JumpFromPlatform(JumpPlatform* platform);
             virtual void JumpFromSpring(JumpSpring* spring);
Index: code/branches/presentationFS16/src/modules/objects/controllers/TurretController.cc
===================================================================
--- code/branches/presentationFS16/src/modules/objects/controllers/TurretController.cc	(revision 11202)
+++ code/branches/presentationFS16/src/modules/objects/controllers/TurretController.cc	(revision 11208)
@@ -198,5 +198,5 @@
             {
 
-                this->getControllableEntity()->fire(0);
+                this->getControllableEntity()->push(0);
             }
         }
Index: code/branches/presentationFS16/src/modules/overlays/hud/CMakeLists.txt
===================================================================
--- code/branches/presentationFS16/src/modules/overlays/hud/CMakeLists.txt	(revision 11202)
+++ code/branches/presentationFS16/src/modules/overlays/hud/CMakeLists.txt	(revision 11208)
@@ -14,4 +14,5 @@
   HUDWeapon.cc
   HUDWeaponSystem.cc
+  HUDChargeBar.cc
   ChatOverlay.cc
   AnnounceMessage.cc
Index: code/branches/presentationFS16/src/modules/overlays/hud/HUDChargeBar.cc
===================================================================
--- code/branches/presentationFS16/src/modules/overlays/hud/HUDChargeBar.cc	(revision 11208)
+++ code/branches/presentationFS16/src/modules/overlays/hud/HUDChargeBar.cc	(revision 11208)
@@ -0,0 +1,109 @@
+/*
+ *   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:
+ *      ...
+ *
+ */
+
+#include "HUDChargeBar.h"
+
+#include "util/Convert.h"
+#include "core/CoreIncludes.h"
+#include "worldentities/pawns/Pawn.h"
+#include "overlays/OverlayGroup.h"
+
+
+namespace orxonox
+{
+    RegisterClass(HUDChargeBar);
+
+    HUDChargeBar::HUDChargeBar(Context* context) : HUDBar(context)
+    {
+        RegisterObject(HUDChargeBar);
+
+        this->owner_ = nullptr;
+        this->correspondingMode_ = nullptr;             // usually no chargeable weapon equipped
+    }
+
+    HUDChargeBar::~HUDChargeBar() { }
+
+    void HUDChargeBar::tick(float dt)
+    {
+        SUPER(HUDChargeBar, tick, dt);
+
+        if (this->owner_)
+        {
+            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);
+        }
+
+    }
+
+    void HUDChargeBar::changedOwner()
+    {
+        SUPER(HUDChargeBar, changedOwner);
+
+        this->setVisible(false);
+        this->correspondingMode_ = nullptr;
+
+        this->owner_ = orxonox_cast<Pawn*>(this->getOwner());
+        if(this->owner_ == nullptr){
+            return;
+        }
+
+        const WeaponSystem* weaponsystem = owner_->getWeaponSystem();
+        if(weaponsystem == nullptr){
+            return;
+        }
+
+        const std::vector<WeaponPack*> weaponpacklist = weaponsystem->getAllWeaponPacks();
+        for(WeaponPack* weaponpack : weaponpacklist){
+            const std::vector<Weapon*> weaponlist = weaponpack->getAllWeapons();
+            for(Weapon* weapon : weaponlist){
+                const std::multimap<unsigned int, WeaponMode*> weaponmodelist = weapon->getAllWeaponmodes();
+                for(std::multimap<unsigned int, WeaponMode*>::const_iterator it = weaponmodelist.begin(); it != weaponmodelist.end(); ++it){
+                    if(it->second->isChargeable()){
+                        this->correspondingMode_ = it->second;
+                        return;
+                    }
+                }
+            }
+        }
+    }
+}
Index: code/branches/presentationFS16/src/modules/overlays/hud/HUDChargeBar.h
===================================================================
--- code/branches/presentationFS16/src/modules/overlays/hud/HUDChargeBar.h	(revision 11208)
+++ code/branches/presentationFS16/src/modules/overlays/hud/HUDChargeBar.h	(revision 11208)
@@ -0,0 +1,69 @@
+
+/*
+ *   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:
+ *      Johannes Sager
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#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"
+#include "weaponsystem/WeaponMode.h"
+#include "weaponsystem/Weapon.h"
+
+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
+    {
+        public:
+            HUDChargeBar(Context* context);
+            virtual ~HUDChargeBar();
+
+            virtual void tick(float dt) override;
+            virtual void changedOwner() override;
+
+            inline void setHealthBarOwner(Pawn* owner)
+                { this->owner_ = owner; }
+        
+        private:
+            WeaponMode* correspondingMode_;         // pointer on the chargeable weaponmode (=nullptr if no chargeable weapons equipped)
+            WeakPtr<Pawn> owner_;
+    };
+}
+#endif /* _HUDChargeBar_H__ */
Index: code/branches/presentationFS16/src/modules/towerdefense/TowerDefenseSelecter.cc
===================================================================
--- code/branches/presentationFS16/src/modules/towerdefense/TowerDefenseSelecter.cc	(revision 11202)
+++ code/branches/presentationFS16/src/modules/towerdefense/TowerDefenseSelecter.cc	(revision 11208)
@@ -146,9 +146,9 @@
     }
 
-    void TowerDefenseSelecter::fire(unsigned int firemode)
+    void TowerDefenseSelecter::push(unsigned int firemode)
     {
     }
 
-    void TowerDefenseSelecter::fired(unsigned int firemode)
+    void TowerDefenseSelecter::pushed(unsigned int firemode)
     {
         
Index: code/branches/presentationFS16/src/modules/towerdefense/TowerDefenseSelecter.h
===================================================================
--- code/branches/presentationFS16/src/modules/towerdefense/TowerDefenseSelecter.h	(revision 11202)
+++ code/branches/presentationFS16/src/modules/towerdefense/TowerDefenseSelecter.h	(revision 11208)
@@ -47,6 +47,6 @@
             virtual void rotatePitch(const Vector2& value) override;
             virtual void rotateRoll(const Vector2& value) override;
-            void fire(unsigned int firemode);
-            virtual void fired(unsigned int firemode) override;
+            void push(unsigned int firemode);
+            virtual void pushed(unsigned int firemode) override;
             virtual void boost(bool bBoost) override;
             virtual void setSelectedPosition(TDCoordinate* newPos);
Index: code/branches/presentationFS16/src/modules/weapons/WeaponsPrereqs.h
===================================================================
--- code/branches/presentationFS16/src/modules/weapons/WeaponsPrereqs.h	(revision 11202)
+++ code/branches/presentationFS16/src/modules/weapons/WeaponsPrereqs.h	(revision 11208)
@@ -107,4 +107,5 @@
     class SimpleRocketFire;
     class GravityBombFire;
+    class Discharger;
 }
 
Index: code/branches/presentationFS16/src/modules/weapons/projectiles/Rocket.cc
===================================================================
--- code/branches/presentationFS16/src/modules/weapons/projectiles/Rocket.cc	(revision 11202)
+++ code/branches/presentationFS16/src/modules/weapons/projectiles/Rocket.cc	(revision 11208)
@@ -218,5 +218,5 @@
         Destroys the Rocket upon pressing "fire".
     */
-    void Rocket::fired(unsigned int firemode)
+    void Rocket::pushed(unsigned int firemode)
     {
         this->destroyObject();
Index: code/branches/presentationFS16/src/modules/weapons/projectiles/Rocket.h
===================================================================
--- code/branches/presentationFS16/src/modules/weapons/projectiles/Rocket.h	(revision 11202)
+++ code/branches/presentationFS16/src/modules/weapons/projectiles/Rocket.h	(revision 11208)
@@ -116,5 +116,5 @@
             virtual void setShooter(Pawn* shooter) override;
 
-            virtual void fired(unsigned int firemode) override;
+            virtual void pushed(unsigned int firemode) override;
 
             /**
Index: code/branches/presentationFS16/src/modules/weapons/projectiles/RocketOld.cc
===================================================================
--- code/branches/presentationFS16/src/modules/weapons/projectiles/RocketOld.cc	(revision 11202)
+++ code/branches/presentationFS16/src/modules/weapons/projectiles/RocketOld.cc	(revision 11208)
@@ -218,5 +218,5 @@
         Destroys the RocketOld upon pressing "fire".
     */
-    void RocketOld::fired(unsigned int firemode)
+    void RocketOld::pushed(unsigned int firemode)
     {
         this->destroyObject();
Index: code/branches/presentationFS16/src/modules/weapons/projectiles/RocketOld.h
===================================================================
--- code/branches/presentationFS16/src/modules/weapons/projectiles/RocketOld.h	(revision 11202)
+++ code/branches/presentationFS16/src/modules/weapons/projectiles/RocketOld.h	(revision 11208)
@@ -116,5 +116,5 @@
             virtual void setShooter(Pawn* shooter) override;
 
-            virtual void fired(unsigned int firemode) override;
+            virtual void pushed(unsigned int firemode) override;
 
         private:
Index: code/branches/presentationFS16/src/modules/weapons/weaponmodes/CMakeLists.txt
===================================================================
--- code/branches/presentationFS16/src/modules/weapons/weaponmodes/CMakeLists.txt	(revision 11202)
+++ code/branches/presentationFS16/src/modules/weapons/weaponmodes/CMakeLists.txt	(revision 11208)
@@ -13,3 +13,4 @@
   GravityBombFire.cc
   MineGun.cc
+  Discharger.cc
 )
Index: code/branches/presentationFS16/src/modules/weapons/weaponmodes/Discharger.cc
===================================================================
--- code/branches/presentationFS16/src/modules/weapons/weaponmodes/Discharger.cc	(revision 11208)
+++ code/branches/presentationFS16/src/modules/weapons/weaponmodes/Discharger.cc	(revision 11208)
@@ -0,0 +1,97 @@
+/*
+ *   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:
+ *      Johannes Sager
+ *   Co-authors:
+ *    
+ *
+ */
+
+/**
+    @file Discharger.cc
+    @brief Definition of the Discharger class.
+*/
+
+#include "Discharger.h"
+
+#include "core/CoreIncludes.h"
+
+#include "weaponsystem/Weapon.h"
+#include "weaponsystem/WeaponPack.h"
+#include "weaponsystem/WeaponSystem.h"
+#include "worldentities/pawns/Pawn.h"
+
+#include "weapons/projectiles/BillboardProjectile.h"
+
+namespace orxonox
+{
+    RegisterClass(Discharger);
+
+    Discharger::Discharger(Context* context) : WeaponMode(context)
+    {
+        RegisterObject(Discharger);
+
+        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");
+        this->setFireSound("sounds/Weapon_LaserFire.ogg");
+        this->setReloadSound("sounds/Reload_LaserFire.ogg", 0.8);
+
+        hudImageString_ = "Orxonox/WSHUD_WM_LaserFire";
+    }
+
+    void Discharger::fire()
+    {
+        BillboardProjectile* projectile = new BillboardProjectile(this->getContext());
+
+        if(this->charges_ < this->thresholdOne_)
+        {
+            projectile->setMaterial("Flares/lensflare");
+        }
+        else
+        {
+            if(this->charges_ < this->thresholdTwo_)
+            {
+                projectile->setMaterial("Flares/ringflare");
+            }
+            else
+            {
+                projectile->setMaterial("Flares/ringflare2");  
+            }
+        }
+
+        projectile->setScale(1+this->charges_/10);
+
+        this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
+        projectile->setOrientation(this->getMuzzleOrientation());
+        projectile->setPosition(this->getMuzzlePosition());
+        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_);                  // 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/presentationFS16/src/modules/weapons/weaponmodes/Discharger.h
===================================================================
--- code/branches/presentationFS16/src/modules/weapons/weaponmodes/Discharger.h	(revision 11208)
+++ code/branches/presentationFS16/src/modules/weapons/weaponmodes/Discharger.h	(revision 11208)
@@ -0,0 +1,66 @@
+/*
+ *   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:
+ *       Johannes Sager
+ *   Co-authors:
+ *      
+ *
+ */
+
+/**
+     @file Discharger.cc
+     @brief Definition of the Discharger class.
+*/
+
+#ifndef _Discharger_H__
+#define _Discharger_H__
+
+#include "weapons/WeaponsPrereqs.h"
+#include "weaponsystem/WeaponMode.h"
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        Charges energy upon releasing it with a powerful discharge
+    @author
+        Johannes Sager
+    @ingroup WeaponsWeaponModes
+    */
+
+    class _WeaponsExport Discharger : public WeaponMode
+    {
+        public:
+            Discharger(Context* context);
+            virtual ~Discharger() {}                    // declaration for the constructor
+
+            virtual void fire() override;               // declaration of specific fire function of each weapon
+
+        private:
+            float speed_;                               // The speed of the fired projectile.
+            const unsigned int thresholdOne_ = 50;      // Threshold amount of charges where the projectile changes the first time
+            const unsigned int thresholdTwo_ = 100;     // Threshold amount of charges where the projectile changes the second time        
+    }; 
+}
+
+#endif /* _Discharger_H__ */
