Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.cc	(revision 2391)
@@ -46,18 +46,18 @@
     }
 
-    bool Munition::bullets()
+    unsigned int Munition::bullets()
     { 
         if (this->bullets_ > 0)
-            return true;
+            return bullets_;
         else
-            return false;
+            return 0;
     }
 
-    bool Munition::magazines()
+    unsigned int Munition::magazines()
     { 
         if (this->magazines_ > 0)
-            return true;
+            return magazines_;
         else
-            return false;
+            return 0;
     }
 
@@ -68,13 +68,7 @@
     { this->maxMagazines_ = amount; }
 
-    void Munition::removeBullets(unsigned int amount, Weapon * parentWeapon)
+    void Munition::removeBullets(unsigned int amount)
     {
-        if ( this->bullets_ == 0 )
-        {
-            this->removeMagazines(1);
-            parentWeapon->magazineTimer(0);
-            this->bullets_ = this->maxBullets_;
-        }
-        else
+        if ( this->bullets_ != 0 )
             this->bullets_ = this->bullets_ - amount;
     }
@@ -82,16 +76,5 @@
     void Munition::removeMagazines(unsigned int amount)
     {
-        if ( this->magazines_ == 0 )
-        {
-            if ( this->bullets_ == 0 )
-                {
-                    //no bullets and no magazines
-                }
-            else
-            {
-                //what to do when there are no more magazines?
-            }
-        }
-        else
+        if ( this->magazines_ != 0 )
             this->magazines_ = this->magazines_ - amount;
     }
@@ -120,4 +103,5 @@
     void Munition::fillBullets()
     {
+COUT(0) << "Munition::fillBullets maxBullets_=" << this->maxBullets_ << std::endl;
         this->bullets_ = this->maxBullets_;
     }
@@ -130,5 +114,5 @@
     void Munition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
-
+        SUPER(Munition, XMLPort, xmlelement, mode);
     }
 
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.h	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.h	(revision 2391)
@@ -53,8 +53,8 @@
             void fillMagazines();
 
-            bool bullets();
-            bool magazines();
+            unsigned int bullets();
+            unsigned int magazines();
 
-            void removeBullets(unsigned int k, Weapon * parentWeapon);
+            void removeBullets(unsigned int k);
             void removeMagazines(unsigned int k);
             void addBullets(unsigned int k);
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2391)
@@ -39,5 +39,5 @@
     CreateFactory(Weapon);
 
-    Weapon::Weapon(BaseObject* creator) : BaseObject(creator)
+    Weapon::Weapon(BaseObject* creator) : PositionableEntity(creator)
     {
         RegisterObject(Weapon);
@@ -47,4 +47,7 @@
         this->parentWeaponSlot_ = 0;
         this->munition_ = 0;
+        this->bulletLoadingTime_ = 0;
+        this->magazineLoadingTime_ = 0;
+        this->bReloading_ = false;
     }
 
@@ -62,8 +65,9 @@
     void Weapon::setWeapon()
     {
+COUT(0) << "LaserGun::setWeapon" << std::endl;
         this->bulletLoadingTime_ = 0.5;
         this->magazineLoadingTime_ = 3.0;
         this->munition_->setMaxMagazines(100);
-        this->munition_->setMaxBullets(30);
+        this->munition_->setMaxBullets(6);
         this->munition_->fillBullets();
         this->munition_->fillMagazines();
@@ -74,10 +78,10 @@
     {
 COUT(0) << "LaserGun::fire, this=" << this << std::endl;
-        if ( this->bulletReadyToShoot_ && this->magazineReadyToShoot_ )
+        if ( this->bulletReadyToShoot_ && this->magazineReadyToShoot_ && !this->bReloading_)
         {
 COUT(0) << "LaserGun::fire - ready to shoot" << std::endl;
-
+COUT(0) << "LaserGun::fire - bullets" << this->munition_->bullets() << std::endl;
             this->bulletReadyToShoot_ = false;
-            if ( this->munition_->bullets() )
+            if ( this->munition_->bullets() > 0)
             {
                 //shoot
@@ -86,7 +90,13 @@
             }
             //if there are no bullets, but magazines
-            else if ( this->munition_->magazines() && !this->munition_->bullets() )
-            {
+            else if ( this->munition_->magazines() > 0 && this->munition_->bullets() == 0 )
+            {
+COUT(0) << "LaserGun::fire - no bullets" << std::endl;
                 this->takeMagazines();
+            }
+            else
+            {
+COUT(0) << "LaserGun::fire - no magazines" << std::endl;
+                //actions
             }
         }
@@ -94,4 +104,5 @@
         {
 COUT(0) << "LaserGun::fire - weapon not reloaded" << std::endl;
+            //actions
         }
 
@@ -102,4 +113,5 @@
     {
 COUT(0) << "Weapon::bulletTimer started" << std::endl;
+        this->bReloading_ = true;
         this->bulletReloadTimer_.setTimer( bulletLoadingTime , false , this , createExecutor(createFunctor(&Weapon::bulletReloaded)));
     }
@@ -107,12 +119,17 @@
     {
 COUT(0) << "Weapon::magazineTimer started" << std::endl;
+        this->bReloading_ = true;
         this->magazineReloadTimer_.setTimer( magazineLoadingTime , false , this , createExecutor(createFunctor(&Weapon::magazineReloaded)));
     }
 
     void Weapon::bulletReloaded()
-    { this->bulletReadyToShoot_ = true; }
+    {
+        this->bReloading_ = false;
+        this->bulletReadyToShoot_ = true;
+    }
 
     void Weapon::magazineReloaded()
-    { 
+    {
+        this->bReloading_ = false;
         this->munition_->fillBullets();
         this->magazineReadyToShoot_ = true;
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2391)
@@ -40,7 +40,9 @@
 #include "Munition.h"
 
+#include "objects/worldentities/PositionableEntity.h"
+
 namespace orxonox
 {
-    class _OrxonoxExport Weapon : public BaseObject
+    class _OrxonoxExport Weapon : public PositionableEntity
     {
         public:
@@ -82,5 +84,5 @@
                 { return this->parentWeaponSystem_; };
 
-            //in future by XMLPort, 
+            //in future by XMLPort
             virtual void setWeapon();
 
@@ -92,4 +94,6 @@
             float bulletLoadingTime_;
             float magazineLoadingTime_;
+            bool bReloading_;
+
             Munition *munition_;
             std::string munitionType_;
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponPack.cc	(revision 2391)
@@ -75,4 +75,6 @@
     void WeaponPack::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
+        SUPER(WeaponPack, XMLPort, xmlelement, mode);
+
         XMLPortObject(WeaponPack, Weapon, "", addWeapon, getWeapon, xmlelement, mode);
         XMLPortParam(WeaponPack, "firemode", setFireMode, getFireMode, xmlelement, mode);
@@ -115,4 +117,6 @@
         {
             this->weapons_[i]->attachNeededMunition(weapons_[i]->getMunitionType());
+            //hack!
+            this->weapons_[i]->setWeapon();
         }
 
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc	(revision 2391)
@@ -68,5 +68,5 @@
             {
                 //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 ) //if slot not full
                 {
                     this->setWeaponSlots_.push_back( this->parentWeaponSystem_->getWeaponSlotPointer(i) );
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc	(revision 2391)
@@ -73,9 +73,13 @@
     void WeaponSlot::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
-
+        SUPER(WeaponSlot, XMLPort, xmlelement, mode);
     }
 
-    void WeaponSlot::attachWeapon(Weapon *weaponPointer)
-    {   this->attachedWeapon_ = weaponPointer;   }
+    void WeaponSlot::attachWeapon(Weapon *weapon)
+    {
+        this->attachedWeapon_ = weapon;
+        this->attach(weapon);
+COUT(0) << "WeaponSlot::attachWeapon position=" << this->getWorldPosition() << std::endl;
+    }
 
     Weapon * WeaponSlot::getAttachedWeapon() const
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.h	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.h	(revision 2391)
@@ -45,5 +45,5 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
 
-            void attachWeapon(Weapon *weaponPointer);
+            void attachWeapon(Weapon *weapon);
             Weapon * getAttachedWeapon() const;
             void setAmmoType(bool isUnlimited);
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2391)
@@ -145,5 +145,5 @@
     void WeaponSystem::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
-
+        SUPER(WeaponSystem, XMLPort, xmlelement, mode);
     }
 
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/BillboardProjectile.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/BillboardProjectile.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/BillboardProjectile.cc	(revision 2391)
@@ -45,7 +45,7 @@
         assert(this->getScene()->getSceneManager()); // getScene() was already checked by WorldEntity
 
-        this->billboard_.setBillboardSet(this->getScene()->getSceneManager(), "Examples/Flare", ColourValue(1.0, 1.0, 0.5), 1);
-        //this->attachObject(this->billboard_.getBillboardSet());
-        this->scale(0.5);
+        this->billboard_.setBillboardSet(this->getScene()->getSceneManager(), "Examples/Flare", ColourValue(0.5, 0.5, 0.7, 0.8), 1);
+        this->getNode()->attachObject(this->billboard_.getBillboardSet());
+        this->scale(0.2);
     }
 
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.cc	(revision 2391)
@@ -43,8 +43,9 @@
         RegisterObject(ParticleProjectile);
 
-        this->particles_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/shot2", LODParticle::normal);
+        this->particles_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/shot2_small", LODParticle::normal);
         this->particles_->addToSceneNode(this->getNode());
-        this->particles_->setKeepParticlesInLocalSpace(true);
+        //this->particles_->setKeepParticlesInLocalSpace(true);
 
+        this->particles_->getAllEmitters()->setDirection(-WorldEntity::FRONT);
         /*
         if (this->owner_)
@@ -76,10 +77,3 @@
         this->particles_->setEnabled(this->isVisible());
     }
-
-    bool ParticleProjectile::create(){
-      if(!Projectile::create())
-        return false;
-      this->particles_->getAllEmitters()->setDirection(-this->getOrientation()*Vector3(1,0,0));
-      return true;
-    }
 }
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.h	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.h	(revision 2391)
@@ -46,6 +46,4 @@
             void setConfigValues();
 
-            virtual bool create();
-
         private:
             ParticleInterface* particles_;
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/Projectile.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/Projectile.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/Projectile.cc	(revision 2391)
@@ -48,4 +48,6 @@
         RegisterObject(Projectile);
 
+COUT(0) << "Projectile::Projectile" << std::endl;
+
         this->setConfigValues();
         this->explosionTemplateName_ = "Orxonox/explosion3";
@@ -53,5 +55,5 @@
 
         //this->setStatic(false);
-        this->translate(Vector3(55, 0, 0), Ogre::Node::TS_LOCAL);
+//        this->translate(Vector3(55, 0, 0), Ogre::Node::TS_LOCAL);
 
         /*
@@ -121,7 +123,3 @@
         delete this;
     }
-
-    bool Projectile::create(){
-      return WorldEntity::create();
-    }
 }
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/Projectile.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/Projectile.h	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/Projectile.h	(revision 2391)
@@ -45,6 +45,4 @@
             virtual void tick(float dt);
 
-            virtual bool create();
-
         protected:
             Projectile(BaseObject* creator);
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2391)
@@ -44,4 +44,8 @@
     {
         RegisterObject(LaserGun);
+
+        //in future XMLPort
+        this->speed_ = 250;
+
     }
 
@@ -52,5 +56,6 @@
     void LaserGun::takeBullets()
     {
-        this->munition_->removeBullets(1,this);
+COUT(0) << "LaserGun::takeBullets" << std::endl;
+        this->munition_->removeBullets(1);
         this->bulletTimer(this->bulletLoadingTime_);
     }
@@ -64,7 +69,8 @@
     void LaserGun::createProjectile()
     {
+COUT(0) << "LaserGun::createProjectile" << std::endl;
         BillboardProjectile* projectile = new ParticleProjectile(this);
-        projectile->setOrientation(projectile->getOrientation());
-        projectile->setPosition(projectile->getWorldPosition());
+        projectile->setOrientation(this->getWorldOrientation());
+        projectile->setPosition(this->getWorldPosition());
         projectile->setVelocity(WorldEntity::FRONT * this->speed_);
     }
Index: code/branches/weapon2/src/orxonox/objects/worldentities/MovableEntity.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/worldentities/MovableEntity.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/worldentities/MovableEntity.cc	(revision 2391)
@@ -75,5 +75,5 @@
         {
             this->velocity_ += (dt * this->acceleration_);
-            this->node_->translate(dt * this->velocity_);
+            this->node_->translate(dt * this->velocity_, Ogre::Node::TS_LOCAL);
 
             this->rotationRate_ += (dt * this->momentum_);
Index: code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2390)
+++ code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2391)
@@ -153,5 +153,7 @@
     {   
 COUT(0) << "Pawn::setWeaponSlot" << std::endl;
+        this->attach(wSlot);
         this->weaponSystem_->attachWeaponSlot(wSlot);   }
+
     WeaponSlot * Pawn::getWeaponSlot(unsigned int index) const
     {   return this->weaponSystem_->getWeaponSlotPointer(index);    }
