Index: code/branches/fabienHS15/src/modules/pickup/PickupPrereqs.h
===================================================================
--- code/branches/fabienHS15/src/modules/pickup/PickupPrereqs.h	(revision 10692)
+++ code/branches/fabienHS15/src/modules/pickup/PickupPrereqs.h	(revision 10715)
@@ -85,4 +85,6 @@
     class ShrinkPickup;
     class DamageBoostPickup;
+    class MunitionPickup;
+    class MunitionContainer;
 }
 
Index: code/branches/fabienHS15/src/modules/pickup/items/CMakeLists.txt
===================================================================
--- code/branches/fabienHS15/src/modules/pickup/items/CMakeLists.txt	(revision 10692)
+++ code/branches/fabienHS15/src/modules/pickup/items/CMakeLists.txt	(revision 10715)
@@ -9,3 +9,4 @@
   DamageBoostPickup.cc
   MunitionPickup.cc
+  MunitionContainer.cc
 )
Index: code/branches/fabienHS15/src/modules/pickup/items/MunitionPickup.cc
===================================================================
--- code/branches/fabienHS15/src/modules/pickup/items/MunitionPickup.cc	(revision 10692)
+++ code/branches/fabienHS15/src/modules/pickup/items/MunitionPickup.cc	(revision 10715)
@@ -38,5 +38,5 @@
 #include "core/XMLPort.h"
 
-#include "worldentities/pawns/SpaceShip.h"
+#include "worldentities/pawns/Pawn.h"
 
 namespace orxonox
@@ -71,6 +71,4 @@
         //Defines who is allowed to pick up the pickup.
         this->addTarget(ClassIdentifier<Pawn>::getIdentifier());
-        munitionAmount_ = 1;
-        setMunitionName("LaserMunition");
     }
 
@@ -83,6 +81,19 @@
         SUPER(MunitionPickup, XMLPort, xmlelement, mode);
 
-        XMLPortParam(MunitionPickup, "amount", setMunitionAmount, getMunitionAmount, xmlelement, mode);
-        XMLPortParam(MunitionPickup, "munitiontype", setMunitionName, getMunitionName, xmlelement, mode);
+        XMLPortObject(MunitionPickup, MunitionContainer, "munitioncontainers", addMunitionContainer, getMunitionContainer, xmlelement, mode);
+    }
+
+    void MunitionPickup::addMunitionContainer(MunitionContainer* munitionContainer)
+    {
+        OrxAssert(munitionContainer != NULL, "The munitionContainer cannot be NULL.");
+        this->munitionContainers_.push_back(munitionContainer);
+    }
+
+    MunitionContainer* MunitionPickup::getMunitionContainer(unsigned int index)
+    {
+        if(this->munitionContainers_.size() >= index)
+            return NULL;
+        else
+            return this->munitionContainers_[index];
     }
 
@@ -104,13 +115,19 @@
         if(this->isUsed())
         {
-            //Get pointer to the appropriate munition
-            Munition* munition = pawn->getMunition(&munitionType_);
-            if (munition)
+            for(std::vector<MunitionContainer*>::iterator it = this->munitionContainers_.begin(); it != this->munitionContainers_.end(); ++it)
             {
-                // Add munition
-                munition->addMunition(munitionAmount_);
-                // This will destroy the pickp
-                this->setUsed(false);
-            }            
+                //Get pointer to the appropriate munition
+                SubclassIdentifier<Munition> identifier = (*it)->getMunitionType();
+                Munition* munition = pawn->getMunition(&identifier);
+                if (munition)
+                {
+                    // Add munition and magzines
+                    munition->addMunition((*it)->getMunitionAmount());
+                    munition->addMagazines((*it)->getMagazinesAmount());
+                }
+                (*it)->destroy();
+            }
+            // This will destroy the pickp
+            this->setUsed(false);
         }
         else
@@ -118,5 +135,5 @@
             this->Pickupable::destroy();
         }        
-    }
+    }    
 
     /**
@@ -136,30 +153,5 @@
         }
         return pawn;
-    }
-
-    void MunitionPickup::setMunitionName(const std::string& munitionname)
-    {
-        Identifier* identifier = ClassByString(munitionname);
-        if (identifier)
-        {
-            this->munitionType_ = identifier;
-        }
-        else
-        {
-            orxout(internal_warning) << "No munition class defined in MunitionPickup." << endl;
-        }
-    }
-
-    void MunitionPickup::setMunitionAmount(int munitionAmount)
-    {
-        if (munitionAmount > 0)
-        {
-            munitionAmount_ = munitionAmount;
-        }
-        else
-        {
-            munitionAmount = 0;
-        }
-    }
+    }      
 }
 
Index: code/branches/fabienHS15/src/modules/pickup/items/MunitionPickup.h
===================================================================
--- code/branches/fabienHS15/src/modules/pickup/items/MunitionPickup.h	(revision 10692)
+++ code/branches/fabienHS15/src/modules/pickup/items/MunitionPickup.h	(revision 10715)
@@ -39,6 +39,8 @@
 
 #include <string>
+#include <vector>
 
 #include "pickup/Pickup.h"
+#include "pickup/items/MunitionContainer.h"
 #include "core/class/SubclassIdentifier.h"
 #include "weaponsystem/Munition.h"
@@ -58,19 +60,12 @@
             virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around.
 
-        protected:
-            void setMunitionName(const std::string& munitionname);
-            inline const std::string& getMunitionName() const
-                { return this->munitionname_; }
-            void setMunitionAmount(int munitionAmount);
-            inline int getMunitionAmount() const
-                { return this->munitionAmount_; }
+            virtual void addMunitionContainer(MunitionContainer* munitionContainer);
+            MunitionContainer* getMunitionContainer(unsigned int index);
 
         private:            
             void initialize(void); //!< Initializes the member variables.
             Pawn* carrierToPawnHelper(void); //!< Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
-
-            SubclassIdentifier<Munition> munitionType_; //!< Indentifier of the munition type.
-            std::string munitionname_; //!< String containing the class name of the munition type (e.g. "LaserMunition")
-            int munitionAmount_; //!< The amount of munition added if the pickup is used
+            
+            std::vector<MunitionContainer*> munitionContainers_;
 
     };
