Index: code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc
===================================================================
--- code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc	(revision 10746)
+++ code/branches/fabienHS15/src/modules/overlays/hud/HUDWeaponMode.cc	(revision 10791)
@@ -73,5 +73,5 @@
         this->textOverlayLeft_ = new OverlayText(this->getContext());
         assert(this->textOverlayLeft_.get());
-        this->textOverlayLeft_->setCaption("???");
+        this->textOverlayLeft_->setCaption("?");
         textOverlayLeft_->setPickPoint(Vector2(0.0f,0.0f));
         textOverlayLeft_->setVisible(true);
@@ -83,6 +83,6 @@
         
         this->textOverlayRight_ = new OverlayText(this->getContext());
-        assert(this->textOverlayLeft_.get());
-        this->textOverlayRight_->setCaption("???");
+        assert(this->textOverlayRight_.get());
+        this->textOverlayRight_->setCaption("?");
         textOverlayRight_->setPickPoint(Vector2(0.0f,0.0f));
         textOverlayRight_->setVisible(true);
@@ -93,5 +93,5 @@
         textOverlayRight_->setZOrder(600);
 
-        materialNameState_ = "Orxonox/WSHUD_Reloading";
+        materialNameState_ = "Orxonox/WSHUD_Empty";
 
         overlayElementReplenish_->setMaterialName("Orxonox/WSHUD_Replenish");
@@ -155,18 +155,18 @@
                     materialNameState_ = "Orxonox/WSHUD_Empty";
                 }
-            }
-
-            if (munition->isA(Class(ReplenishingMunition)))
-            {
-                ReplenishingMunition* replenishingMunition = dynamic_cast<ReplenishingMunition*>(munition);
-
-                if (replenishingMunition->canAddMunition(1))
-                {
-                    float progress = 1.0f - replenishingMunition->getProgress();
-                    overlayElementReplenish_->setDimensions(1.0f,progress);                    
-                }
-                else
-                {
-                    overlayElementReplenish_->setDimensions(1.0f,1.0f);
+
+                if (munition->isA(Class(ReplenishingMunition)))
+                {
+                    ReplenishingMunition* replenishingMunition = dynamic_cast<ReplenishingMunition*>(munition);
+
+                    if (replenishingMunition->canAddMunition(1))
+                    {
+                        float progress = 1.0f - replenishingMunition->getProgress();
+                        overlayElementReplenish_->setDimensions(1.0f,progress);                    
+                    }
+                    else
+                    {
+                        overlayElementReplenish_->setDimensions(1.0f,1.0f);
+                    }
                 }
             }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/FusionMunition.cc
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/FusionMunition.cc	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/FusionMunition.cc	(revision 10791)
@@ -34,4 +34,5 @@
 #include "FusionMunition.h"
 #include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
 
 namespace orxonox
@@ -56,3 +57,8 @@
         this->reloadTime_ = 0.5f;
     }
+
+    void FusionMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(FusionMunition, XMLPort, xmlelement, mode);
+    }
 }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/FusionMunition.h
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/FusionMunition.h	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/FusionMunition.h	(revision 10791)
@@ -53,4 +53,5 @@
             FusionMunition(Context* context);
             virtual ~FusionMunition() {}
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     };
 }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/GravityBombMunition.cc
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/GravityBombMunition.cc	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/GravityBombMunition.cc	(revision 10791)
@@ -7,4 +7,5 @@
 #include "GravityBombMunition.h"
 #include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
 
 namespace orxonox
@@ -27,4 +28,8 @@
     }
 
+    void GravityBombMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(GravityBombMunition, XMLPort, xmlelement, mode);
+    }
 }
 
Index: code/branches/fabienHS15/src/modules/weapons/munitions/GravityBombMunition.h
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/GravityBombMunition.h	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/GravityBombMunition.h	(revision 10791)
@@ -28,4 +28,5 @@
             GravityBombMunition(Context* context);
             virtual ~GravityBombMunition() {}
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     };
 
Index: code/branches/fabienHS15/src/modules/weapons/munitions/IceMunition.cc
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/IceMunition.cc	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/IceMunition.cc	(revision 10791)
@@ -34,4 +34,5 @@
 #include "IceMunition.h"
 #include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
 
 namespace orxonox
@@ -54,3 +55,8 @@
         this->reloadTime_ = 0.5f;
     }
+
+    void IceMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(IceMunition, XMLPort, xmlelement, mode);
+    }
 }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/IceMunition.h
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/IceMunition.h	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/IceMunition.h	(revision 10791)
@@ -53,4 +53,5 @@
             IceMunition(Context* context);
             virtual ~IceMunition() {}
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     };
 }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.cc
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.cc	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.cc	(revision 10791)
@@ -34,4 +34,5 @@
 #include "LaserMunition.h"
 #include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
 
 namespace orxonox
@@ -53,7 +54,12 @@
 
         this->replenishInterval_ = 0.5f;
-        this->replenishMunitionAmount_ = 1;
+        this->replenishAmount_ = 1;
 
         this->reloadTime_ = 0.5f;
     }
+
+    void LaserMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(LaserMunition, XMLPort, xmlelement, mode);
+    }
 }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.h
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.h	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/LaserMunition.h	(revision 10791)
@@ -53,4 +53,5 @@
             LaserMunition(Context* context);
             virtual ~LaserMunition() {}
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     };
 }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.cc
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.cc	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.cc	(revision 10791)
@@ -34,4 +34,5 @@
 #include "LightningMunition.h"
 #include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
 
 namespace orxonox
@@ -54,3 +55,8 @@
         this->reloadTime_ = 0.5f;    
     }
+
+    void LightningMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(LightningMunition, XMLPort, xmlelement, mode);
+    }
 }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.h
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.h	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/LightningMunition.h	(revision 10791)
@@ -53,4 +53,5 @@
             LightningMunition(Context* context);
             virtual ~LightningMunition() {}
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     };
 }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/RocketMunition.cc
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/RocketMunition.cc	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/RocketMunition.cc	(revision 10791)
@@ -34,4 +34,5 @@
 #include "RocketMunition.h"
 #include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
 
 namespace orxonox
@@ -54,3 +55,8 @@
         this->reloadTime_ = 0.5f;
     }
+
+    void RocketMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(RocketMunition, XMLPort, xmlelement, mode);
+    }
 }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/RocketMunition.h
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/RocketMunition.h	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/RocketMunition.h	(revision 10791)
@@ -53,4 +53,5 @@
             RocketMunition(Context* context);
             virtual ~RocketMunition() {}
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     };
 }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/SplitMunition.cc
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/SplitMunition.cc	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/SplitMunition.cc	(revision 10791)
@@ -34,4 +34,5 @@
 #include "SplitMunition.h"
 #include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
 
 namespace orxonox
@@ -54,3 +55,8 @@
         this->reloadTime_ = 0.5f;
     }
+
+    void SplitMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(SplitMunition, XMLPort, xmlelement, mode);
+    }
 }
Index: code/branches/fabienHS15/src/modules/weapons/munitions/SplitMunition.h
===================================================================
--- code/branches/fabienHS15/src/modules/weapons/munitions/SplitMunition.h	(revision 10746)
+++ code/branches/fabienHS15/src/modules/weapons/munitions/SplitMunition.h	(revision 10791)
@@ -53,4 +53,5 @@
             SplitMunition(Context* context);
             virtual ~SplitMunition() {}
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     };
 }
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.cc
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.cc	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.cc	(revision 10791)
@@ -24,5 +24,5 @@
  *      Fabian 'x3n' Landau
  *   Co-authors:
- *      ...
+ *      Fabien Vultier
  *
  */
@@ -32,4 +32,5 @@
 #include "core/CoreIncludes.h"
 #include "core/command/Executor.h"
+#include "core/XMLPort.h"
 
 namespace orxonox
@@ -58,4 +59,13 @@
         for (std::map<WeaponMode*, Magazine*>::iterator it = this->currentMagazines_.begin(); it != this->currentMagazines_.end(); ++it)
             delete it->second;
+    }
+
+    void Munition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(Munition, XMLPort, xmlelement, mode);
+
+        XMLPortParam(Munition, "initialmagazines", setNumMagazines, getNumMagazines, xmlelement, mode);
+        XMLPortParam(Munition, "maxmagazines", setMaxMagazines, getMaxMagazines, xmlelement, mode);
+        XMLPortParam(Munition, "munitionpermagazine", setMaxMunitionPerMagazine, getMaxMunitionPerMagazine, xmlelement, mode);
     }
 
@@ -121,4 +131,9 @@
     }
 
+    void Munition::setNumMagazines(unsigned int numMagazines)
+    {
+        this->magazines_ = numMagazines;
+    }
+
     unsigned int Munition::getMaxMunition() const
     {
@@ -138,15 +153,24 @@
             // If we stack munition, we don't care about the current magazine - we just need enough munition in total
             if (deployment_ == MunitionDeployment::Stack)
+            {
                 munition += this->maxMunitionPerMagazine_ * this->magazines_;
+            }
 
             if (munition == 0)
+            {
                 // Absolutely no munition - no chance to take munition
                 return false;
+            }
             else if (this->bAllowMultiMunitionRemovementUnderflow_)
+            {
                 // We're not empty AND we allow underflow, so this will always work
                 return true;
+            }
             else
+            {
                 // We don't allow underflow, so we have to check the amount
                 return (munition >= amount);
+            }
+
         }
         return false;
@@ -200,5 +224,5 @@
     {
         // As long as we have enough magazines (and don't stack munition) we can reload
-        return (this->magazines_ > 0 && !deployment_ == MunitionDeployment::Stack);
+        return (this->magazines_ > 0 && deployment_ != MunitionDeployment::Stack);
     }
 
@@ -236,6 +260,8 @@
 
         // If we don't use separate magazines, set user to 0
-        if (!deployment_ == MunitionDeployment::Separate)
-            user = 0;
+        if (deployment_ != MunitionDeployment::Separate)
+        {
+            user = NULL;
+        }
 
         // Remove the current magazine for the given user
@@ -289,5 +315,5 @@
         {
             // Stacking munition means, if a magazine gets full, the munition adds to a new magazine
-            Magazine* magazine = this->getMagazine(0);
+            Magazine* magazine = this->getMagazine(NULL);
             if (magazine)
             {
@@ -386,5 +412,5 @@
 
         // If zero or less magazines are needed, we definitively don't need more magazines (unless we stack munition - then a magazine contributes directly to the munition)
-        if (needed_magazines <= 0 && !deployment_ == MunitionDeployment::Stack)
+        if (needed_magazines <= 0 && deployment_ != MunitionDeployment::Stack)
             return false;
 
@@ -470,6 +496,6 @@
 
         // If we don't use separate magazines, set user to 0
-        if (!deployment_ == MunitionDeployment::Separate)
-            user = 0;
+        if (deployment_ != MunitionDeployment::Separate)
+            user = NULL;
 
         // Remove the current magazine for the given user
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.h	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/Munition.h	(revision 10791)
@@ -24,5 +24,5 @@
  *      Fabian 'x3n' Landau
  *   Co-authors:
- *      ...
+ *      Fabien Vultier
  *
  */
@@ -68,4 +68,6 @@
             Munition(Context* context);
             virtual ~Munition();
+
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
 
             unsigned int getNumMunition(WeaponMode* user) const;
@@ -118,4 +120,9 @@
         private:
             Magazine* getMagazine(WeaponMode* user) const;
+            inline void setMaxMagazines(unsigned int maxMagazines)
+                { this->maxMagazines_ = maxMagazines; }
+            inline void setMaxMunitionPerMagazine(unsigned int maxMunitionPerMagazine)
+                { this->maxMunitionPerMagazine_ = maxMunitionPerMagazine; }
+            void setNumMagazines(unsigned int numMagazines);
     };
 }
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.cc
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.cc	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.cc	(revision 10791)
@@ -36,4 +36,5 @@
 #include "core/CoreIncludes.h"
 #include "core/command/Executor.h"
+#include "core/XMLPort.h"
 
 namespace orxonox
@@ -46,5 +47,5 @@
 
         this->replenishInterval_ = 1.0f;
-        this->replenishMunitionAmount_ = 1;
+        this->replenishAmount_ = 1;
 
         // Use the timer to initialize itself after the first tick (because the real values for
@@ -53,4 +54,12 @@
         this->replenishingTimer_.setTimer(0.0f, false, createExecutor(createFunctor(&ReplenishingMunition::initializeTimer, this)));
     }
+
+    void ReplenishingMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(ReplenishingMunition, XMLPort, xmlelement, mode);
+
+        XMLPortParam(ReplenishingMunition, "replenishamount", setReplenishAmount, getReplenishAmount, xmlelement, mode);
+        XMLPortParam(ReplenishingMunition, "replenishinterval", setReplenishInterval, getReplenishInterval, xmlelement, mode);
+    }    
 
     float ReplenishingMunition::getProgress()
@@ -67,5 +76,5 @@
     void ReplenishingMunition::replenish()
     {
-        if (this->canAddMunition(this->replenishMunitionAmount_))
+        if (this->canAddMunition(this->replenishAmount_))
         {
             // Make a temporary copy of bAllowMunitionRefilling_, because this might be disallowed in every
@@ -75,5 +84,5 @@
 
             // Replenish munition
-            this->addMunition(this->replenishMunitionAmount_);
+            this->addMunition(this->replenishAmount_);
 
             // Write back the temporary value
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.h	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/ReplenishingMunition.h	(revision 10791)
@@ -53,11 +53,16 @@
             ReplenishingMunition(Context* context);
             virtual ~ReplenishingMunition() {}
+
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            
             virtual float getProgress();
-            inline float getReplenishingMunitionAmount() const
-                { return replenishMunitionAmount_; }
+            inline float getReplenishAmount() const
+                { return replenishAmount_; }
+            inline float getReplenishInterval() const
+                { return replenishInterval_; }
 
         protected:                          
             float replenishInterval_; //!< The interval in which the munition is replenished.
-            unsigned int replenishMunitionAmount_; //!< The amount by which it is replenished.
+            unsigned int replenishAmount_; //!< The amount by which it is replenished.
 
         private:
@@ -66,4 +71,9 @@
 
             Timer replenishingTimer_; //!< Timer to do the replenishing.
+
+            inline void setReplenishAmount(unsigned int replenishAmount)
+                { this->replenishAmount_ = replenishAmount; }
+            inline void setReplenishInterval(float replenishInterval)
+                { this->replenishInterval_ = replenishInterval; }              
     };
 }
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.cc
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.cc	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.cc	(revision 10791)
@@ -155,3 +155,9 @@
             it->second->setWeapon(this);
     }
+
+    void Weapon::updateMunition()
+    {
+        for (std::multimap<unsigned int, WeaponMode*>::iterator it = this->weaponmodes_.begin(); it != this->weaponmodes_.end(); ++it)
+            it->second->updateMunition();
+    }
 }
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.h	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/Weapon.h	(revision 10791)
@@ -79,4 +79,5 @@
             inline WeaponSlot * getWeaponSlot() const
                 { return this->weaponSlot_; }
+            void updateMunition();
 
         private:
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.cc
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.cc	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.cc	(revision 10791)
@@ -243,5 +243,7 @@
         }
         else
-            this->munition_ = 0;
+        {
+            this->munition_ = NULL;
+        }
     }
 
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.h	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponMode.h	(revision 10791)
@@ -153,4 +153,5 @@
                 { return this->hudImageString_; }            
 
+            void updateMunition();
         protected:
             virtual void fire() = 0;
@@ -171,6 +172,5 @@
             std::string hudImageString_;
 
-        private:
-            void updateMunition();
+        private:            
             void reloaded();
 
@@ -189,5 +189,5 @@
 
             WorldSound* defSndWpnFire_;
-            bool        bSoundAttached_;
+            bool bSoundAttached_;
     };
 }
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.cc
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.cc	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.cc	(revision 10791)
@@ -161,3 +161,9 @@
             (*it)->setWeaponPack(this);
     }
+
+    void WeaponPack::updateMunition()
+    {
+        for (std::vector<Weapon *>::const_iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)
+            (*it)->updateMunition();
+    }
 }
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.h	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponPack.h	(revision 10791)
@@ -66,4 +66,5 @@
             inline WeaponSystem * getWeaponSystem() const
                 { return this->weaponSystem_; }
+            void updateMunition();
 
         private:
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.cc
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.cc	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.cc	(revision 10791)
@@ -315,13 +315,35 @@
             return it->second;
         }
-        else if (identifier->getIdentifier()->isA(Class(Munition)))
-        {
-            Munition* munition = identifier->fabricate(this->getContext());
-            this->munitions_[identifier->getIdentifier()] = munition;
-            return munition;
-        }
         else
         {
-            return 0;
+            return NULL;
+        }
+    }
+
+    void WeaponSystem::addMunition(Munition* munition)
+    {
+        if (munition == NULL)
+        {
+            return;
+        }
+
+        SubclassIdentifier<Munition> identifier = munition->getIdentifier();
+
+        if (identifier)
+        {
+            this->munitions_[identifier] = munition;
+            updateMunition();
+        }
+        else
+        {
+            orxout(internal_warning) << "Adding munition failed. identifier == NULL " << endl;
+        }
+    }
+
+    void WeaponSystem::updateMunition()
+    {
+        for (std::vector<WeaponPack*>::iterator it = this->weaponPacks_.begin(); it != this->weaponPacks_.end(); ++it)
+        {
+            (*it)->updateMunition();
         }
     }
Index: code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.h	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/weaponsystem/WeaponSystem.h	(revision 10791)
@@ -77,4 +77,5 @@
 
             Munition * getMunition(SubclassIdentifier<Munition> * identifier);
+            void addMunition(Munition* munition);
 
             inline void setPawn(Pawn * pawn)
@@ -96,4 +97,6 @@
 
         private:
+            void updateMunition();
+            
             std::map<unsigned int, WeaponSet *> weaponSets_;
             std::vector<WeaponSlot *> weaponSlots_;
Index: code/branches/fabienHS15/src/orxonox/worldentities/MobileEntity.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/worldentities/MobileEntity.h	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/worldentities/MobileEntity.h	(revision 10791)
@@ -47,4 +47,6 @@
         linear velocity. Then the linear velocity is multiplied by the time since the last call of tick and then added to the position. The same happens with
         the angular acceleration and velocity. With this procedure MobileEntities can change their position and orientation with time.
+
+        A MobileEntity can only have the collisition type WorldEntity::None, WorldEntity::Dynamic or WorldEntity::Kinematic. The collsion type WorldEntity::Static is illegal.
     */
 
Index: code/branches/fabienHS15/src/orxonox/worldentities/StaticEntity.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/worldentities/StaticEntity.h	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/worldentities/StaticEntity.h	(revision 10791)
@@ -44,4 +44,6 @@
         it is called StaticEntity. It will keep the same position (always with respect to its parent) forever unless you call the
         function @see setPosition to changee it.
+
+        A StaticEntity can only have the collisition type WorldEntity::None or WorldEntity::Static. The collsion types WorldEntity::Dynamic and WorldEntity::Kinematic are illegal.
     */
 
Index: code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.cc	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.cc	(revision 10791)
@@ -46,4 +46,5 @@
 #include "weaponsystem/WeaponPack.h"
 #include "weaponsystem/WeaponSet.h"
+#include "weaponsystem/Munition.h"
 #include "sound/WorldSound.h"
 
@@ -139,5 +140,6 @@
         XMLPortObject(Pawn, WeaponSlot, "weaponslots", addWeaponSlot, getWeaponSlot, xmlelement, mode);
         XMLPortObject(Pawn, WeaponSet, "weaponsets", addWeaponSet, getWeaponSet, xmlelement, mode);
-        XMLPortObject(Pawn, WeaponPack, "weapons", addWeaponPackXML, getWeaponPack, xmlelement, mode);
+        XMLPortObject(Pawn, WeaponPack, "weaponpacks", addWeaponPackXML, getWeaponPack, xmlelement, mode);
+        XMLPortObject(Pawn, Munition, "munition", addMunitionXML, getMunitionXML, xmlelement, mode);
 
         XMLPortParam(Pawn, "reloadrate", setShieldRechargeRate, getShieldRechargeRate, xmlelement, mode).defaultValues(0);
@@ -557,4 +559,17 @@
     }
 
+    void Pawn::addMunitionXML(Munition* munition)
+    {
+        if (this->weaponSystem_ && munition)
+        {
+            this->weaponSystem_->addMunition(munition);
+        }
+    }
+
+    Munition* Pawn::getMunitionXML() const
+    {
+        return NULL;
+    }
+
     Munition* Pawn::getMunition(SubclassIdentifier<Munition> * identifier)
     {
@@ -570,5 +585,5 @@
     void Pawn::startLocalHumanControl()
     {
-//        SUPER(ControllableEntity, changedPlayer());
+//        SUPER(ControllableEntity, startLocalHumanControl());
         ControllableEntity::startLocalHumanControl();
         this->isHumanShip_ = true;
Index: code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.h	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/worldentities/pawns/Pawn.h	(revision 10791)
@@ -151,6 +151,9 @@
             WeaponPack * getWeaponPack(unsigned int index) const;
             std::vector<WeaponPack *> * getAllWeaponPacks();
+
+            void addMunitionXML(Munition* munition);
+            Munition* getMunitionXML() const;
             
-            Munition * getMunition(SubclassIdentifier<Munition> * identifier);
+            Munition* getMunition(SubclassIdentifier<Munition> * identifier);
 
             virtual void addedWeaponPack(WeaponPack* wPack) {}
Index: code/branches/fabienHS15/src/orxonox/worldentities/pawns/SpaceShip.h
===================================================================
--- code/branches/fabienHS15/src/orxonox/worldentities/pawns/SpaceShip.h	(revision 10746)
+++ code/branches/fabienHS15/src/orxonox/worldentities/pawns/SpaceShip.h	(revision 10791)
@@ -54,4 +54,6 @@
         - The <b>boost shaking</b>, when the SpaceShip boosts, the camera shakes to create a more immersive effect. Two parameters can be used to adjust the effect. The <b>shakeFrequency</b> is the frequency with which the camera shakes. And the <b>shakeAmplitude</b> is the amount with which the camera shakes. Again these parameters must bee non-negative.
         - The <b>lift</b> creates a more natural flight feeling through the addition of a lift force. There are again two parameters that can be specified. The <b>lift</b> which is the lift force that is applied. And the <b>stallSpeed</b> which is the forward speed after which no more lift is generated.
+
+        A spaceship always needs to have the collision type "dynamic". Other collision types are illegal.
 
         As mentioned @ref orxonox::Engine Engines can be mounted on the SpaceShip. Here is a (primitive) example of a SpaceShip defined in XML:
