Index: code/trunk/src/orxonox/objects/worldentities/Billboard.cc
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/Billboard.cc	(revision 3049)
+++ code/trunk/src/orxonox/objects/worldentities/Billboard.cc	(revision 3053)
@@ -47,4 +47,5 @@
         this->material_ = "";
         this->colour_ = ColourValue::White;
+//        this->rotation_ = 0;
 
         this->registerVariables();
@@ -66,4 +67,5 @@
         XMLPortParam(Billboard, "material", setMaterial, getMaterial, xmlelement, mode);
         XMLPortParam(Billboard, "colour",   setColour,   getColour,   xmlelement, mode).defaultValues(ColourValue::White);
+//        XMLPortParam(Billboard, "rotation", setRotation, getRotation, xmlelement, mode).defaultValues(0);
     }
 
@@ -72,4 +74,5 @@
         registerVariable(this->material_, variableDirection::toclient, new NetworkCallback<Billboard>(this, &Billboard::changedMaterial));
         registerVariable(this->colour_,   variableDirection::toclient, new NetworkCallback<Billboard>(this, &Billboard::changedColour));
+//        registerVariable(this->rotation_, variableDirection::toclient, new NetworkCallback<Billboard>(this, &Billboard::changedRotation));
     }
 
@@ -87,4 +90,5 @@
                      this->attachOgreObject(this->billboard_.getBillboardSet());
                 this->billboard_.setVisible(this->isVisible());
+//                this->changedRotation();
             }
         }
@@ -110,4 +114,12 @@
             this->billboard_.setColour(this->colour_);
     }
+    
+/*
+    void Billboard::changedRotation()
+    {
+        if (this->billboard_.getBillboardSet())
+            this->billboard_.getBillboardSet()->setRotation(this->rotation_);
+    }
+*/
 
     void Billboard::changedVisibility()
Index: code/trunk/src/orxonox/objects/worldentities/Billboard.h
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/Billboard.h	(revision 3049)
+++ code/trunk/src/orxonox/objects/worldentities/Billboard.h	(revision 3053)
@@ -61,5 +61,10 @@
             inline const ColourValue& getColour() const
                 { return this->colour_; }
-
+/*
+            inline void setRotation(const Radian& rotation)
+                { this->rotation_ = rotation; this->changedRotation(); }
+            inline const Radian& getRotation() const
+                { return this->rotation_; }
+*/
             virtual void setTeamColour(const ColourValue& colour)
                 { this->setColour(colour); }
@@ -73,8 +78,10 @@
         private:
             void changedMaterial();
+//            void changedRotation();
 
             BillboardSet billboard_;
             std::string material_;
             ColourValue colour_;
+//            Radian rotation_;
     };
 }
Index: code/trunk/src/orxonox/objects/worldentities/ControllableEntity.h
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/ControllableEntity.h	(revision 3049)
+++ code/trunk/src/orxonox/objects/worldentities/ControllableEntity.h	(revision 3053)
@@ -31,7 +31,5 @@
 
 #include "OrxonoxPrereqs.h"
-
 #include "MobileEntity.h"
-#include "objects/weaponSystem/WeaponSystem.h"
 
 namespace orxonox
@@ -82,6 +80,6 @@
                 { this->rotateRoll(Vector2(value, 0)); }
 
-            virtual void fire(WeaponMode::Enum fireMode) {}
-            virtual void altFire(WeaponMode::Enum fireMode) {}
+            virtual void fire(unsigned int firemode) {}
+            virtual void reload() {}
 
             virtual void boost() {}
Index: code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.cc
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 3049)
+++ code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 3053)
@@ -39,4 +39,8 @@
 #include "objects/worldentities/ParticleSpawner.h"
 #include "objects/worldentities/ExplosionChunk.h"
+#include "objects/weaponsystem/WeaponSystem.h"
+#include "objects/weaponsystem/WeaponSlot.h"
+#include "objects/weaponsystem/WeaponPack.h"
+#include "objects/weaponsystem/WeaponSet.h"
 
 namespace orxonox
@@ -52,4 +56,5 @@
         this->fire_ = 0x0;
         this->firehack_ = 0x0;
+        this->bReload_ = false;
 
         this->health_ = 0;
@@ -66,5 +71,5 @@
         {
             this->weaponSystem_ = new WeaponSystem(this);
-            this->weaponSystem_->setParentPawn(this);
+            this->weaponSystem_->setPawn(this);
         }
         else
@@ -100,7 +105,7 @@
         XMLPortParam(Pawn, "explosionchunks", setExplosionChunks, getExplosionChunks, xmlelement, mode).defaultValues(7);
 
-        XMLPortObject(Pawn, WeaponSlot, "weaponslots", setWeaponSlot, getWeaponSlot, xmlelement, mode);
-        XMLPortObject(Pawn, WeaponSet, "weaponsets", setWeaponSet, getWeaponSet, xmlelement, mode);
-        XMLPortObject(Pawn, WeaponPack, "weapons", setWeaponPack, getWeaponPack, xmlelement, mode);
+        XMLPortObject(Pawn, WeaponSlot, "weaponslots", addWeaponSlot, getWeaponSlot, xmlelement, mode);
+        XMLPortObject(Pawn, WeaponSet, "weaponsets", addWeaponSet, getWeaponSet, xmlelement, mode);
+        XMLPortObject(Pawn, WeaponPack, "weapons", addWeaponPack, getWeaponPack, xmlelement, mode);
     }
 
@@ -111,4 +116,5 @@
         registerVariable(this->initialHealth_, variableDirection::toclient);
         registerVariable(this->fire_,          variableDirection::toserver);
+        registerVariable(this->bReload_,       variableDirection::toserver);
     }
 
@@ -117,15 +123,17 @@
         SUPER(Pawn, tick, dt);
 
-        if (this->weaponSystem_)
-        {
-            if (this->fire_ & WeaponMode::fire)
-                this->weaponSystem_->fire(WeaponMode::fire);
-            if (this->fire_ & WeaponMode::altFire)
-                this->weaponSystem_->fire(WeaponMode::altFire);
-            if (this->fire_ & WeaponMode::altFire2)
-                this->weaponSystem_->fire(WeaponMode::altFire2);
-        }
+        if (this->weaponSystem_ && GameMode::isMaster())
+        {
+            for (unsigned int firemode = 0; firemode < WeaponSystem::MAX_FIRE_MODES; firemode++)
+                if (this->fire_ & WeaponSystem::getFiremodeMask(firemode))
+                    this->weaponSystem_->fire(firemode);
+
+            if (this->bReload_)
+                this->weaponSystem_->reload();
+        }
+
         this->fire_ = this->firehack_;
         this->firehack_ = 0x0;
+        this->bReload_ = false;
 
         if (this->health_ <= 0)
@@ -251,7 +259,12 @@
     }
 
-    void Pawn::fire(WeaponMode::Enum fireMode)
-    {
-        this->firehack_ |= fireMode;
+    void Pawn::fire(unsigned int firemode)
+    {
+        this->firehack_ |= WeaponSystem::getFiremodeMask(firemode);
+    }
+
+    void Pawn::reload()
+    {
+        this->bReload_ = true;
     }
 
@@ -274,9 +287,9 @@
     *       --> e.g. Pickup-Items
     */
-    void Pawn::setWeaponSlot(WeaponSlot * wSlot)
+    void Pawn::addWeaponSlot(WeaponSlot * wSlot)
     {
         this->attach(wSlot);
         if (this->weaponSystem_)
-            this->weaponSystem_->attachWeaponSlot(wSlot);
+            this->weaponSystem_->addWeaponSlot(wSlot);
     }
 
@@ -284,38 +297,33 @@
     {
         if (this->weaponSystem_)
-            return this->weaponSystem_->getWeaponSlotPointer(index);
+            return this->weaponSystem_->getWeaponSlot(index);
         else
             return 0;
     }
 
-    void Pawn::setWeaponPack(WeaponPack * wPack)
-    {
-        if (this->weaponSystem_)
-        {
-            wPack->setParentWeaponSystem(this->weaponSystem_);
-            wPack->setParentWeaponSystemToAllWeapons(this->weaponSystem_);
-            this->weaponSystem_->attachWeaponPack( wPack,wPack->getFireMode() );
-            wPack->attachNeededMunitionToAllWeapons();
-        }
-    }
-
-    WeaponPack * Pawn::getWeaponPack(unsigned int firemode) const
-    {
-        if (this->weaponSystem_)
-            return this->weaponSystem_->getWeaponPackPointer(firemode);
+    void Pawn::addWeaponSet(WeaponSet * wSet)
+    {
+        if (this->weaponSystem_)
+            this->weaponSystem_->addWeaponSet(wSet);
+    }
+
+    WeaponSet * Pawn::getWeaponSet(unsigned int index) const
+    {
+        if (this->weaponSystem_)
+            return this->weaponSystem_->getWeaponSet(index);
         else
             return 0;
     }
 
-    void Pawn::setWeaponSet(WeaponSet * wSet)
-    {
-        if (this->weaponSystem_)
-            this->weaponSystem_->attachWeaponSet(wSet);
-    }
-
-    WeaponSet * Pawn::getWeaponSet(unsigned int index) const
-    {
-        if (this->weaponSystem_)
-            return this->weaponSystem_->getWeaponSetPointer(index);
+    void Pawn::addWeaponPack(WeaponPack * wPack)
+    {
+        if (this->weaponSystem_)
+            this->weaponSystem_->addWeaponPack(wPack);
+    }
+
+    WeaponPack * Pawn::getWeaponPack(unsigned int index) const
+    {
+        if (this->weaponSystem_)
+            return this->weaponSystem_->getWeaponPack(index);
         else
             return 0;
Index: code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.h
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.h	(revision 3049)
+++ code/trunk/src/orxonox/objects/worldentities/pawns/Pawn.h	(revision 3053)
@@ -34,5 +34,4 @@
 #include "objects/worldentities/ControllableEntity.h"
 #include "objects/RadarViewable.h"
-#include "objects/weaponSystem/WeaponSystem.h"
 
 namespace orxonox
@@ -40,4 +39,6 @@
     class _OrxonoxExport Pawn : public ControllableEntity, public RadarViewable
     {
+        friend class WeaponSystem;
+
         public:
             Pawn(BaseObject* creator);
@@ -76,13 +77,14 @@
             virtual void kill();
 
-            virtual void fire(WeaponMode::Enum fireMode);
+            virtual void fire(unsigned int firemode);
+            virtual void reload();
             virtual void postSpawn();
 
-            void setWeaponSlot(WeaponSlot * wSlot);
+            void addWeaponSlot(WeaponSlot * wSlot);
             WeaponSlot * getWeaponSlot(unsigned int index) const;
-            void setWeaponPack(WeaponPack * wPack);
-            WeaponPack * getWeaponPack(unsigned int firemode) const;
-            void setWeaponSet(WeaponSet * wSet);
+            void addWeaponSet(WeaponSet * wSet);
             WeaponSet * getWeaponSet(unsigned int index) const;
+            void addWeaponPack(WeaponPack * wPack);
+            WeaponPack * getWeaponPack(unsigned int index) const;
 
             inline const WorldEntity* getWorldEntity() const
@@ -130,8 +132,13 @@
             unsigned int fire_;
             unsigned int firehack_;
+            bool bReload_;
 
             std::string spawnparticlesource_;
             float spawnparticleduration_;
             unsigned int numexplosionchunks_;
+
+        private:
+            inline void setWeaponSystem(WeaponSystem* weaponsystem)
+                { this->weaponSystem_ = weaponsystem; }
     };
 
Index: code/trunk/src/orxonox/objects/worldentities/pawns/Spectator.cc
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/pawns/Spectator.cc	(revision 3049)
+++ code/trunk/src/orxonox/objects/worldentities/pawns/Spectator.cc	(revision 3053)
@@ -196,5 +196,5 @@
     }
 
-    void Spectator::fire(WeaponMode::Enum fireMode)
+    void Spectator::fire(unsigned int firemode)
     {
         if (this->getPlayer())
Index: code/trunk/src/orxonox/objects/worldentities/pawns/Spectator.h
===================================================================
--- code/trunk/src/orxonox/objects/worldentities/pawns/Spectator.h	(revision 3049)
+++ code/trunk/src/orxonox/objects/worldentities/pawns/Spectator.h	(revision 3053)
@@ -54,5 +54,5 @@
             virtual void rotateRoll(const Vector2& value);
 
-            virtual void fire(WeaponMode::Enum fireMode);
+            virtual void fire(unsigned int firemode);
             virtual void greet();
 
