Index: code/branches/weaponsystem/src/orxonox/OrxonoxPrereqs.h
===================================================================
--- code/branches/weaponsystem/src/orxonox/OrxonoxPrereqs.h	(revision 2851)
+++ code/branches/weaponsystem/src/orxonox/OrxonoxPrereqs.h	(revision 2852)
@@ -175,4 +175,5 @@
     class LaserGun;
     class LaserGunMunition;
+    class FusionMunition;
 
     class EventListener;
Index: code/branches/weaponsystem/src/orxonox/objects/weaponSystem/Weapon.cc
===================================================================
--- code/branches/weaponsystem/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2851)
+++ code/branches/weaponsystem/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2852)
@@ -68,5 +68,4 @@
         XMLPortParam(Weapon, "bulletLoadingTime", setBulletLoadingTime, getBulletLoadingTime, xmlelement, mode);
         XMLPortParam(Weapon, "magazineLoadingTime", setMagazineLoadingTime, getMagazineLoadingTime, xmlelement, mode);
-        XMLPortParam(Weapon, "bSharedMunition", setSharedMunition, getSharedMunition, xmlelement, mode);
         XMLPortParam(Weapon, "bullets", setBulletAmount, getBulletAmount, xmlelement, mode);
         XMLPortParam(Weapon, "magazines", setMagazineAmount, getMagazineAmount, xmlelement, mode);
@@ -88,12 +87,9 @@
     void Weapon::fire()
     {
-COUT(0) << "Weapon::fire" << std::endl;
         if ( this->bulletReadyToShoot_ && this->magazineReadyToShoot_ && !this->bReloading_)
         {
-COUT(0) << "Weapon::fire 2" << std::endl;
             this->bulletReadyToShoot_ = false;
             if ( this->unlimitedMunition_== true )
             {
-COUT(0) << "Weapon::fire 3" << std::endl;
                 //shoot
                 this->reloadBullet();
@@ -102,9 +98,7 @@
             else
             {
-COUT(0) << "Weapon::fire 4" << std::endl;
                 if ( this->munition_->bullets() > 0)
                 {
-COUT(0) << "Weapon::fire 5" << std::endl;
-                    //shoot
+                    //shoot and reload
                     this->takeBullets();
                     this->reloadBullet();
@@ -114,5 +108,5 @@
                 else if ( this->munition_->magazines() > 0 && this->munition_->bullets() == 0 )
                 {
-COUT(0) << "Weapon::fire 6" << std::endl;
+                    //reload magazine
                     this->takeMagazines();
                     this->reloadMagazine();
@@ -126,5 +120,4 @@
         else
         {
-COUT(0) << "Weapon::fire not reloaded" << std::endl;
             //weapon not reloaded
         }
@@ -132,7 +125,6 @@
     }
 
-    /*
-    * weapon reloading
-    */
+
+    //weapon reloading
     void Weapon::bulletTimer(float bulletLoadingTime)
     {
@@ -156,7 +148,6 @@
         this->bReloading_ = false;
         this->munition_->fillBullets();
-        this->magazineReadyToShoot_ = true;
-        this->bulletReadyToShoot_ = true;
-    }
+    }
+
 
 
@@ -164,29 +155,22 @@
     {
         /*  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 the weapon shares one munitionType put it into sharedMunitionSet else to munitionSet
         */
         if (this->parentWeaponSystem_)
         {
-            if (this->bSharedMunition_ == false)
-            {
+            //getMunitionType returns 0 if there is no such munitionType
+            Munition* munition = this->parentWeaponSystem_->getMunitionType(munitionName);
+            if ( munition )
+            {
+                this->munition_ = munition;
+                this->setMunition();
+            }
+            else
+            {
+                //create new munition with identifier because there is no such munitionType
                 this->munitionIdentifier_ = ClassByString(munitionName);
                 this->munition_ = this->munitionIdentifier_.fabricate(this);
                 this->parentWeaponSystem_->setNewMunition(munitionName, this->munition_);
-            }
-            else
-            {
-                //getMunitionType returns 0 if there is no such munitionType
-                Munition* munition = this->parentWeaponSystem_->getMunitionType(munitionName);
-                if ( munition )
-                    this->munition_ = munition;
-                else
-                {
-                    //create new munition with identifier because there is no such munitionType
-                    this->munitionIdentifier_ = ClassByString(munitionName);
-                    this->munition_ = this->munitionIdentifier_.fabricate(this);
-                    this->parentWeaponSystem_->setNewSharedMunition(munitionName, this->munition_);
-                }
-            }
-            this->setMunition();
+                this->setMunition();
+            }
         }
     }
@@ -208,7 +192,5 @@
 
 
-     /*get and set functions
-     *
-     */
+    //get and set functions for XMLPort
     void Weapon::setMunitionType(std::string munitionType)
     {   this->munitionType_ = munitionType; }
@@ -229,10 +211,4 @@
     {   return this->magazineLoadingTime_;  }
 
-    void Weapon::setSharedMunition(bool bSharedMunition)
-    {   this->bSharedMunition_ = bSharedMunition; }
-
-    const bool Weapon::getSharedMunition()
-    {   return this->bSharedMunition_;  }
-
     void Weapon::setBulletAmount(unsigned int amount)
     {   this->bulletAmount_ = amount; }
@@ -245,5 +221,5 @@
 
     const unsigned int Weapon::getMagazineAmount()
-    {   return this->magazineAmount_;  }
+    {   return this->magazineAmount_;   }
 
     void Weapon::setUnlimitedMunition(bool unlimitedMunition)
Index: code/branches/weaponsystem/src/orxonox/objects/weaponSystem/Weapon.h
===================================================================
--- code/branches/weaponsystem/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2851)
+++ code/branches/weaponsystem/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2852)
@@ -69,6 +69,4 @@
             virtual void setMagazineLoadingTime(float loadingTime);
             virtual const float getMagazineLoadingTime();
-            virtual void setSharedMunition(bool bSharedMunition);
-            virtual const bool getSharedMunition();
             virtual void setBulletAmount(unsigned int amount);
             virtual const unsigned int getBulletAmount();
@@ -106,5 +104,4 @@
             bool bulletReadyToShoot_;
             bool magazineReadyToShoot_;
-            bool bSharedMunition_;
             bool unlimitedMunition_;
             float bulletLoadingTime_;
Index: code/branches/weaponsystem/src/orxonox/objects/weaponSystem/WeaponSystem.cc
===================================================================
--- code/branches/weaponsystem/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2851)
+++ code/branches/weaponsystem/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2852)
@@ -82,21 +82,14 @@
     }
 
-    void WeaponSystem::setNewSharedMunition(std::string munitionType, Munition * munitionToAdd)
-    {
-        this->munitionSharedSet_[munitionType] = munitionToAdd;
-    }
 
     //returns the Pointer to the munitionType, if this munitionType doesn't exist returns 0, see Weapon::attachNeededMunition
     Munition * WeaponSystem::getMunitionType(std::string munitionType)
     {
-        std::map<std::string, Munition *>::const_iterator it = this->munitionSharedSet_.find(munitionType);
-        if (it != this->munitionSharedSet_.end())
+        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/weaponsystem/src/orxonox/objects/weaponSystem/WeaponSystem.h
===================================================================
--- code/branches/weaponsystem/src/orxonox/objects/weaponSystem/WeaponSystem.h	(revision 2851)
+++ code/branches/weaponsystem/src/orxonox/objects/weaponSystem/WeaponSystem.h	(revision 2852)
@@ -73,5 +73,4 @@
             std::vector<WeaponSlot *> weaponSlots_;
             std::vector<WeaponPack *> weaponPacks_;
-            std::map<std::string, Munition *> munitionSharedSet_;
             std::map<std::string, Munition *> munitionSet_;
             Pawn *parentPawn_;
Index: code/branches/weaponsystem/src/orxonox/objects/weaponSystem/munitions/CMakeLists.txt
===================================================================
--- code/branches/weaponsystem/src/orxonox/objects/weaponSystem/munitions/CMakeLists.txt	(revision 2851)
+++ code/branches/weaponsystem/src/orxonox/objects/weaponSystem/munitions/CMakeLists.txt	(revision 2852)
@@ -1,3 +1,4 @@
 ADD_SOURCE_FILES(ORXONOX_SRC_FILES
   LaserGunMunition.cc
+  FusionMunition.cc
 )
Index: code/branches/weaponsystem/src/orxonox/objects/weaponSystem/munitions/LaserGunMunition.cc
===================================================================
--- code/branches/weaponsystem/src/orxonox/objects/weaponSystem/munitions/LaserGunMunition.cc	(revision 2851)
+++ code/branches/weaponsystem/src/orxonox/objects/weaponSystem/munitions/LaserGunMunition.cc	(revision 2852)
@@ -43,4 +43,5 @@
         RegisterObject(LaserGunMunition);
 
+        //default if not defined in XML
         this->maxBullets_ = 40;
         this->maxMagazines_ = 100;
