Index: code/branches/presentationFS16/src/modules/invader/InvaderEnemyShooter.cc
===================================================================
--- code/branches/presentationFS16/src/modules/invader/InvaderEnemyShooter.cc	(revision 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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 11207)
+++ 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__ */
Index: code/branches/presentationFS16/src/orxonox/controllers/AIController.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/controllers/AIController.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/controllers/AIController.cc	(revision 11208)
@@ -197,5 +197,5 @@
                     if (this->bHasTargetPosition_)
                         this->moveToTargetPosition();
-                    this->doFire();
+                    this->doPush();
                 }
 
@@ -227,5 +227,5 @@
                     this->moveToTargetPosition();
 
-                    this->doFire();
+                    this->doPush();
             }
         }
@@ -241,5 +241,5 @@
                     if((timeout_< 0)||(!target_))//Check if the timeout is over or target died.
                     {
-                       controllable->fire(0);//kill the rocket
+                       controllable->push(0);//kill the rocket
                        this->setPreviousMode();//get out of rocket mode
                     }
Index: code/branches/presentationFS16/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/controllers/ArtificialController.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/controllers/ArtificialController.cc	(revision 11208)
@@ -132,5 +132,5 @@
         @brief DoFire is called when a bot should shoot and decides which weapon is used and whether the bot shoots at all.
     */
-    void ArtificialController::doFire()
+    void ArtificialController::doPush()
     {
         if(!this->bSetupWorked)//setup: find out which weapons are active ! hard coded: laser is "0", lens flare is "1", ...
@@ -144,10 +144,10 @@
             if (this->isCloseAtTarget(130) && (firemode = getFiremode("LightningGun")) > -1 )
             {//LENSFLARE: short range weapon
-                this->getControllableEntity()->fire(firemode); //ai uses lens flare if they're close enough to the target
+                this->getControllableEntity()->push(firemode); //ai uses lens flare if they're close enough to the target
             }
             else if( this->isCloseAtTarget(400) && (random < this->botlevel_) && (firemode = getFiremode("RocketFire")) > -1 )
             {//ROCKET: mid range weapon
                 this->mode_ = ROCKET; //Vector-implementation: mode_.push_back(ROCKET);
-                this->getControllableEntity()->fire(firemode); //launch rocket
+                this->getControllableEntity()->push(firemode); //launch rocket
                 if(this->getControllableEntity() && this->target_) //after fire(3) is called, getControllableEntity() refers to the rocket!
                 {
@@ -161,5 +161,5 @@
             }
             else if ((firemode = getFiremode("HsW01")) > -1 ) //LASER: default weapon
-                this->getControllableEntity()->fire(firemode);
+                this->getControllableEntity()->push(firemode);
         }
     }
Index: code/branches/presentationFS16/src/orxonox/controllers/ArtificialController.h
===================================================================
--- code/branches/presentationFS16/src/orxonox/controllers/ArtificialController.h	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/controllers/ArtificialController.h	(revision 11208)
@@ -48,5 +48,5 @@
             virtual void changedControllableEntity() override;
 
-            virtual void doFire();
+            virtual void doPush();
             void setBotLevel(float level=1.0f);
             inline float getBotLevel() const
Index: code/branches/presentationFS16/src/orxonox/controllers/DroneController.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/controllers/DroneController.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/controllers/DroneController.cc	(revision 11208)
@@ -130,5 +130,5 @@
                        this->aimAtTarget();
                        if(!this->friendlyFire())
-                           this->getDrone()->fire(0);
+                           this->getDrone()->push(0);
                     }
                }
Index: code/branches/presentationFS16/src/orxonox/controllers/FightingController.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/controllers/FightingController.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/controllers/FightingController.cc	(revision 11208)
@@ -318,5 +318,5 @@
         }
               
-        this->getControllableEntity()->fire(firemode);
+        this->getControllableEntity()->push(firemode);
         
     }
Index: code/branches/presentationFS16/src/orxonox/controllers/HumanController.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/controllers/HumanController.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/controllers/HumanController.cc	(revision 11208)
@@ -40,6 +40,7 @@
 namespace orxonox
 {
-    extern const std::string __CC_fire_name = "fire";
+    extern const std::string __CC_push_name = "push";
     extern const std::string __CC_suicide_name = "suicide";
+    extern const std::string __CC_release_name = "release";
 
     SetConsoleCommand("HumanController", "moveFrontBack",          &HumanController::moveFrontBack ).addShortcut().setAsInputCommand();
@@ -51,5 +52,6 @@
     SetConsoleCommand("HumanController", "toggleFormationFlight",  &HumanController::toggleFormationFlight).addShortcut().keybindMode(KeybindMode::OnPress);
     SetConsoleCommand("HumanController", "FFChangeMode",           &HumanController::FFChangeMode).addShortcut().keybindMode(KeybindMode::OnPress);
-    SetConsoleCommand("HumanController", __CC_fire_name,           &HumanController::fire          ).addShortcut().keybindMode(KeybindMode::OnHold);
+    SetConsoleCommand("HumanController", __CC_push_name,           &HumanController::push          ).addShortcut().keybindMode(KeybindMode::OnHold);
+    SetConsoleCommand("HumanController", __CC_release_name,        &HumanController::release       ).addShortcut().keybindMode(KeybindMode::OnRelease);
     SetConsoleCommand("HumanController", "reload",                 &HumanController::reload        ).addShortcut();
     SetConsoleCommand("HumanController", "boost",                  &HumanController::boost         ).addShortcut().setAsInputCommand().keybindMode(KeybindMode::OnPressAndRelease);
@@ -155,16 +157,35 @@
     }
 
-    void HumanController::fire(unsigned int firemode)
-    {
-        if (HumanController::localController_s)
-            HumanController::localController_s->doFire(firemode);
-    }
-
-    void HumanController::doFire(unsigned int firemode)
-    {
-        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
-        {
-            HumanController::localController_s->controllableEntity_->fire(firemode);
+    void HumanController::push(unsigned int firemode)
+    {
+        if (HumanController::localController_s)
+            HumanController::localController_s->doPush(firemode);
+    }
+
+    void HumanController::doPush(unsigned int firemode)
+    {
+        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
+        {
+            HumanController::localController_s->controllableEntity_->push(firemode);
             //if human fires, set slaves free. See FormationController::forceFreeSlaves()
+            if (HumanController::localController_s->state_==MASTER && HumanController::localController_s->formationMode_ == NORMAL)
+            {
+                HumanController::localController_s->forceFreeSlaves();
+            }
+        }
+    }
+
+    void HumanController::release(unsigned int firemode)
+    {
+        if (HumanController::localController_s)
+            HumanController::localController_s->doRelease(firemode);
+    }
+
+    void HumanController::doRelease(unsigned int firemode)
+    {
+        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
+        {
+            HumanController::localController_s->controllableEntity_->release(firemode);
+            //if human releases, set slaves free. See FormationController::forceFreeSlaves()
             if (HumanController::localController_s->state_==MASTER && HumanController::localController_s->formationMode_ == NORMAL)
             {
Index: code/branches/presentationFS16/src/orxonox/controllers/HumanController.h
===================================================================
--- code/branches/presentationFS16/src/orxonox/controllers/HumanController.h	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/controllers/HumanController.h	(revision 11208)
@@ -61,6 +61,8 @@
             virtual void pitch(const Vector2& value);
 
-            static void fire(unsigned int firemode);
-            virtual void doFire(unsigned int firemode);
+            static void push(unsigned int firemode);
+            virtual void doPush(unsigned int firemode);
+            static void release(unsigned int firemode);
+            virtual void doRelease(unsigned int firemode);
             static void reload();
 
Index: code/branches/presentationFS16/src/orxonox/controllers/NewHumanController.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/controllers/NewHumanController.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/controllers/NewHumanController.cc	(revision 11208)
@@ -54,5 +54,4 @@
     SetConsoleCommand("NewHumanController", "accelerate", &NewHumanController::accelerate).keybindMode(KeybindMode::OnPress);
     SetConsoleCommand("NewHumanController", "decelerate", &NewHumanController::decelerate).keybindMode(KeybindMode::OnPress);
-    SetConsoleCommand("NewHumanController", "unfire",     &NewHumanController::unfire    ).keybindMode(KeybindMode::OnRelease).addShortcut();
 
     RegisterUnloadableClass(NewHumanController);
@@ -277,5 +276,5 @@
     }
 
-    void NewHumanController::doFire(unsigned int firemode)
+    void NewHumanController::doPush(unsigned int firemode)
     {
         if (!this->controllableEntity_)
@@ -291,5 +290,17 @@
         }
         else
-            HumanController::doFire(firemode); //call for formationflight
+        {
+            HumanController::doPush(firemode); //call for formationflight
+        }
+    }
+
+    void NewHumanController::doRelease(unsigned int firemode)
+    {
+        if (!this->controllableEntity_)
+            return;
+
+        this->firemode_ = firemode;
+
+        HumanController::doRelease(firemode); //call for formationflight
     }
 
@@ -342,16 +353,4 @@
             }
         }
-    }
-
-    void NewHumanController::unfire()
-    {
-        if (NewHumanController::localController_s)
-            NewHumanController::localController_s->doUnfire();
-    }
-
-    void NewHumanController::doUnfire()
-    {
-        this->firemode_ = -1;
-        hideArrows();
     }
 
Index: code/branches/presentationFS16/src/orxonox/controllers/NewHumanController.h
===================================================================
--- code/branches/presentationFS16/src/orxonox/controllers/NewHumanController.h	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/controllers/NewHumanController.h	(revision 11208)
@@ -54,10 +54,8 @@
             static void decelerate();
 
-            virtual void doFire(unsigned int firemode) override;
+            virtual void doPush(unsigned int firemode) override;
+            virtual void doRelease(unsigned int firemode) override;
 
             virtual void hit(Pawn* originator, btManifoldPoint& contactpoint, float damage) override;
-
-            static void unfire();
-            virtual void doUnfire();
 
             void centerCursor();
Index: code/branches/presentationFS16/src/orxonox/controllers/WaypointPatrolController.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/controllers/WaypointPatrolController.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/controllers/WaypointPatrolController.cc	(revision 11208)
@@ -69,5 +69,5 @@
 
             if (this->getControllableEntity() && this->isCloseAtTarget(this->attackradius_) && this->isLookingAtTarget(math::pi / 20.0f))
-                this->getControllableEntity()->fire(0);
+                this->getControllableEntity()->push(0);
         }
         else
Index: code/branches/presentationFS16/src/orxonox/weaponsystem/Weapon.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/weaponsystem/Weapon.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/weaponsystem/Weapon.cc	(revision 11208)
@@ -99,5 +99,5 @@
         Fire this Weapon with the the WeaponMode defined by @param mode
     */
-    void Weapon::fire(unsigned int mode)
+    void Weapon::push(unsigned int mode)
     {
         // To avoid firing with more than one mode at the same time, we lock the weapon (reloading) for
@@ -114,4 +114,6 @@
         // Note: The reloading of each WeaponMode is internally handled by each A, B and C.
         //       The reloading of the weapon is only performed to avoid firing with different modes at the same time.
+   
+   
         if (this->bReloading_ && this->reloadingWeaponmode_ != mode)
             return;
@@ -123,5 +125,27 @@
         {
             float reloading_time = 0;
-            if (it->second->fire(&reloading_time))
+            if (it->second->push(&reloading_time))
+            {
+                this->bReloading_ = true;
+                this->reloadingWeaponmode_ = mode;
+
+                this->reloadTimer_.setInterval(reloading_time);
+                this->reloadTimer_.startTimer();
+            }
+        }
+    }
+
+    void Weapon::release(unsigned int mode)
+    {
+        if (this->bReloading_ && this->reloadingWeaponmode_ != mode)
+            return;
+
+        std::multimap<unsigned int, WeaponMode*>::iterator start = this->weaponmodes_.lower_bound(mode);
+        std::multimap<unsigned int, WeaponMode*>::iterator end   = this->weaponmodes_.upper_bound(mode);
+
+        for (std::multimap<unsigned int, WeaponMode*>::iterator it = start; it != end; ++it)
+        {
+            float reloading_time = 0;
+            if (it->second->release(&reloading_time))
             {
                 this->bReloading_ = true;
Index: code/branches/presentationFS16/src/orxonox/weaponsystem/Weapon.h
===================================================================
--- code/branches/presentationFS16/src/orxonox/weaponsystem/Weapon.h	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/weaponsystem/Weapon.h	(revision 11208)
@@ -52,5 +52,6 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            void fire(unsigned int mode);
+            void push(unsigned int mode);
+            void release(unsigned int mode);
             void reload();
 
Index: code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponMode.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponMode.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponMode.cc	(revision 11208)
@@ -24,5 +24,5 @@
  *      Fabian 'x3n' Landau
  *   Co-authors:
- *      ...
+ *      Johannes Sager
  *
  */
@@ -63,4 +63,7 @@
         this->bAutoReload_ = true;
         this->bParallelReload_ = true;
+        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)));
@@ -121,5 +124,4 @@
     {
         (*reloadTime) = this->reloadTime_;
-        
         // 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))
@@ -169,4 +171,34 @@
     }
 
+    bool WeaponMode::push(float* reloadTime)
+    {
+
+        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                                                                                                                            // normal (not chargeable) weapons are supposed to fire on push
+        {
+            return fire(reloadTime);
+        }
+    }
+
+    bool WeaponMode::release(float* reloadTime)                 
+    {
+        if( this->chargeable_)                                                                                                          // chargeable weapons are supposed to fire on release
+        { 
+            return fire(reloadTime);
+        }
+        else                                                                                                                            // normal (not chargeable) weapons should do nothing on release
+        {
+            return false;
+        }
+    }
+
     bool WeaponMode::reload()
     {
Index: code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponMode.h
===================================================================
--- code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponMode.h	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponMode.h	(revision 11208)
@@ -24,5 +24,5 @@
  *      Fabian 'x3n' Landau
  *   Co-authors:
- *      ...
+ *      Johannes Sager
  *
  */
@@ -45,5 +45,7 @@
     /**
     @brief
-        A WeaponMode defines how a Weapon is used. It specifies what kind of @ref orxonox::Projectile is created when you fire it, how much time it takes to reload, what sound you hear while shooting, how much damage the projectile deals to a target, ...
+        A WeaponMode defines how a Weapon is used. It specifies what kind of
+        @ref orxonox::Projectile is created when you fire it, how much time it takes to reload,
+        what sound you hear while shooting, how much damage the projectile deals to a target, ...
     */
     class _OrxonoxExport WeaponMode : public BaseObject
@@ -55,4 +57,6 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
+            virtual bool push(float* reloadTime);
+            virtual bool release(float* reloadTime);
             virtual bool fire(float* reloadTime);
             bool reload();
@@ -106,4 +110,10 @@
 
             // Fire
+            inline unsigned int getMaxCharges()                 // get the maximum of charges one can have
+                { return this->maxCharges_;}
+            inline unsigned int getCharges()                    // get the current amount of charges
+                { return this->charges_;}
+            inline bool isChargeable()                          // returns if the weaponmode is chargeable
+                { return this->chargeable_;}
             inline void setDamage(float damage)
                 { this->damage_ = damage;}
@@ -166,8 +176,11 @@
             unsigned int initialMagazines_;
             unsigned int munitionPerShot_;
+            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 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_;
@@ -189,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_;
     };
Index: code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponPack.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponPack.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponPack.cc	(revision 11208)
@@ -74,8 +74,14 @@
         Fire all weapons in this WeaponSet with the defined weaponmode.
     */
-    void WeaponPack::fire(unsigned int weaponmode)
+    void WeaponPack::push(unsigned int weaponmode)
     {
         for (Weapon* weapon : this->weapons_)
-            weapon->fire(weaponmode);
+            weapon->push(weaponmode);
+    }
+
+    void WeaponPack::release(unsigned int weaponmode)
+    {
+        for (Weapon* weapon : this->weapons_)
+            weapon->release(weaponmode);
     }
 
Index: code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponPack.h
===================================================================
--- code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponPack.h	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponPack.h	(revision 11208)
@@ -46,5 +46,6 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            void fire(unsigned int weaponmode);
+            void push(unsigned int weaponmode);
+            void release(unsigned int weaponmode);
             void reload();
 
Index: code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSet.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSet.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSet.cc	(revision 11208)
@@ -60,10 +60,18 @@
     }
 
-    void WeaponSet::fire()
+    void WeaponSet::push()
     {
         // Fire all WeaponPacks with their defined weaponmode
         for (const auto& mapEntry : this->weaponpacks_)
             if (mapEntry.second != WeaponSystem::WEAPON_MODE_UNASSIGNED)
-                mapEntry.first->fire(mapEntry.second);
+                mapEntry.first->push(mapEntry.second);
+    }
+
+    void WeaponSet::release()
+    {
+        // Fire all WeaponPacks with their defined weaponmode
+        for (const auto& mapEntry : this->weaponpacks_)
+            if (mapEntry.second != WeaponSystem::WEAPON_MODE_UNASSIGNED)
+                mapEntry.first->release(mapEntry.second);
     }
 
Index: code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSet.h
===================================================================
--- code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSet.h	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSet.h	(revision 11208)
@@ -46,5 +46,6 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            void fire();
+            void push();
+            void release();
             void reload();
 
Index: code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSystem.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSystem.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSystem.cc	(revision 11208)
@@ -287,9 +287,16 @@
         Fires the @ref orxonox::WeaponSet with the specified firemode.
     */
-    void WeaponSystem::fire(unsigned int firemode)
+    void WeaponSystem::push(unsigned int firemode)
     {
         std::map<unsigned int, WeaponSet *>::iterator it = this->weaponSets_.find(firemode);
         if (it != this->weaponSets_.end() && it->second)
-            it->second->fire();
+            it->second->push();
+    }
+
+    void WeaponSystem::release(unsigned int firemode)
+    {
+        std::map<unsigned int, WeaponSet *>::iterator it = this->weaponSets_.find(firemode);
+        if (it != this->weaponSets_.end() && it->second)
+            it->second->release();
     }
 
Index: code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSystem.h
===================================================================
--- code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSystem.h	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/weaponsystem/WeaponSystem.h	(revision 11208)
@@ -76,5 +76,6 @@
             void changeWeaponmode(WeaponPack * wPack, WeaponSet * wSet, unsigned int weaponmode);
 
-            void fire(unsigned int firemode);
+            void push(unsigned int firemode);
+            void release(unsigned int firemode);
             void reload();
 
Index: code/branches/presentationFS16/src/orxonox/worldentities/ControllableEntity.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/worldentities/ControllableEntity.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/worldentities/ControllableEntity.cc	(revision 11208)
@@ -49,5 +49,5 @@
     RegisterClass(ControllableEntity);
 
-    registerMemberNetworkFunction( ControllableEntity, fire );
+    registerMemberNetworkFunction( ControllableEntity, push );
     registerMemberNetworkFunction( ControllableEntity, setTargetInternal );
 
@@ -299,13 +299,25 @@
     }
 
-    void ControllableEntity::fire(unsigned int firemode)
+    void ControllableEntity::push(unsigned int firemode)
     {
         if(GameMode::isMaster())
         {
-            this->fired(firemode);
+            this->pushed(firemode);
         }
         else
         {
-            callMemberNetworkFunction(&ControllableEntity::fire, this->getObjectID(), 0, firemode);
+            callMemberNetworkFunction(&ControllableEntity::push, this->getObjectID(), 0, firemode);
+        }
+    }
+
+    void ControllableEntity::release(unsigned int firemode)
+    {
+        if(GameMode::isMaster())
+        {
+            this->released(firemode);
+        }
+        else
+        {
+            callMemberNetworkFunction(&ControllableEntity::release, this->getObjectID(), 0, firemode);
         }
     }
Index: code/branches/presentationFS16/src/orxonox/worldentities/ControllableEntity.h
===================================================================
--- code/branches/presentationFS16/src/orxonox/worldentities/ControllableEntity.h	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/worldentities/ControllableEntity.h	(revision 11208)
@@ -96,6 +96,8 @@
                 { this->rotateRoll(Vector2(value, 0)); }
 
-            void fire(unsigned int firemode);
-            virtual void fired(unsigned int firemode) {}
+            void push(unsigned int firemode);
+            void release(unsigned int firemode);
+            virtual void pushed(unsigned int firemode) {}
+            virtual void released(unsigned int firemode) {}
             virtual void reload() {}
 
Index: code/branches/presentationFS16/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/worldentities/pawns/Pawn.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/worldentities/pawns/Pawn.cc	(revision 11208)
@@ -432,8 +432,14 @@
     */
 
-    void Pawn::fired(unsigned int firemode)
-    {
-        if (this->weaponSystem_)
-            this->weaponSystem_->fire(firemode);
+    void Pawn::pushed(unsigned int firemode)
+    {
+        if (this->weaponSystem_)
+            this->weaponSystem_->push(firemode);
+    }
+
+    void Pawn::released(unsigned int firemode)
+    {
+        if (this->weaponSystem_)
+            this->weaponSystem_->release(firemode);
     }
 
Index: code/branches/presentationFS16/src/orxonox/worldentities/pawns/Pawn.h
===================================================================
--- code/branches/presentationFS16/src/orxonox/worldentities/pawns/Pawn.h	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/worldentities/pawns/Pawn.h	(revision 11208)
@@ -157,5 +157,6 @@
             virtual void kill();
 
-            virtual void fired(unsigned int firemode) override;
+            virtual void pushed(unsigned int firemode) override;
+            virtual void released(unsigned int firemode) override;
             virtual void postSpawn();
 
Index: code/branches/presentationFS16/src/orxonox/worldentities/pawns/Spectator.cc
===================================================================
--- code/branches/presentationFS16/src/orxonox/worldentities/pawns/Spectator.cc	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/worldentities/pawns/Spectator.cc	(revision 11208)
@@ -42,5 +42,5 @@
 namespace orxonox
 {
-    extern const std::string __CC_fire_name;
+    extern const std::string __CC_push_name;
     extern const std::string __CC_suicide_name;
 
@@ -162,5 +162,5 @@
 
         // change keybind mode of fire command to OnPress to avoid firing after respawn
-        ModifyConsoleCommand(__CC_fire_name).keybindMode(KeybindMode::OnPress);
+        ModifyConsoleCommand(__CC_push_name).keybindMode(KeybindMode::OnPress);
 
         // disable suicide
@@ -177,5 +177,5 @@
         // change fire command to a helper function and change keybind mode to OnPress
         // as soon as the player releases and presses the button again, the helper function will be called which changes the keybind mode back to OnHold
-        ModifyConsoleCommand(__CC_fire_name).pushFunction(&Spectator::resetFireCommand).keybindMode(KeybindMode::OnPress);
+        ModifyConsoleCommand(__CC_push_name).pushFunction(&Spectator::resetFireCommand).keybindMode(KeybindMode::OnPress);
 
         // enable suicide
@@ -188,7 +188,7 @@
     void Spectator::resetFireCommand(unsigned int firemode)
     {
-        ModifyConsoleCommand(__CC_fire_name).popFunction().keybindMode(KeybindMode::OnHold); // pop this helper function and change keybind mode
-
-        CommandExecutor::execute(__CC_fire_name + " " + multi_cast<std::string>(firemode)); // call the fire command again, this time with the real function
+        ModifyConsoleCommand(__CC_push_name).popFunction().keybindMode(KeybindMode::OnHold); // pop this helper function and change keybind mode
+
+        CommandExecutor::execute(__CC_push_name + " " + multi_cast<std::string>(firemode)); // call the fire command again, this time with the real function
     }
 
@@ -229,5 +229,5 @@
     }
 
-    void Spectator::fired(unsigned int firemode)
+    void Spectator::pushed(unsigned int firemode)
     {
         if (this->getPlayer())
Index: code/branches/presentationFS16/src/orxonox/worldentities/pawns/Spectator.h
===================================================================
--- code/branches/presentationFS16/src/orxonox/worldentities/pawns/Spectator.h	(revision 11207)
+++ code/branches/presentationFS16/src/orxonox/worldentities/pawns/Spectator.h	(revision 11208)
@@ -54,5 +54,5 @@
             virtual void rotateRoll(const Vector2& value);
 
-            virtual void fired(unsigned int firemode);
+            virtual void pushed(unsigned int firemode);
             virtual void greet();
             virtual void mouseLook() {}
