Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.cc
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.cc	(revision 2378)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.cc	(revision 2379)
@@ -46,9 +46,19 @@
     }
 
-    unsigned int Munition::getBullets()
-    { return this->bullets_; }
+    bool Munition::bullets()
+    { 
+        if (this->bullets_ > 0)
+            return true;
+        else
+            return false;
+    }
 
-    unsigned int Munition::getMagazines()
-    { return this->magazines_; }
+    bool Munition::magazines()
+    { 
+        if (this->magazines_ > 0)
+            return true;
+        else
+            return false;
+    }
 
     void Munition::setMaxBullets(unsigned int amount)
@@ -60,9 +70,8 @@
     void Munition::removeBullets(unsigned int amount, Weapon * parentWeapon)
     {
-        //if actual magazine is empty, decrement it and set the bullets amount to full (masBullets_)
         if ( this->bullets_ == 0 )
         {
             this->removeMagazines(1);
-            parentWeapon->magazineTimer();
+            parentWeapon->magazineTimer(0);
             this->bullets_ = this->maxBullets_;
         }
@@ -85,5 +94,6 @@
         }
         else
-            this->magazines_ = this->magazines_ - amount; }
+            this->magazines_ = this->magazines_ - amount;
+    }
 
     void Munition::addBullets(unsigned int amount)
@@ -108,4 +118,14 @@
 
 
+    void Munition::fillBullets()
+    {
+        this->bullets_ = this->maxBullets_;
+    }
+    
+    void Munition::fillMagazines()
+    {
+        this->magazines_ = this->maxMagazines_;
+    }
+    
     void Munition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.h
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.h	(revision 2378)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/Munition.h	(revision 2379)
@@ -50,6 +50,9 @@
             void setMaxMagazines(unsigned int amount);
 
-            unsigned int getBullets();
-            unsigned int getMagazines();
+            void fillBullets();
+            void fillMagazines();
+
+            bool bullets();
+            bool magazines();
 
             void removeBullets(unsigned int k, Weapon * parentWeapon);
Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2378)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2379)
@@ -60,17 +60,52 @@
     }
 
+    void Weapon::setWeapon()
+    {
+        this->bulletLoadingTime_ = 0.5;
+        this->magazineLoadingTime_ = 3.0;
+        this->munition_->setMaxMagazines(100);
+        this->munition_->setMaxBullets(30);
+        this->munition_->fillBullets();
+        this->munition_->fillMagazines();
+    }
+
+
     void Weapon::fire()
     {
+COUT(0) << "LaserGun::fire, this=" << this << std::endl;
+        if ( this->bulletReadyToShoot_ && this->magazineReadyToShoot_ )
+        {
+COUT(0) << "LaserGun::fire - ready to shoot" << std::endl;
+
+            this->bulletReadyToShoot_ = false;
+            if ( this->munition_->bullets() )
+            {
+                //shoot
+                this->takeBullets();
+                this->createProjectile();
+            }
+            //if there are no bullets, but magazines
+            else if ( this->munition_->magazines() && !this->munition_->bullets() )
+            {
+                this->takeMagazines();
+            }
+        }
+        else
+        {
+COUT(0) << "LaserGun::fire - weapon not reloaded" << std::endl;
+        }
 
     }
 
 
-    void Weapon::bulletTimer()
+    void Weapon::bulletTimer(float bulletLoadingTime)
     {
-        this->bulletReloadTimer_.setTimer( this->bulletLoadingTime_ , false , this , createExecutor(createFunctor(&Weapon::bulletReloaded)));
+COUT(0) << "Weapon::bulletTimer started" << std::endl;
+        this->bulletReloadTimer_.setTimer( bulletLoadingTime , false , this , createExecutor(createFunctor(&Weapon::bulletReloaded)));
     }
-    void Weapon::magazineTimer()
+    void Weapon::magazineTimer(float magazineLoadingTime)
     {
-        this->magazineReloadTimer_.setTimer( this->magazineLoadingTime_ , false , this , createExecutor(createFunctor(&Weapon::magazineReloaded)));
+COUT(0) << "Weapon::magazineTimer started" << std::endl;
+        this->magazineReloadTimer_.setTimer( magazineLoadingTime , false , this , createExecutor(createFunctor(&Weapon::magazineReloaded)));
     }
 
@@ -79,5 +114,8 @@
 
     void Weapon::magazineReloaded()
-    { this->magazineReadyToShoot_ = true; }
+    { 
+        this->munition_->fillBullets();
+        this->magazineReadyToShoot_ = true;
+    }
 
 
@@ -104,5 +142,5 @@
 
 
-    /*get and set functions
+     /*get and set functions
      *
      */
@@ -123,4 +161,6 @@
 return this->munition_; }
 
+
+
     void Weapon::setBulletLoadingTime(float loadingTime)
     {   this->bulletLoadingTime_ = loadingTime;   }
@@ -135,15 +175,4 @@
     {   return this->magazineLoadingTime_;  }
 
-    void Weapon::setBulletReadyToShoot(bool b)
-    {   this->bulletReadyToShoot_ = b;   }
-
-    bool Weapon::getBulletReadyToShoot()
-    {   return this->bulletReadyToShoot_;    }
-
-    void Weapon::setMagazineReadyToShoot(bool b)
-    {   this->magazineReadyToShoot_ = b;   }
-
-    bool Weapon::getMagazineReadyToShoot()
-    {   return this->magazineReadyToShoot_;    }
 
     Timer<Weapon> * Weapon::getBulletTimer()
@@ -152,3 +181,8 @@
     Timer<Weapon> * Weapon::getMagazineTimer()
     {   return &this->magazineReloadTimer_;   }
+
+    void Weapon::takeBullets() { };
+    void Weapon::createProjectile() { };
+    void Weapon::takeMagazines() { };
+
 }
Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2378)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2379)
@@ -55,6 +55,6 @@
 
             //reloading
-            void bulletTimer();
-            void magazineTimer();
+            void bulletTimer(float bulletLoadingTime);
+            void magazineTimer(float magazineLoadingTime);
             void bulletReloaded();
             void magazineReloaded();
@@ -63,8 +63,4 @@
             void setMagazineLoadingTime(float loadingTime);
             float getMagazineLoadingTime();
-            void setBulletReadyToShoot(bool b);
-            bool getBulletReadyToShoot();
-            void setMagazineReadyToShoot(bool b);
-            bool getMagazineReadyToShoot();
             Timer<Weapon> *getBulletTimer();
             Timer<Weapon> *getMagazineTimer();
@@ -72,4 +68,8 @@
             virtual void setMunitionType(std::string munitionType);
             virtual const std::string getMunitionType();
+
+            virtual void takeBullets();
+            virtual void takeMagazines();
+            virtual void createProjectile();
 
             inline void setParentWeaponSlot(WeaponSlot *parentWeaponSlot)
@@ -81,4 +81,7 @@
             inline WeaponSystem * getParentWeaponSystem()
                 { return this->parentWeaponSystem_; };
+
+            //in future by XMLPort, 
+            virtual void setWeapon();
 
         private:
Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/Projectile.cc
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/Projectile.cc	(revision 2378)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/projectiles/Projectile.cc	(revision 2379)
@@ -85,5 +85,5 @@
         if (!this->isActive())
             return;
-
+/*
         float radius;
         for (ObjectList<Model>::iterator it = ObjectList<Model>::begin(); it; ++it)
@@ -114,4 +114,5 @@
             }
         }
+*/
     }
 
Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2378)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2379)
@@ -50,28 +50,22 @@
     }
 
-    void LaserGun::fire()
+    void LaserGun::takeBullets()
     {
-COUT(0) << "LaserGun::fire, this=" << this << std::endl;
-        if ( this->getBulletReadyToShoot() && this->getMagazineReadyToShoot() )
-        {
-COUT(0) << "LaserGun::fire - ready to shoot" << std::endl;
-            //take munition
-            this->setBulletReadyToShoot(false);
-            Weapon::bulletTimer();
-            this->getAttachedMunition(this->munitionType_)->removeBullets(1,this);
-
-            //create projectile
-            BillboardProjectile* projectile = new ParticleProjectile(this);
-            projectile->setOrientation(projectile->getOrientation());
-            projectile->setPosition(projectile->getWorldPosition());
-            projectile->setVelocity(WorldEntity::FRONT * this->speed_);
-
-            //projectile->setColour(this->getProjectileColour());
-        }
-        else
-        {
-            //actions, when weapon is not reloaded if there are some
-        }
+        this->munition_->removeBullets(1,this);
+        this->bulletTimer(this->bulletLoadingTime_);
     }
 
+    void LaserGun::takeMagazines()
+    {
+        this->munition_->removeMagazines(1);
+        this->magazineTimer(this->magazineLoadingTime_);
+    }
+
+    void LaserGun::createProjectile()
+    {
+        BillboardProjectile* projectile = new ParticleProjectile(this);
+        projectile->setOrientation(projectile->getOrientation());
+        projectile->setPosition(projectile->getWorldPosition());
+        projectile->setVelocity(WorldEntity::FRONT * this->speed_);
+    }
 }
Index: /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h	(revision 2378)
+++ /code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h	(revision 2379)
@@ -47,6 +47,8 @@
             LaserGun(BaseObject* creator);
             virtual ~LaserGun();
-
-            void fire();
+            
+            virtual void takeBullets();
+            virtual void takeMagazines();
+            virtual void createProjectile();
 
         private:
Index: /code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc
===================================================================
--- /code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2378)
+++ /code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2379)
@@ -53,12 +53,5 @@
         this->lastHitOriginator_ = 0;
 
-        //WeaponSystem
         weaponSystem_ = new WeaponSystem(this);
-        /*
-        WeaponSet * weaponSet1 = new WeaponSet(this,1);
-        this->weaponSystem_->attachWeaponSet(weaponSet1);
-        //totally bad solution...
-        weaponSet1->setParentWeaponSystem(weaponSystem_);
-        */
 
         this->registerVariables();
