Index: code/branches/sagerjFS16/data/defaultConfig/keybindings.ini
===================================================================
--- code/branches/sagerjFS16/data/defaultConfig/keybindings.ini	(revision 11174)
+++ code/branches/sagerjFS16/data/defaultConfig/keybindings.ini	(revision 11175)
@@ -122,5 +122,5 @@
 KeyStop=
 KeySystemRequest="printScreen"
-KeyT= onpress fire 3 | onrelease release 3
+KeyT= onpress push 3 | onrelease release 3
 KeyTab="NewHumanController changeMode"
 KeyU=""
@@ -142,5 +142,5 @@
 KeyWebStop=
 KeyX="selectClosest"
-KeyY= onpress fire 4 | onrelease release 4
+KeyY= onpress push 4 | onrelease release 4
 KeyYen=
 KeyZ="selectNext"
@@ -152,7 +152,7 @@
 Button6=
 Button7=
-Left= fire 0 | release 0
-Middle= fire 2 | release 2
-Right= fire 1 | release 1
+Left= push 0 | release 0
+Middle= push 2 | release 2
+Right= push 1 | release 1
 Wheel1Down="NewHumanController decelerate"
 Wheel1Up="NewHumanController accelerate"
Index: code/branches/sagerjFS16/src/modules/invader/InvaderEnemyShooter.cc
===================================================================
--- code/branches/sagerjFS16/src/modules/invader/InvaderEnemyShooter.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/invader/InvaderEnemyShooter.cc	(revision 11175)
@@ -71,5 +71,5 @@
     void InvaderEnemyShooter::shoot()
     {
-        ControllableEntity::fire(0);
+        ControllableEntity::push(0);
     }
 
Index: code/branches/sagerjFS16/src/modules/invader/InvaderShip.cc
===================================================================
--- code/branches/sagerjFS16/src/modules/invader/InvaderShip.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/invader/InvaderShip.cc	(revision 11175)
@@ -91,5 +91,5 @@
         // shoot!
         if (isFireing)
-            ControllableEntity::fire(0);
+            ControllableEntity::push(0);
 
         // Camera
Index: code/branches/sagerjFS16/src/modules/jump/JumpFigure.cc
===================================================================
--- code/branches/sagerjFS16/src/modules/jump/JumpFigure.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/jump/JumpFigure.cc	(revision 11175)
@@ -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/sagerjFS16/src/modules/jump/JumpFigure.h
===================================================================
--- code/branches/sagerjFS16/src/modules/jump/JumpFigure.h	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/jump/JumpFigure.h	(revision 11175)
@@ -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/sagerjFS16/src/modules/objects/controllers/TurretController.cc
===================================================================
--- code/branches/sagerjFS16/src/modules/objects/controllers/TurretController.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/objects/controllers/TurretController.cc	(revision 11175)
@@ -198,5 +198,5 @@
             {
 
-                this->getControllableEntity()->fire(0);
+                this->getControllableEntity()->push(0);
             }
         }
Index: code/branches/sagerjFS16/src/modules/towerdefense/TowerDefenseSelecter.cc
===================================================================
--- code/branches/sagerjFS16/src/modules/towerdefense/TowerDefenseSelecter.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/towerdefense/TowerDefenseSelecter.cc	(revision 11175)
@@ -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/sagerjFS16/src/modules/towerdefense/TowerDefenseSelecter.h
===================================================================
--- code/branches/sagerjFS16/src/modules/towerdefense/TowerDefenseSelecter.h	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/towerdefense/TowerDefenseSelecter.h	(revision 11175)
@@ -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/sagerjFS16/src/modules/weapons/projectiles/Rocket.cc
===================================================================
--- code/branches/sagerjFS16/src/modules/weapons/projectiles/Rocket.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/weapons/projectiles/Rocket.cc	(revision 11175)
@@ -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/sagerjFS16/src/modules/weapons/projectiles/Rocket.h
===================================================================
--- code/branches/sagerjFS16/src/modules/weapons/projectiles/Rocket.h	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/weapons/projectiles/Rocket.h	(revision 11175)
@@ -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/sagerjFS16/src/modules/weapons/projectiles/RocketOld.cc
===================================================================
--- code/branches/sagerjFS16/src/modules/weapons/projectiles/RocketOld.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/weapons/projectiles/RocketOld.cc	(revision 11175)
@@ -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/sagerjFS16/src/modules/weapons/projectiles/RocketOld.h
===================================================================
--- code/branches/sagerjFS16/src/modules/weapons/projectiles/RocketOld.h	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/weapons/projectiles/RocketOld.h	(revision 11175)
@@ -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/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.cc
===================================================================
--- code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.cc	(revision 11175)
@@ -54,5 +54,5 @@
         this->damage_ = 90.01f;
         this->speed_ = 90.01f;
-        this->chargeable_ = 0;
+        this->chargeable_ = true;
 
         this->setMunitionName("LaserMunition");
@@ -65,5 +65,5 @@
     void Discharger::fire()
     {
-        orxout() << "release" << cTime_ << endl;
+        // orxout() << "release" << cTime_ << endl;
         BillboardProjectile* projectile = new BillboardProjectile(this->getContext());
 
@@ -71,11 +71,11 @@
         projectile->setOrientation(this->getMuzzleOrientation());
         projectile->setPosition(this->getMuzzlePosition());
-        projectile->setVelocity(this->getMuzzleDirection() * this->speed_ * charges_);
+        projectile->setVelocity(this->getMuzzleDirection() * this->speed_);
 
         projectile->setShooter(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
         projectile->setDamage(this->getDamage() * charges_);
-        projectile->setShieldDamage(this->getShieldDamage() * charges_);
-        projectile->setHealthDamage(this->getHealthDamage() * charges_);
-        this->charges_ = 0;
+        projectile->setShieldDamage(this->getShieldDamage());
+        projectile->setHealthDamage(this->getHealthDamage());
+        //  this->charges_ = 0;
     }
 }
Index: code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.h
===================================================================
--- code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.h	(revision 11174)
+++ code/branches/sagerjFS16/src/modules/weapons/weaponmodes/Discharger.h	(revision 11175)
@@ -58,8 +58,9 @@
 
         private:
-            bool chargeable_;       // An indicator that this weapon type is chargeable.
-            float speed_;           // The speed of the fired projectile.
-            float ctime_;           // time the weapon has charged.
-    };
+            //bool chargeable_;     // An indicator that this weapon type is chargeable.
+            int charges_;
+            float speed_;                  // The speed of the fired projectile.
+            float ctime_;                  // time the weapon has charged.
+    }; 
 }
 
Index: code/branches/sagerjFS16/src/orxonox/controllers/AIController.cc
===================================================================
--- code/branches/sagerjFS16/src/orxonox/controllers/AIController.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/orxonox/controllers/AIController.cc	(revision 11175)
@@ -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/sagerjFS16/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- code/branches/sagerjFS16/src/orxonox/controllers/ArtificialController.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/orxonox/controllers/ArtificialController.cc	(revision 11175)
@@ -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/sagerjFS16/src/orxonox/controllers/ArtificialController.h
===================================================================
--- code/branches/sagerjFS16/src/orxonox/controllers/ArtificialController.h	(revision 11174)
+++ code/branches/sagerjFS16/src/orxonox/controllers/ArtificialController.h	(revision 11175)
@@ -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/sagerjFS16/src/orxonox/controllers/DroneController.cc
===================================================================
--- code/branches/sagerjFS16/src/orxonox/controllers/DroneController.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/orxonox/controllers/DroneController.cc	(revision 11175)
@@ -130,5 +130,5 @@
                        this->aimAtTarget();
                        if(!this->friendlyFire())
-                           this->getDrone()->fire(0);
+                           this->getDrone()->push(0);
                     }
                }
Index: code/branches/sagerjFS16/src/orxonox/controllers/FightingController.cc
===================================================================
--- code/branches/sagerjFS16/src/orxonox/controllers/FightingController.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/orxonox/controllers/FightingController.cc	(revision 11175)
@@ -318,5 +318,5 @@
         }
               
-        this->getControllableEntity()->fire(firemode);
+        this->getControllableEntity()->push(firemode);
         
     }
Index: code/branches/sagerjFS16/src/orxonox/controllers/WaypointPatrolController.cc
===================================================================
--- code/branches/sagerjFS16/src/orxonox/controllers/WaypointPatrolController.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/orxonox/controllers/WaypointPatrolController.cc	(revision 11175)
@@ -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/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.cc
===================================================================
--- code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.cc	(revision 11175)
@@ -63,4 +63,5 @@
         this->bAutoReload_ = true;
         this->bParallelReload_ = true;
+        this->chargeable_ = false;
 
         this->reloadTimer_.setTimer(0.0f, false, createExecutor(createFunctor(&WeaponMode::reloaded, this)));
@@ -120,4 +121,5 @@
     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
@@ -170,19 +172,27 @@
     bool WeaponMode::push(float* reloadTime)
     {
+        orxout() << "push " << chargeable_ << endl;
         if( this->chargeable_)
         {
             // setting up a timer for knowing how long the weapon was charged 
             // and passes the value to this->cTime_
+            orxout() << "if " << endl;
+            return false;
         } else {
+            orxout() << "else " << endl;
             return fire(reloadTime);
         }
-        
     }
 
     bool WeaponMode::release(float* reloadTime)
     {
+        orxout() << "release " << endl;
         if( this->chargeable_)
-        {
+        { 
+            orxout() << "if " << endl;
             return fire(reloadTime);
+        }else{
+            orxout() << "else " << endl;
+            return false;
         }
     }
Index: code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.h
===================================================================
--- code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.h	(revision 11174)
+++ code/branches/sagerjFS16/src/orxonox/weaponsystem/WeaponMode.h	(revision 11175)
@@ -174,4 +174,5 @@
             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)
 
             float damage_;
Index: code/branches/sagerjFS16/src/orxonox/worldentities/ControllableEntity.cc
===================================================================
--- code/branches/sagerjFS16/src/orxonox/worldentities/ControllableEntity.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/orxonox/worldentities/ControllableEntity.cc	(revision 11175)
@@ -49,5 +49,5 @@
     RegisterClass(ControllableEntity);
 
-    registerMemberNetworkFunction( ControllableEntity, fire );
+    registerMemberNetworkFunction( ControllableEntity, push );
     registerMemberNetworkFunction( ControllableEntity, setTargetInternal );
 
@@ -307,5 +307,5 @@
         else
         {
-            callMemberNetworkFunction(&ControllableEntity::fire, this->getObjectID(), 0, firemode);
+            callMemberNetworkFunction(&ControllableEntity::push, this->getObjectID(), 0, firemode);
         }
     }
@@ -319,5 +319,5 @@
         else
         {
-            callMemberNetworkFunction(&ControllableEntity::fire, this->getObjectID(), 0, firemode);
+            callMemberNetworkFunction(&ControllableEntity::release, this->getObjectID(), 0, firemode);
         }
     }
Index: code/branches/sagerjFS16/src/orxonox/worldentities/pawns/Spectator.cc
===================================================================
--- code/branches/sagerjFS16/src/orxonox/worldentities/pawns/Spectator.cc	(revision 11174)
+++ code/branches/sagerjFS16/src/orxonox/worldentities/pawns/Spectator.cc	(revision 11175)
@@ -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/sagerjFS16/src/orxonox/worldentities/pawns/Spectator.h
===================================================================
--- code/branches/sagerjFS16/src/orxonox/worldentities/pawns/Spectator.h	(revision 11174)
+++ code/branches/sagerjFS16/src/orxonox/worldentities/pawns/Spectator.h	(revision 11175)
@@ -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() {}
