Index: code/branches/gameimmersion/src/orxonox/controllers/HumanController.cc
===================================================================
--- code/branches/gameimmersion/src/orxonox/controllers/HumanController.cc	(revision 8378)
+++ code/branches/gameimmersion/src/orxonox/controllers/HumanController.cc	(revision 8379)
@@ -42,4 +42,5 @@
     extern const std::string __CC_fire_name = "fire";
     extern const std::string __CC_suicide_name = "suicide";
+    const std::string __CC_boost_name = "boost";
 
     SetConsoleCommand("HumanController", "moveFrontBack",          &HumanController::moveFrontBack ).addShortcut().setAsInputCommand();
@@ -51,5 +52,5 @@
     SetConsoleCommand("HumanController", __CC_fire_name,           &HumanController::fire          ).addShortcut().keybindMode(KeybindMode::OnHold);
     SetConsoleCommand("HumanController", "reload",                 &HumanController::reload        ).addShortcut();
-    SetConsoleCommand("HumanController", "boost",                  &HumanController::boost         ).addShortcut().keybindMode(KeybindMode::OnHold);
+    SetConsoleCommand("HumanController", __CC_boost_name,          &HumanController::toggleBoost   ).addShortcut().keybindMode(KeybindMode::OnPress);
     SetConsoleCommand("HumanController", "greet",                  &HumanController::greet         ).addShortcut();
     SetConsoleCommand("HumanController", "switchCamera",           &HumanController::switchCamera  ).addShortcut();
@@ -72,4 +73,5 @@
 
         controlPaused_ = false;
+        this->boosting_ = false;
 
         HumanController::localController_s = this;
@@ -163,8 +165,30 @@
     }
 
-    void HumanController::boost()
-    {
-        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
-            HumanController::localController_s->controllableEntity_->boost();
+    /**
+    @brief
+        Static method,toggles boosting.
+    */
+    /*static*/ void HumanController::toggleBoost()
+    {
+        if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
+            HumanController::localController_s->toggleBoosting();
+    }
+    
+    /**
+    @brief
+        Toggles the boosting mode.
+        Changes the keybind mode of the boost console command and tells the ControllableEntity to boost (or not boost anymore).
+    */
+    void HumanController::toggleBoosting(void)
+    {
+        this->boosting_ = !this->boosting_;
+        
+        // The keybind mode of the boosting console command is onRelease if in boosting mode and onPress of not in boosting mode.
+        if(this->boosting_)
+            ModifyConsoleCommand(__CC_boost_name).keybindMode(KeybindMode::OnRelease);
+        else
+            ModifyConsoleCommand(__CC_boost_name).keybindMode(KeybindMode::OnPress);
+
+        this->controllableEntity_->boost(this->boosting_);
     }
 
Index: code/branches/gameimmersion/src/orxonox/controllers/HumanController.h
===================================================================
--- code/branches/gameimmersion/src/orxonox/controllers/HumanController.h	(revision 8378)
+++ code/branches/gameimmersion/src/orxonox/controllers/HumanController.h	(revision 8379)
@@ -64,5 +64,13 @@
             static void reload();
 
-            static void boost();
+            static void toggleBoost(); // Static method,toggles boosting.
+            /**
+            @brief Check whether the HumanController is in boosting mode.
+            @return Returns true if it is, false if not.
+            */
+            inline bool isBoosting(void)
+                { return this->boosting_; }
+            void toggleBoosting(void); // Toggles the boosting mode.
+            
             static void greet();
             static void switchCamera();
@@ -92,4 +100,8 @@
             static HumanController* localController_s;
             bool controlPaused_;
+        
+        private:
+            bool boosting_; // Whether the HumanController is in boosting mode or not.
+
     }; // tolua_export
 } // tolua_export
Index: code/branches/gameimmersion/src/orxonox/items/Engine.cc
===================================================================
--- code/branches/gameimmersion/src/orxonox/items/Engine.cc	(revision 8378)
+++ code/branches/gameimmersion/src/orxonox/items/Engine.cc	(revision 8379)
@@ -204,6 +204,4 @@
         this->ship_->setAcceleration(this->ship_->getOrientation() * (acceleration*this->getSpeedMultiply()+Vector3(0,0,-this->getSpeedAdd())));
 
-        if (!this->ship_->getPermanentBoost())
-            this->ship_->setBoost(false);
         this->ship_->setSteeringDirection(Vector3::ZERO);
 
Index: code/branches/gameimmersion/src/orxonox/worldentities/ControllableEntity.cc
===================================================================
--- code/branches/gameimmersion/src/orxonox/worldentities/ControllableEntity.cc	(revision 8378)
+++ code/branches/gameimmersion/src/orxonox/worldentities/ControllableEntity.cc	(revision 8379)
@@ -84,5 +84,4 @@
         this->client_angular_velocity_ = Vector3::ZERO;
 
-
         this->setConfigValues();
         this->setPriority( Priority::VeryHigh );
Index: code/branches/gameimmersion/src/orxonox/worldentities/ControllableEntity.h
===================================================================
--- code/branches/gameimmersion/src/orxonox/worldentities/ControllableEntity.h	(revision 8378)
+++ code/branches/gameimmersion/src/orxonox/worldentities/ControllableEntity.h	(revision 8379)
@@ -93,5 +93,11 @@
             virtual void reload() {}
 
-            virtual void boost() {}
+            /**
+            @brief Tells the ControllableEntity to either start or stop boosting.
+                   This doesn't mean, that the ControllableEntity will do so, there might be additional restrictions on boosting, but if it can, then it will.
+            @param bBoost If true the ControllableEntity is told to start boosting, if false it is told to stop.
+            */
+            virtual void boost(bool bBoost) {}
+            
             virtual void greet() {}
             virtual void switchCamera();
Index: code/branches/gameimmersion/src/orxonox/worldentities/pawns/SpaceShip.cc
===================================================================
--- code/branches/gameimmersion/src/orxonox/worldentities/pawns/SpaceShip.cc	(revision 8378)
+++ code/branches/gameimmersion/src/orxonox/worldentities/pawns/SpaceShip.cc	(revision 8379)
@@ -55,5 +55,4 @@
         this->localAngularAcceleration_.setValue(0, 0, 0);
         this->bBoost_ = false;
-        this->bPermanentBoost_ = false;
         this->steering_ = Vector3::ZERO;
         this->engine_ = 0;
@@ -83,5 +82,5 @@
 	this->cameraOriginalOrientation = c->getOrientation();
 
-	this->shakeFrequency_ = 20;
+	this->shakeFrequency_ = 50;
 	this->shakeAmplitude_ = 40;
 	this->shakeDt_ = 0;
@@ -114,4 +113,8 @@
         registerVariable(this->auxilaryThrust_, VariableDirection::ToClient);
         registerVariable(this->rotationThrust_, VariableDirection::ToClient);
+        registerVariable(this->boostPower_, VariableDirection::ToClient);
+        registerVariable(this->boostPowerRate_, VariableDirection::ToClient);
+        registerVariable(this->boostRate_, VariableDirection::ToClient);
+        registerVariable(this->boostCooldownDuration_, VariableDirection::ToClient);
     }
 
@@ -163,5 +166,5 @@
 
 
-	Camera* c = this->getCamera();
+
             if(this->bBoost_)
             {
@@ -177,4 +180,6 @@
 		{
 			this->shakeDt_ += dt;
+			
+			Camera* c = this->getCamera();
 
 			//Shaking Camera effect
@@ -201,10 +206,4 @@
 		}
             }
-	    else
-	    {
-		    //reset the camera, if the boost is not active
-		    //TODO: don't call this every tick
-		    this->resetCamera();
-	    }
         }
     }
@@ -254,26 +253,25 @@
     }
 
-    // TODO: something seems to call this function every tick, could probably handled a little more efficiently!
-    void SpaceShip::setBoost(bool bBoost)
-    {
-        if(bBoost == this->bBoost_)
-            return;
-
-        if(bBoost)
-            this->boost();
-        else
-        {
+    void SpaceShip::fire()
+    {
+    }
+
+    /**
+    @brief
+        Starts or stops boosting.
+    @param bBoost
+        Whether to start or stop boosting.
+    */
+    void SpaceShip::boost(bool bBoost)
+    {
+	Camera* c = this->getCamera();
+	
+        if(bBoost && !this->bBoostCooldown_)
+            this->bBoost_ = true;
+        if(!bBoost)
+	{
             this->bBoost_ = false;
-        }
-    }
-
-    void SpaceShip::fire()
-    {
-    }
-
-    void SpaceShip::boost()
-    {
-        if(!this->bBoostCooldown_)
-            this->bBoost_ = true;
+	    this->resetCamera();
+	}
     }
 
@@ -326,4 +324,12 @@
 	    
 	    assert(c != 0);
+	  
+	    if (c == 0)
+	    {
+		    COUT(2) << "Failed to reset camera!";
+	    	    return;
+	    }
+	    
+	    shakeDt_ = 0;
 	    
 	    c->setAngularVelocity(Vector3(0,0,0));
Index: code/branches/gameimmersion/src/orxonox/worldentities/pawns/SpaceShip.h
===================================================================
--- code/branches/gameimmersion/src/orxonox/worldentities/pawns/SpaceShip.h	(revision 8378)
+++ code/branches/gameimmersion/src/orxonox/worldentities/pawns/SpaceShip.h	(revision 8379)
@@ -59,5 +59,5 @@
 
             virtual void fire();
-            virtual void boost();
+            virtual void boost(bool bBoost); // Starts or stops boosting.
 
             void setEngine(Engine* engine);
@@ -70,5 +70,4 @@
                 { return this->steering_; }
 
-            void setBoost(bool bBoost);
             inline bool getBoost() const
                 { return this->bBoost_; }
@@ -79,9 +78,4 @@
                 { return this->enginetemplate_; }
 
-            inline void setPermanentBoost(bool bPermanent)
-                { this->bPermanentBoost_ = bPermanent; }
-            inline bool getPermanentBoost() const
-                { return this->bPermanentBoost_; }
-
         protected:
             virtual std::vector<PickupCarrier*>* getCarrierChildren(void) const;
@@ -90,5 +84,4 @@
             bool bBoost_;
             bool bBoostCooldown_;
-            bool bPermanentBoost_;
             float boostPower_;
             float initialBoostPower_;
