Index: code/branches/weapon2/src/orxonox/objects/controllers/HumanController.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/controllers/HumanController.cc	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/controllers/HumanController.cc	(revision 2145)
@@ -103,5 +103,5 @@
     {
         if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
-            HumanController::localController_s->controllableEntity_->fire();
+            HumanController::localController_s->controllableEntity_->fire(WeaponMode::fire);
     }
 
@@ -109,5 +109,5 @@
     {
         if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
-            HumanController::localController_s->controllableEntity_->altFire();
+            HumanController::localController_s->controllableEntity_->fire(WeaponMode::altFire);
     }
 
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.cc	(revision 2145)
@@ -35,4 +35,5 @@
 #include "Weapon.h"
 
+
 namespace orxonox
 {
@@ -40,7 +41,6 @@
     {
         RegisterObject(Weapon);
-
-        this->loadingTime_ = 0;
-        this->munition_ = 0;
+        this->weaponReadyToShoot_ = true;
+        //this->setParentWeaponSystem();
 
     }
@@ -50,8 +50,4 @@
     }
 
-    void Weapon::addMunition()
-    {
-
-    }
 
     void Weapon::XMLPort(Element& xmlelement, XMLPort::Mode mode)
@@ -64,3 +60,20 @@
 
     }
+
+    void Weapon::reloaded()
+    {
+        this->weaponReadyToShoot_ = true;
+    }
+
+    void Weapon::attachNeededMunition(Munition *PointerToMunition)
+    {
+
+    }
+/*
+    void Weapon::setParentWeaponSystem()
+    {
+        this->parentWeaponSystem_ = this->parentWeaponSlot_->parentWeaponSet_->parentWeaponSystem_;
+    }
+*/
+
 }
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/Weapon.h	(revision 2145)
@@ -33,5 +33,6 @@
 
 #include "core/BaseObject.h"
-
+#include "tools/BillboardSet.h"
+#include "tools/Timer.h"
 
 namespace orxonox
@@ -45,11 +46,22 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
 
-            void addMunition();
             virtual void fire();
+            void reloaded();
+            virtual void attachNeededMunition(Munition *PointerToMunition);
+
+            inline void setParentWeaponSlot(WeaponSlot *parentWeaponSlot)
+                { parentWeaponSlot_=parentWeaponSlot; };
+            inline WeaponSlot * getParentWeaponSlot()
+                { return parentWeaponSlot_; };
+
+            //void setParentWeaponSystem();
 
         private:
-            int loadingTime_;
-            Munition *munition_;
-
+            bool weaponReadyToShoot_;
+            float loadingTime_;
+            Munition *pointerToMunition_;
+            WeaponSlot *parentWeaponSlot_;
+            //WeaponSystem *parentWeaponSystem_;
+            Timer<Weapon> reloadTimer_;
 
 
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSet.cc	(revision 2145)
@@ -54,7 +54,4 @@
     }
 
-    //Vorwärtsdeklaration
-    WeaponSystem * parentWeaponSystem_;
-
     void WeaponSet::attachWeaponSlot(WeaponSlot *wSlot)
     {
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.cc	(revision 2145)
@@ -36,15 +36,14 @@
 
 
-
 namespace orxonox
 {
-    WeaponSlot::WeaponSlot(BaseObject* creator) : BaseObject(creator)
+    WeaponSlot::WeaponSlot(BaseObject* creator) : PositionableEntity(creator)
     {
         RegisterObject(WeaponSlot);
 
         this->unlimitedAmmo_ = false;
-
         this->attachedWeapon_ = 0;
         this->parentWeaponSet_ = 0;
+        this->setObjectMode(0x0);
     }
 
@@ -53,8 +52,9 @@
     }
 
-    void WeaponSlot::attachWeapon(Weapon *weaponName)
+    void WeaponSlot::attachWeapon(Weapon *weaponPointer)
     {
+        this->attachedWeapon_ = weaponPointer;
+    }
 
-    }
 
     /*sets the munition type
@@ -69,5 +69,5 @@
     void WeaponSlot::fire()
     {
-
+        this->attachedWeapon_->fire();
     }
 
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.h	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSlot.h	(revision 2145)
@@ -36,9 +36,9 @@
 
 #include "Weapon.h"
-
+#include "../worldentities/PositionableEntity.h"
 
 namespace orxonox
 {
-    class _OrxonoxExport WeaponSlot : public BaseObject
+    class _OrxonoxExport WeaponSlot : public PositionableEntity
     {
         public:
@@ -48,5 +48,5 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
 
-            void attachWeapon(Weapon *weaponName);
+            void attachWeapon(Weapon *weaponPointer);
             void setAmmoType(bool isUnlimited);
             void fire();
@@ -56,5 +56,4 @@
             inline WeaponSet * getParentWeaponSet()
                 { return parentWeaponSet_; }
-
 
 
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.cc	(revision 2145)
@@ -45,4 +45,5 @@
 namespace orxonox
 {
+
     WeaponSystem::WeaponSystem(BaseObject* creator) : BaseObject(creator)
     {
@@ -51,4 +52,5 @@
         this->activeWeaponSet_ = 0;
         this->parentSpaceShip_ = 0;
+        //this->attachedMunition_ =0;
     }
 
@@ -57,5 +59,4 @@
     }
 
-    //creates empty weaponSet
     void WeaponSystem::attachWeaponSet(WeaponSet *wSet)
     {
@@ -64,4 +65,5 @@
     }
 
+/*
     //the first weaponSet is at n=0
     void WeaponSystem::setActiveWeaponSet(unsigned int n)
@@ -69,9 +71,12 @@
         if (n < this->weaponSets_.size())
             this->activeWeaponSet_ = this->weaponSets_[n];
+        else
+            this->activeWeaponSet_ = this->weaponSets_[0];
     }
+*/
 
     //n is the n'th weaponSet, starting with zero
-    //Spaceship.cc only needs to have the keybinding to a specific Set-number n
-    void WeaponSystem::fire(unsigned int n)
+    //SpaceShip.cc only needs to have the keybinding to a specific Set-number n
+    void WeaponSystem::fire(WeaponMode::Enum n)
     {
         if (n < this->weaponSets_.size())
@@ -79,9 +84,4 @@
     }
 
-    void WeaponSystem::fire()
-    {
-        if (this->activeWeaponSet_)
-            this->activeWeaponSet_->fire();
-    }
 
     WeaponSet * WeaponSystem::getWeaponSetPointer(unsigned int n)
@@ -98,3 +98,16 @@
     }
 
+    /*
+    void WeaponSystem::addMunitionType(Munition *munitionPointer)
+    {
+
+
+        if (munitionPointer != NULL)  //gewährleiste, dass munitionPointer auf etwas sinnvolles zeigt
+            this->attachedMunition_ = munitionPointer;
+        else
+            this->unlimitedAmmo_ = true;
+
+    }
+    */
+
 }
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.h	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/WeaponSystem.h	(revision 2145)
@@ -39,4 +39,19 @@
 namespace orxonox
 {
+    //put here all existing munitionTypes
+    namespace MunitionType
+    {
+        enum Enum
+        { LaserGunMunition };
+    }
+
+    //put here all weapon fire modes.
+    //they have to be added to Pawn and HumanController, too.
+    namespace WeaponMode
+    {
+        enum Enum
+        { fire, altFire, altFire2 };
+    }
+
     class _OrxonoxExport WeaponSystem : public BaseObject
     {
@@ -48,7 +63,8 @@
 
             void attachWeaponSet(WeaponSet *wSet);
+            void addMunitionType(Munition *munitionPointer);
             void fire();
-            void fire(unsigned int n);
-            void setActiveWeaponSet(unsigned int n);
+            void fire(WeaponMode::Enum fireMode);
+            //void setActiveWeaponSet(unsigned int n);
             WeaponSet * getWeaponSetPointer(unsigned int n);
 
@@ -61,6 +77,6 @@
         private:
             std::vector<WeaponSet *> weaponSets_;
+            std::map<MunitionType::Enum,Munition *> munitionSet_;
             WeaponSet *activeWeaponSet_;
-
             SpaceShip *parentSpaceShip_;
     };
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/munitions/LaserGunMunition.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/munitions/LaserGunMunition.h	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/munitions/LaserGunMunition.h	(revision 2145)
@@ -37,5 +37,5 @@
 namespace orxonox
 {
-    class _OrxonoxExport LaserGunMunition : public BaseObject
+    class _OrxonoxExport LaserGunMunition : public Munition
     {
         public:
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.cc	(revision 2145)
@@ -41,5 +41,9 @@
         RegisterObject(LaserGun);
 
-        projectileColor_ = ColourValue(1.0, 1.0, 0.5)
+        this->attachNeededMunition();
+
+        //set weapon properties here
+        this->projectileColor_ = ColourValue(1.0, 1.0, 0.5)
+        this->loadingTime_ = 0.5;
     }
 
@@ -50,18 +54,19 @@
     LaserGun::fire()
     {
+        if { this->weaponReadyToShoot_ }
+        {
+            this->weaponReadyToShoot_ = false;
+            //take munition
+            //this->pointerToMunition_->
+
+            this->reloadTimer_.setTimer( loadingTime_ , false , this , &this->reloaded );
+
             BillboardProjectile* projectile = new ParticleProjectile(this);
-            projectile->setColour(this->projectileColor_);
-            projectile->create();
-            if (projectile->getClassID() == 0)
-            {
-              COUT(3) << "generated projectile with classid 0" <<  std::endl; // TODO: remove this output
-            }
-
-            projectile->setObjectMode(0x3);
-    }
-
-    LaserGun::addMunition()
-    {
-        //this->munition_ = ;
+            projectile->setColour(this->getProjectileColour());
+        }
+        else
+        {
+            //actions, when weapon is not reloaded
+        }
     }
 
@@ -75,3 +80,15 @@
         return projectileColor_;
     }
+
+    void attachNeededMunition(Munition *pointerToMunition)
+    {
+        //if munition type already exist attach it, else create a new one of this type and attach it to the weapon and to the WeaponSystem
+        if ( this->parentWeaponSystem_->munitionSet_[laserGunMunition] )
+            this->pointerToMunition_ = pointerToMunition;
+        else
+        {
+            this->pointerToMunition_ = new LaserGunMunition;
+
+        }
+    }
 }
Index: code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/weaponSystem/weapons/LaserGun.h	(revision 2145)
@@ -35,5 +35,4 @@
 
 #include "LaserGunMunition.h"
-#include "tools/BillboardSet.h"
 #include "util/Math.h"
 
@@ -48,4 +47,5 @@
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
 
+            void fire();
             ColourValue LaserGun::getProjectileColour();
 
@@ -53,6 +53,4 @@
             ColorValue projectileColor_;
 
-
-
     };
 }
Index: code/branches/weapon2/src/orxonox/objects/worldentities/ControllableEntity.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/worldentities/ControllableEntity.h	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/worldentities/ControllableEntity.h	(revision 2145)
@@ -34,4 +34,5 @@
 #include "WorldEntity.h"
 #include "objects/Tickable.h"
+#include "objects/weaponSystem/WeaponSystem.h"
 
 namespace orxonox
@@ -65,6 +66,6 @@
             virtual void rotateRoll(const Vector2& value) {}
 
-            virtual void fire() {}
-            virtual void altFire() {}
+            virtual void fire(WeaponMode::Enum fireMode) {}
+            virtual void altFire(WeaponMode::Enum fireMode) {}
 
             virtual void greet() {}
Index: code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2145)
@@ -35,5 +35,5 @@
 #include "objects/infos/PlayerInfo.h"
 #include "objects/gametypes/Gametype.h"
-#include "objects/weaponSystem/WeaponSystem.h"
+
 
 namespace orxonox
@@ -54,7 +54,7 @@
         this->weaponSystem_ = 0;
 
+        //WeaponSystem
+        weaponSystem_ = new WeaponSystem(this);
         /*
-        //WeaponSystem
-        weaponSystem_ = new WeaponSystem();
         WeaponSet * weaponSet1 = new WeaponSet(1);
         this->weaponSystem_->attachWeaponSet(weaponSet1);
@@ -137,8 +137,8 @@
     }
 
-    void Pawn::fire()
+    void Pawn::fire(WeaponMode::Enum fireMode)
     {
         if (this->weaponSystem_)
-            this->weaponSystem_->fire();
+            this->weaponSystem_->fire(fireMode);
     }
 
Index: code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.h
===================================================================
--- code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.h	(revision 2108)
+++ code/branches/weapon2/src/orxonox/objects/worldentities/pawns/Pawn.h	(revision 2145)
@@ -33,4 +33,5 @@
 
 #include "objects/worldentities/ControllableEntity.h"
+#include "objects/weaponSystem/WeaponSystem.h"
 
 namespace orxonox
@@ -74,5 +75,5 @@
             virtual void kill();
 
-            virtual void fire();
+            virtual void fire(WeaponMode::Enum fireMode);
 
             virtual void postSpawn();
