Index: code/branches/weapon2/src/orxonox/CMakeLists.txt
===================================================================
--- code/branches/weapon2/src/orxonox/CMakeLists.txt	(revision 2393)
+++ code/branches/weapon2/src/orxonox/CMakeLists.txt	(revision 2398)
@@ -92,4 +92,5 @@
   objects/weaponSystem/Munition.cc
   objects/weaponSystem/weapons/LaserGun.cc
+  objects/weaponSystem/weapons/Fusion.cc
   objects/weaponSystem/munitions/LaserGunMunition.cc
   objects/weaponSystem/projectiles/BillboardProjectile.cc
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2393)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2398)
@@ -45,5 +45,5 @@
         this->magazineReadyToShoot_ = true;
         this->parentWeaponSystem_ = 0;
-        this->parentWeaponSlot_ = 0;
+        this->attachedToWeaponSlot_ = 0;
         this->munition_ = 0;
         this->bulletLoadingTime_ = 0;
@@ -61,13 +61,10 @@
         SUPER(Weapon, XMLPort, xmlelement, mode);
         XMLPortParam(Weapon, "munitionType", setMunitionType, getMunitionType, xmlelement, mode);
+        XMLPortParam(Weapon, "bulletLoadingTime", setBulletLoadingTime, getBulletLoadingTime, xmlelement, mode);
+        XMLPortParam(Weapon, "magazineLoadingTime", setMagazineLoadingTime, getMagazineLoadingTime, xmlelement, mode);
     }
 
     void Weapon::setWeapon()
     {
-COUT(0) << "LaserGun::setWeapon" << std::endl;
-        this->bulletLoadingTime_ = 0.5;
-        this->magazineLoadingTime_ = 3.0;
-        this->munition_->setMaxMagazines(100);
-        this->munition_->setMaxBullets(6);
         this->munition_->fillBullets();
         this->munition_->fillMagazines();
@@ -165,10 +162,21 @@
 
     void Weapon::setMunitionType(std::string munitionType)
-    {   
-COUT(0) << "Weapon::setMunitionType (XMLPort) "<< munitionType << std::endl;
-this->munitionType_ = munitionType; }
+    {   this->munitionType_ = munitionType; }
 
     const std::string Weapon::getMunitionType()
     {   return this->munitionType_;  }
+
+    void Weapon::setBulletLoadingTime(float loadingTime)
+    {   this->bulletLoadingTime_ = loadingTime; }
+
+    const float Weapon::getBulletLoadingTime()
+    {   return this->bulletLoadingTime_;  }
+
+    void Weapon::setMagazineLoadingTime(float loadingTime)
+    {   this->magazineLoadingTime_ = loadingTime; }
+
+    const float Weapon::getMagazineLoadingTime()
+    {   return this->magazineLoadingTime_;  }
+
 
     Munition * Weapon::getAttachedMunition(std::string munitionType)
@@ -179,25 +187,4 @@
 return this->munition_; }
 
-
-
-    void Weapon::setBulletLoadingTime(float loadingTime)
-    {   this->bulletLoadingTime_ = loadingTime;   }
-
-    float Weapon::getBulletLoadingTime()
-    {   return this->bulletLoadingTime_;  }
-
-    void Weapon::setMagazineLoadingTime(float loadingTime)
-    {   this->magazineLoadingTime_ = loadingTime;   }
-
-    float Weapon::getMagazineLoadingTime()
-    {   return this->magazineLoadingTime_;  }
-
-
-    Timer<Weapon> * Weapon::getBulletTimer()
-    {   return &this->bulletReloadTimer_;   }
-
-    Timer<Weapon> * Weapon::getMagazineTimer()
-    {   return &this->magazineReloadTimer_;   }
-
     void Weapon::takeBullets() { };
     void Weapon::createProjectile() { };
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2393)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2398)
@@ -61,13 +61,11 @@
             void bulletReloaded();
             void magazineReloaded();
-            void setBulletLoadingTime(float loadingTime);
-            float getBulletLoadingTime();
-            void setMagazineLoadingTime(float loadingTime);
-            float getMagazineLoadingTime();
-            Timer<Weapon> *getBulletTimer();
-            Timer<Weapon> *getMagazineTimer();
 
             virtual void setMunitionType(std::string munitionType);
             virtual const std::string getMunitionType();
+            virtual void setBulletLoadingTime(float loadingTime);
+            virtual const float getBulletLoadingTime();
+            virtual void setMagazineLoadingTime(float loadingTime);
+            virtual const float getMagazineLoadingTime();
 
             virtual void takeBullets();
@@ -75,8 +73,4 @@
             virtual void createProjectile();
 
-            inline void setParentWeaponSlot(WeaponSlot *parentWeaponSlot)
-                { this->parentWeaponSlot_=parentWeaponSlot; };
-            inline WeaponSlot * getParentWeaponSlot()
-                { return this->parentWeaponSlot_; };
             inline void setParentWeaponSystem(WeaponSystem *parentWeaponSystem)
                 { this->parentWeaponSystem_=parentWeaponSystem; };
@@ -84,5 +78,9 @@
                 { return this->parentWeaponSystem_; };
 
-            //in future by XMLPort
+            inline void setAttachedToWeaponSlot(WeaponSlot * wSlot)
+                { this->attachedToWeaponSlot_ = wSlot; }
+            inline WeaponSlot * getAttachedToWeaponSlot()
+                { return this->attachedToWeaponSlot_; }
+
             virtual void setWeapon();
 
@@ -90,16 +88,17 @@
 
         protected:
+            bool bReloading_;
             bool bulletReadyToShoot_;
             bool magazineReadyToShoot_;
             float bulletLoadingTime_;
             float magazineLoadingTime_;
-            bool bReloading_;
-
-            Munition *munition_;
             std::string munitionType_;
 
-            WeaponSlot *parentWeaponSlot_;
-            WeaponSystem *parentWeaponSystem_;
+            WeaponSlot * attachedToWeaponSlot_;
+            Munition * munition_;
+            WeaponSystem * parentWeaponSystem_;
+
             SubclassIdentifier<Munition> munitionIdentifier_;
+
             Timer<Weapon> bulletReloadTimer_;
             Timer<Weapon> magazineReloadTimer_;
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc	(revision 2393)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc	(revision 2398)
@@ -64,5 +64,5 @@
         {
 COUT(0) << "WeaponPack::fire (attached from WeaponSet)  from Weapon: "<< i << std::endl;
-            this->weapons_[i]->fire();
+            this->weapons_[i]->getAttachedToWeaponSlot()->fire();
         }
     }
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc	(revision 2393)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc	(revision 2398)
@@ -68,9 +68,23 @@
             {
                 //at the moment this function only works for one weaponPack in the entire WeaponSystem...
-                if ( this->parentWeaponSystem_->getWeaponSlotPointer(i)->getAttachedWeapon() == 0 ) //if slot not full
+                if ( this->parentWeaponSystem_->getWeaponSlotPointer(i)->getAttachedWeapon() == 0 && this->parentWeaponSystem_->getWeaponSlotPointer(i) != 0) //if slot not full
                 {
+COUT(0) << "WeaponSet::attachWeaponPack attaching Weapon" << std::endl;
                     this->setWeaponSlots_.push_back( this->parentWeaponSystem_->getWeaponSlotPointer(i) );
                     this->parentWeaponSystem_->getWeaponSlotPointer(i)->attachWeapon( wPack->getWeaponPointer(wPackWeapon) );
                     wPackWeapon++;
+                }
+                else
+                {
+                    for (int k=0; k < this->parentWeaponSystem_->getWeaponSlotSize(); k++)
+                    {
+                        if ( this->parentWeaponSystem_->getWeaponSlotPointer(k)->getAttachedWeapon() == 0 )
+                        {
+COUT(0) << "WeaponSet::attachWeaponPack mode 2 k="<< k << std::endl;
+                            this->setWeaponSlots_.push_back( this->parentWeaponSystem_->getWeaponSlotPointer(k) );
+                            this->parentWeaponSystem_->getWeaponSlotPointer(k)->attachWeapon( wPack->getWeaponPointer(wPackWeapon) );
+                            wPackWeapon++;
+                        }
+                    }
                 }
             }
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc	(revision 2393)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc	(revision 2398)
@@ -66,4 +66,5 @@
     void WeaponSlot::fire()
     {
+        if ( this->attachedWeapon_ )
 COUT(0) << "WeaponSlot::fire" << std::endl;
         this->attachedWeapon_->fire();
@@ -79,4 +80,5 @@
     {
         this->attachedWeapon_ = weapon;
+        weapon->setAttachedToWeaponSlot(this);
         this->attach(weapon);
 COUT(0) << "WeaponSlot::attachWeapon position=" << this->getWorldPosition() << std::endl;
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/munitions/LaserGunMunition.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/munitions/LaserGunMunition.cc	(revision 2393)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/munitions/LaserGunMunition.cc	(revision 2398)
@@ -42,4 +42,7 @@
     {
         RegisterObject(LaserGunMunition);
+
+        this->maxBullets_ = 40;
+        this->maxMagazines_ = 100;
     }
 
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.cc	(revision 2393)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.cc	(revision 2398)
@@ -43,7 +43,7 @@
         RegisterObject(ParticleProjectile);
 
-        this->particles_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/shot2_small", LODParticle::normal);
+        this->particles_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/shot3_small", LODParticle::normal);
         this->particles_->addToSceneNode(this->getNode());
-        //this->particles_->setKeepParticlesInLocalSpace(true);
+        this->particles_->setKeepParticlesInLocalSpace(0);
 
         this->particles_->getAllEmitters()->setDirection(-WorldEntity::FRONT);
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/Fusion.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/Fusion.cc	(revision 2398)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/Fusion.cc	(revision 2398)
@@ -0,0 +1,76 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Martin Polak
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include "OrxonoxStableHeaders.h"
+
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "util/Debug.h"
+
+#include "Fusion.h"
+
+
+namespace orxonox
+{
+    CreateFactory(Fusion);
+
+    Fusion::Fusion(BaseObject* creator) : Weapon(creator)
+    {
+        RegisterObject(Fusion);
+        
+        this->speed_ = 1250;
+
+    }
+
+    Fusion::~Fusion()
+    {
+    }
+
+    void Fusion::takeBullets()
+    {
+COUT(0) << "Fusion::takeBullets" << std::endl;
+        this->munition_->removeBullets(1);
+        this->bulletTimer(this->bulletLoadingTime_);
+    }
+
+    void Fusion::takeMagazines()
+    {
+        this->munition_->removeMagazines(1);
+        this->magazineTimer(this->magazineLoadingTime_);
+    }
+
+    void Fusion::createProjectile()
+    {
+COUT(0) << "Fusion::createProjectile" << std::endl;
+        BillboardProjectile* projectile = new ParticleProjectile(this);
+        projectile->setOrientation(this->getWorldOrientation());
+        projectile->setPosition(this->getWorldPosition());
+        projectile->setVelocity(WorldEntity::FRONT * this->speed_);
+    }
+}
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/Fusion.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/Fusion.h	(revision 2398)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/Fusion.h	(revision 2398)
@@ -0,0 +1,60 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Martin Polak
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _Fusion_H__
+#define _Fusion_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include "core/BaseObject.h"
+
+#include "../munitions/LaserGunMunition.h"
+#include "util/Math.h"
+#include "../Weapon.h"
+#include "../projectiles/BillboardProjectile.h"
+#include "../projectiles/ParticleProjectile.h"
+
+namespace orxonox
+{
+    class _OrxonoxExport Fusion : public Weapon
+    {
+        public:
+            Fusion(BaseObject* creator);
+            virtual ~Fusion();
+
+            virtual void takeBullets();
+            virtual void takeMagazines();
+            virtual void createProjectile();
+
+        private:
+            float speed_;
+
+    };
+}
+
+#endif /* _Fusion_H__ */
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2393)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2398)
@@ -44,7 +44,6 @@
     {
         RegisterObject(LaserGun);
-
-        //in future XMLPort
-        this->speed_ = 250;
+        
+        this->speed_ = 1250;
 
     }
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h	(revision 2393)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h	(revision 2398)
@@ -47,5 +47,5 @@
             LaserGun(BaseObject* creator);
             virtual ~LaserGun();
-            
+
             virtual void takeBullets();
             virtual void takeMagazines();
Index: code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2393)
+++ code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2398)
@@ -137,5 +137,5 @@
     void Pawn::fire(WeaponMode::Enum fireMode)
     {
-COUT(0) << "Pawn::fire" << std::endl;
+COUT(0) << "Pawn::fire" << fireMode << std::endl;
         if (this->weaponSystem_)
             this->weaponSystem_->fire(fireMode);
@@ -152,5 +152,5 @@
     void Pawn::setWeaponSlot(WeaponSlot * wSlot)
     {   
-COUT(0) << "Pawn::setWeaponSlot" << std::endl;
+COUT(0) << "Pawn::setWeaponSlot" << wSlot << std::endl;
         this->attach(wSlot);
         this->weaponSystem_->attachWeaponSlot(wSlot);   }
