Index: code/branches/presentationHS15/src/libraries/core/input/KeyBinder.cc
===================================================================
--- code/branches/presentationHS15/src/libraries/core/input/KeyBinder.cc	(revision 11032)
+++ code/branches/presentationHS15/src/libraries/core/input/KeyBinder.cc	(revision 11034)
@@ -359,4 +359,44 @@
     /**
     @brief
+        Return the first key name for a specific command in a human readable form
+    */
+    const std::string& KeyBinder::getBindingReadable(const std::string& commandName)
+    {
+        const std::string& binding = this->getBinding(commandName);
+
+        SubString substring = SubString(binding, ".");
+        std::string name;
+        std::string group;
+        switch(substring.size())
+        {
+            case 0:
+                return binding;
+            case 1:
+                return binding;
+            case 2:
+                group = substring[0];
+            default:
+                name = substring.subSet(1).join(".");
+        }
+
+        std::stringstream stream;
+        if(group.compare("Keys") == 0)
+            stream << "Key " << name.substr(3);
+        else if(group.compare("MouseButtons") == 0)
+            stream << "Mouse " << name;
+        else if(group.compare("JoyStickButtons") == 0)
+            stream << "Joystick " << name;
+        else if(group.compare("JoyStickAxes") == 0)
+            stream << "Joystick Axis" << name.substr(5, 6) << name.substr(name.find("Axis")+6);
+        else if(group.compare("MouseAxes") == 0)
+            stream << "Mouse " << name.substr(1,3) << " " << name.substr(0, 1) << "-Axis";
+        else
+            return binding;
+
+        return *(new std::string(stream.str()));
+    }
+
+    /**
+    @brief
         Get the number of different key bindings of a specific command.
     @param commandName
Index: code/branches/presentationHS15/src/libraries/core/input/KeyBinder.h
===================================================================
--- code/branches/presentationHS15/src/libraries/core/input/KeyBinder.h	(revision 11032)
+++ code/branches/presentationHS15/src/libraries/core/input/KeyBinder.h	(revision 11034)
@@ -68,4 +68,5 @@
         const std::string& getBinding(const std::string& commandName); //tolua_export
         const std::string& getBinding(const std::string& commandName, unsigned int index); //tolua_export
+        const std::string& getBindingReadable(const std::string& commandName); //tolua_export
         unsigned int getNumberOfBindings(const std::string& commandName); //tolua_export
 
Index: code/branches/presentationHS15/src/modules/notifications/dispatchers/CommandNotification.cc
===================================================================
--- code/branches/presentationHS15/src/modules/notifications/dispatchers/CommandNotification.cc	(revision 11032)
+++ code/branches/presentationHS15/src/modules/notifications/dispatchers/CommandNotification.cc	(revision 11034)
@@ -101,51 +101,7 @@
         std::stringstream stream;
         stream << this->getPreMessage();
-        stream << this->bindingNiceifyer(KeyBinderManager::getInstance().getCurrent()->getBinding(this->getCommand()));
+        stream << KeyBinderManager::getInstance().getCurrent()->getBindingReadable(this->getCommand());
         stream << this->getPostMessage();
         return *(new std::string(stream.str()));
     }
-
-    /**
-    @brief
-        Transforms the input binding into a human readable form.
-    @param binding
-        The binding to be transformed
-    @return
-        Returns a human readable version of the input binding.
-    */
-    //TODO: Move to KeyBinderManager...
-    const std::string& CommandNotification::bindingNiceifyer(const std::string& binding)
-    {
-        SubString substring = SubString(binding, ".");
-        std::string name;
-        std::string group;
-        switch(substring.size())
-        {
-            case 0:
-                return binding;
-            case 1:
-                return binding;
-            case 2:
-                group = substring[0];
-            default:
-                name = substring.subSet(1).join(".");
-        }
-
-        std::stringstream stream;
-        if(group.compare("Keys") == 0)
-            stream << "Key " << name.substr(3);
-        else if(group.compare("MouseButtons") == 0)
-            stream << "Mouse " << name;
-        else if(group.compare("JoyStickButtons") == 0)
-            stream << "Joystick " << name;
-        else if(group.compare("JoyStickAxes") == 0)
-            stream << "Joystick Axis" << name.substr(5, 6) << name.substr(name.find("Axis")+6);
-        else if(group.compare("MouseAxes") == 0)
-            stream << "Mouse " << name.substr(1,3) << " " << name.substr(0, 1) << "-Axis";
-        else
-            return binding;
-
-        return *(new std::string(stream.str()));
-    }
-
 }
Index: code/branches/presentationHS15/src/modules/notifications/dispatchers/CommandNotification.h
===================================================================
--- code/branches/presentationHS15/src/modules/notifications/dispatchers/CommandNotification.h	(revision 11032)
+++ code/branches/presentationHS15/src/modules/notifications/dispatchers/CommandNotification.h	(revision 11034)
@@ -122,7 +122,4 @@
             void setPostMessage(const std::string& message)
                  { this->postMessage_ = message; }
-
-            const std::string& bindingNiceifyer(const std::string& binding); //!< Transforms the input binding into a human readable form.
-
     };
 
Index: code/branches/presentationHS15/src/modules/towerdefense/TowerDefenseTower.cc
===================================================================
--- code/branches/presentationHS15/src/modules/towerdefense/TowerDefenseTower.cc	(revision 11032)
+++ code/branches/presentationHS15/src/modules/towerdefense/TowerDefenseTower.cc	(revision 11034)
@@ -62,4 +62,5 @@
             upgrade++;
             this->setDamageMultiplier((upgrade+1)*2.0f);
+
             //this->setRotationThrust(2*this->getRotationThrust());
             //this->addTemplate("towerturret1");
Index: code/branches/presentationHS15/src/orxonox/weaponsystem/Munition.cc
===================================================================
--- code/branches/presentationHS15/src/orxonox/weaponsystem/Munition.cc	(revision 11032)
+++ code/branches/presentationHS15/src/orxonox/weaponsystem/Munition.cc	(revision 11034)
@@ -542,5 +542,5 @@
         this->bLoaded_ = false;
 
-        if (bUseReloadTime && munition->reloadTime_ > 0 && !munition->deployment_ == MunitionDeployment::Stack)
+        if (bUseReloadTime && munition->reloadTime_ > 0 && munition->deployment_ != MunitionDeployment::Stack)
         {
             const ExecutorPtr& executor = createExecutor(createFunctor(&Magazine::loaded, this));
Index: code/branches/presentationHS15/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/presentationHS15/src/orxonox/worldentities/pawns/Pawn.cc	(revision 11032)
+++ code/branches/presentationHS15/src/orxonox/worldentities/pawns/Pawn.cc	(revision 11034)
@@ -34,4 +34,5 @@
 #include "core/GameMode.h"
 #include "core/XMLPort.h"
+#include "core/EventIncludes.h"
 #include "network/NetworkFunction.h"
 
@@ -62,4 +63,5 @@
 
         this->bAlive_ = true;
+        this->bVulnerable_ = true;
 
         this->health_ = 0;
@@ -136,4 +138,6 @@
         XMLPortParam(Pawn, "shieldabsorption", setShieldAbsorption, getShieldAbsorption, xmlelement, mode).defaultValues(0);
 
+        XMLPortParam(Pawn, "vulnerable", setVulnerable, isVulnerable, xmlelement, mode).defaultValues(true);
+
         XMLPortParam(Pawn, "spawnparticlesource", setSpawnParticleSource, getSpawnParticleSource, xmlelement, mode);
         XMLPortParam(Pawn, "spawnparticleduration", setSpawnParticleDuration, getSpawnParticleDuration, xmlelement, mode).defaultValues(3.0f);
@@ -145,11 +149,18 @@
         XMLPortObject(Pawn, Munition, "munition", addMunitionXML, getMunitionXML, xmlelement, mode);
 
+        XMLPortObject(Pawn, ExplosionPart, "explosion", addExplosionPart, getExplosionPart, xmlelement, mode);
         XMLPortParam(Pawn, "shieldrechargerate", setShieldRechargeRate, getShieldRechargeRate, xmlelement, mode).defaultValues(0);
         XMLPortParam(Pawn, "shieldrechargewaittime", setShieldRechargeWaitTime, getShieldRechargeWaitTime, xmlelement, mode).defaultValues(1.0f);
-        XMLPortObject(Pawn, ExplosionPart, "explosion", addExplosionPart, getExplosionPart, xmlelement, mode);
 
         XMLPortParam(Pawn, "explosionSound",  setExplosionSound,  getExplosionSound,  xmlelement, mode);
 
         XMLPortParam ( RadarViewable, "radarname", setRadarName, getRadarName, xmlelement, mode );
+    }
+
+    void Pawn::XMLEventPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(Pawn, XMLEventPort, xmlelement, mode);
+
+        XMLPortEventState(Pawn, BaseObject, "vulnerability", setVulnerable, xmlelement, mode);
     }
 
@@ -246,6 +257,17 @@
     }
 
+    void Pawn::changedVulnerability()
+    {
+
+    }
+
     void Pawn::damage(float damage, float healthdamage, float shielddamage, Pawn* originator, const btCollisionShape* cs)
     {
+        // A pawn can only get damaged if it is vulnerable
+        if (!isVulnerable())
+        {
+            return;
+        }
+
         // Applies multiplier given by the DamageBoost Pickup.
         if (originator)
Index: code/branches/presentationHS15/src/orxonox/worldentities/pawns/Pawn.h
===================================================================
--- code/branches/presentationHS15/src/orxonox/worldentities/pawns/Pawn.h	(revision 11032)
+++ code/branches/presentationHS15/src/orxonox/worldentities/pawns/Pawn.h	(revision 11034)
@@ -64,4 +64,5 @@
 
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode);
             virtual void tick(float dt);
 
@@ -133,4 +134,18 @@
 
             virtual void decreaseShieldRechargeCountdownTime(float dt);
+
+            /** @brief Sets the state of the pawns vulnerability. @param bVulnerable */
+            inline void setVulnerable(bool bVulnerable)
+            {
+                if (this->bVulnerable_ != bVulnerable)
+                {
+                    this->bVulnerable_ = bVulnerable;
+                    this->changedVulnerability();
+                }
+            }
+            /** @brief Returns the state of the pawns vulnerability. @return The state of the vulnerability */
+            inline const bool& isVulnerable() const { return this->bVulnerable_; }
+            /** @brief This function gets called if the vulnerability of the pawn changes. */
+            virtual void changedVulnerability();
 
             inline ControllableEntity* getLastHitOriginator() const
@@ -219,4 +234,5 @@
 
             bool bAlive_;
+            bool bVulnerable_; ///< If false the pawn may not ged damaged
 
             virtual std::vector<PickupCarrier*>* getCarrierChildren(void) const
