Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2330)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2331)
@@ -54,4 +54,5 @@
     {
         SUPER(Weapon, XMLPort, xmlelement, mode);
+        XMLPortParam(Weapon, "munitionType", setMunitionType, getMunitionType, xmlelement, mode);
     }
 
@@ -81,12 +82,16 @@
     {
         //if munition type already exists attach it, else create a new one of this type and attach it to the weapon and to the WeaponSystem
-        if ( this->parentWeaponSystem_->getMunitionType(munitionName) )
-            this->munition_ = this->parentWeaponSystem_->getMunitionType(munitionName);
-        else
+        if (this->parentWeaponSystem_)
         {
-            //create new munition with identifier
-            this->munitionIdentifier_ = ClassByString(munitionName);
-            this->munition_ = this->munitionIdentifier_.fabricate(this);
-            this->parentWeaponSystem_->setNewMunition(munitionName, this->munition_);
+            Munition* munition = this->parentWeaponSystem_->getMunitionType(munitionName);
+            if ( munition )
+                this->munition_ = munition;
+            else
+            {
+                //create new munition with identifier
+                this->munitionIdentifier_ = ClassByString(munitionName);
+                this->munition_ = this->munitionIdentifier_.fabricate(this);
+                this->parentWeaponSystem_->setNewMunition(munitionName, this->munition_);
+            }
         }
     }
@@ -96,4 +101,11 @@
      *
      */
+
+    void Weapon::setMunitionType(std::string munitionType)
+    {   this->munitionType_ = munitionType; }
+
+    std::string Weapon::getMunitionType()
+    {   return this->munitionType_;  }
+
     Munition * Weapon::getAttachedMunition()
     {   return this->munition_; }
Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2330)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2331)
@@ -70,4 +70,7 @@
             Timer<Weapon> *getMagazineTimer();
 
+            void setMunitionType(std::string munitionType);
+            std::string getMunitionType();
+
             inline void setParentWeaponSlot(WeaponSlot *parentWeaponSlot)
                 { this->parentWeaponSlot_=parentWeaponSlot; };
@@ -85,4 +88,5 @@
             float magazineLoadingTime_;
             Munition *munition_;
+            std::string munitionType_;
 
             WeaponSlot *parentWeaponSlot_;
Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc	(revision 2330)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc	(revision 2331)
@@ -46,5 +46,5 @@
 
         this->parentWeaponSystem_ = 0;
-        this->firemode_ = 1;
+        this->firemode_ = 0;
 
     }
@@ -68,5 +68,5 @@
         for (int i=0; i < (int) this->weapons_.size(); i++)
         {
-COUT(0) << "WeaponPack::fire (attached from WeaponSet)"<< i << std::endl;
+COUT(0) << "WeaponPack::fire (attached from WeaponSet)  from Weapon: "<< i << std::endl;
             this->weapons_[i]->fire();
         }
Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2330)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2331)
@@ -63,6 +63,7 @@
     {
         wPack->setParentWeaponSystem(this);
-        this->weaponSets_[firemode]->attachWeaponPack(wPack);
-        this->weaponPacks_[firemode] = wPack;
+        if (firemode < this->weaponSets_.size())
+            this->weaponSets_[firemode]->attachWeaponPack(wPack);
+        this->weaponPacks_.push_back(wPack);
     }
 
@@ -85,5 +86,9 @@
     Munition * WeaponSystem::getMunitionType(std::string munitionType)
     {
-        return this->munitionSet_[munitionType];
+        std::map<std::string, Munition *>::const_iterator it = this->munitionSet_.find(munitionType);
+        if (it != this->munitionSet_.end())
+            return it->second;
+        else
+            return 0;
     }
 
Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2330)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2331)
@@ -49,5 +49,5 @@
 
         //how could it be loaded by XML
-        this->attachNeededMunition("LaserGunMunition");
+        this->attachNeededMunition(this->getMunitionType());
     }
 
Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h	(revision 2330)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h	(revision 2331)
@@ -55,5 +55,4 @@
             float speed_;
 
-
     };
 }
