Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2326)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2327)
@@ -37,4 +37,6 @@
 namespace orxonox
 {
+    CreateFactory(Weapon);
+
     Weapon::Weapon(BaseObject* creator) : BaseObject(creator)
     {
@@ -42,5 +44,4 @@
         this->bulletReadyToShoot_ = true;
         this->magazineReadyToShoot_ = true;
-        this->setParentWeaponSystem();
     }
 
@@ -95,7 +96,4 @@
      *
      */
-    void Weapon::setParentWeaponSystem()
-    {   this->parentWeaponSystem_ = this->parentWeaponSlot_->getParentWeaponSystem(); }
-
     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 2326)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2327)
@@ -52,5 +52,4 @@
             virtual void fire();
             void attachNeededMunition(std::string munitionType);
-            virtual void setParentWeaponSystem();
             Munition * getAttachedMunition();
 
@@ -72,7 +71,11 @@
 
             inline void setParentWeaponSlot(WeaponSlot *parentWeaponSlot)
-                { parentWeaponSlot_=parentWeaponSlot; };
+                { this->parentWeaponSlot_=parentWeaponSlot; };
             inline WeaponSlot * getParentWeaponSlot()
-                { return parentWeaponSlot_; };
+                { return this->parentWeaponSlot_; };
+            inline void setParentWeaponSystem(WeaponSystem *parentWeaponSystem)
+                { this->parentWeaponSystem_=parentWeaponSystem; };
+            inline WeaponSystem * getParentWeaponSystem()
+                { return this->parentWeaponSystem_; };
 
         private:
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc	(revision 2326)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc	(revision 2327)
@@ -39,4 +39,6 @@
 namespace orxonox
 {
+    CreateFactory(WeaponPack);
+
     WeaponPack::WeaponPack(BaseObject* creator) : BaseObject(creator)
     {
@@ -66,5 +68,5 @@
         for (int i=0; i < (int) this->weapons_.size(); i++)
         {
-COUT(0) << "WeaponPack::fire"<< i << std::endl;
+COUT(0) << "WeaponPack::fire (attached from WeaponSet)"<< i << std::endl;
             this->weapons_[i]->fire();
         }
@@ -94,4 +96,5 @@
     void WeaponPack::addWeapon(Weapon * weapon)
     {
+        weapon->setParentWeaponSystem(this->parentWeaponSystem_);
         this->weapons_.push_back(weapon);
     }
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc	(revision 2326)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc	(revision 2327)
@@ -39,4 +39,6 @@
 namespace orxonox
 {
+    CreateFactory(WeaponSet);
+
     WeaponSet::WeaponSet(BaseObject* creator, int k) : BaseObject(creator)
     {
@@ -53,4 +55,5 @@
     void WeaponSet::attachWeaponPack(WeaponPack *wPack)
     {
+COUT(0) << "WeaponSet::attachWeaponPack" << std::endl;
         if ( this->parentWeaponSystem_->getWeaponSlotSize()>0 && wPack->getSize()>0 && ( wPack->getSize() <= this->parentWeaponSystem_->getWeaponSlotSize() ) )
         {
@@ -75,4 +78,5 @@
     {
         //fires all WeaponSlots available for this weaponSet attached from the WeaponPack
+COUT(0) << "WeaponSet::fire" << std::endl;
         this->attachedWeaponPack_->fire();
     }
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc	(revision 2326)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc	(revision 2327)
@@ -38,4 +38,6 @@
 namespace orxonox
 {
+    CreateFactory(WeaponSlot);
+
     WeaponSlot::WeaponSlot(BaseObject* creator) : PositionableEntity(creator)
     {
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2326)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2327)
@@ -46,4 +46,5 @@
 namespace orxonox
 {
+    CreateFactory(WeaponSystem);
 
     WeaponSystem::WeaponSystem(BaseObject* creator) : BaseObject(creator)
@@ -61,19 +62,19 @@
     void WeaponSystem::attachWeaponPack(WeaponPack *wPack, unsigned int firemode)
     {
+        wPack->setParentWeaponSystem(this);
         this->weaponSets_[firemode]->attachWeaponPack(wPack);
         this->weaponPacks_[firemode] = wPack;
-        wPack->setParentWeaponSystem(this);
     }
 
     void WeaponSystem::attachWeaponSlot(WeaponSlot *wSlot)
     {
+        wSlot->setParentWeaponSystem(this);
         this->weaponSlots_.push_back(wSlot);
-        wSlot->setParentWeaponSystem(this);
     }
 
     void WeaponSystem::attachWeaponSet(WeaponSet *wSet)
     {
+        wSet->setParentWeaponSystem(this);
         this->weaponSets_.push_back(wSet);
-        wSet->setParentWeaponSystem(this);
     }
 
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2326)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2327)
@@ -39,4 +39,6 @@
 namespace orxonox
 {
+    CreateFactory(LaserGun);
+
     LaserGun::LaserGun(BaseObject* creator) : Weapon(creator)
     {
Index: code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2326)
+++ code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2327)
@@ -55,9 +55,10 @@
         //WeaponSystem
         weaponSystem_ = new WeaponSystem(this);
+        /*
         WeaponSet * weaponSet1 = new WeaponSet(this,1);
         this->weaponSystem_->attachWeaponSet(weaponSet1);
         //totally bad solution...
         weaponSet1->setParentWeaponSystem(weaponSystem_);
-
+        */
 
         this->registerVariables();
@@ -157,15 +158,21 @@
 
     void Pawn::setWeaponSlot(WeaponSlot * wSlot)
-    {   this->weaponSystem_->attachWeaponSlot(wSlot);   }
+    {   
+COUT(0) << "Pawn::setWeaponSlot" << std::endl;
+        this->weaponSystem_->attachWeaponSlot(wSlot);   }
     WeaponSlot * Pawn::getWeaponSlot(unsigned int index) const
     {   return this->weaponSystem_->getWeaponSlotPointer(index);    }
     
     void Pawn::setWeaponPack(WeaponPack * wPack)
-    {   this->weaponSystem_->attachWeaponPack( wPack,wPack->getFireMode() );   }
+    {   
+COUT(0) << "Pawn::setWeaponPack" << std::endl;
+        this->weaponSystem_->attachWeaponPack( wPack,wPack->getFireMode() );   }
     WeaponPack * Pawn::getWeaponPack(unsigned int firemode) const
     {   return this->weaponSystem_->getWeaponPackPointer(firemode);    }
     
     void Pawn::setWeaponSet(WeaponSet * wSet)
-    {   this->weaponSystem_->attachWeaponSet(wSet);   }
+    {   
+COUT(0) << "Pawn::setWeaponSet" << std::endl;
+        this->weaponSystem_->attachWeaponSet(wSet);   }
     WeaponSet * Pawn::getWeaponSet(unsigned int index) const
     {   return this->weaponSystem_->getWeaponSetPointer(index);    }
