Index: /orxonox/trunk/src/lib/graphics/spatial_separation/quadtree.cc
===================================================================
--- /orxonox/trunk/src/lib/graphics/spatial_separation/quadtree.cc	(revision 4948)
+++ /orxonox/trunk/src/lib/graphics/spatial_separation/quadtree.cc	(revision 4949)
@@ -171,5 +171,5 @@
     this->nodes[i + j * this->maxIndex]->includesPoint(position);
   else
-    PRINTF(0)("Object has left terrain\n");
+    PRINTF(5)("Object has left terrain\n");
 }
 
Index: /orxonox/trunk/src/world_entities/weapons/test_gun.h
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/test_gun.h	(revision 4948)
+++ /orxonox/trunk/src/world_entities/weapons/test_gun.h	(revision 4949)
@@ -1,8 +1,8 @@
 /*!
-    \file weapon.h
+    @file weapon.h
   *  a weapon that a player can use
 
     A Player has a list of weapons, that can be choosen to shoot projectiles
-    (projectiles.{cc,h}) at ennemies. These weapons can be shooted sequentially
+    (projectiles.{cc,h}) at enemies. These weapons can be shooted sequentially
     or (if able) combined. Therefore you can choose the weapon mode = choose
     a weapon.
@@ -26,11 +26,4 @@
 #include "weapon.h"
 
-class Projectile;
-class Vector;
-class Quaternion;
-class Animation3D;
-class TestBullet;
-
-
 class TestGun : public Weapon
   {
@@ -50,6 +43,4 @@
   private:
     PNode* objectComponent1;         //<! the gun is made of multiple parts, these PNodes represent their location and orientation
-    PNode* objectComponent2;
-    PNode* objectComponent3;
 
     int leftRight;   // this will become an enum
Index: /orxonox/trunk/src/world_entities/weapons/weapon.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/weapon.cc	(revision 4948)
+++ /orxonox/trunk/src/world_entities/weapons/weapon.cc	(revision 4949)
@@ -301,5 +301,5 @@
 bool Weapon::deactivateW()
 {
-  if (this->currentState != WS_INACTIVE)
+//  if (this->currentState != WS_INACTIVE)
   {
     PRINTF(4)("Deactivating the Weapon %s\n", this->getName());
@@ -403,4 +403,5 @@
 inline void Weapon::enterState(WeaponState state)
 {
+  PRINTF(3)("ENTERING STATE %s\n", stateToChar(state));
   // playing animation if availiable
   if (likely(this->animation[state] != NULL))
@@ -427,21 +428,18 @@
   this->stateDuration -= dt;
 
-  if (this->isActive())
-  {
-    if (this->stateDuration <= 0.0)
-    {
-      if (unlikely (this->currentState == WS_DEACTIVATING))
-      {
-        this->currentState = WS_INACTIVE;
-        return;
-      }
-      else
-        this->currentState = WS_IDLE;
-
-      if (this->requestedAction != WA_NONE)
-      {
-        this->stateDuration = -dt;
-        this->execute();
-      }
+  if (this->stateDuration <= 0.0)
+  {
+    if (unlikely (this->currentState == WS_DEACTIVATING))
+    {
+      this->currentState = WS_INACTIVE;
+      return;
+    }
+    else
+      this->currentState = WS_IDLE;
+
+    if (this->requestedAction != WA_NONE)
+    {
+      this->stateDuration = -dt;
+      this->execute();
     }
   }
Index: /orxonox/trunk/src/world_entities/weapons/weapon.h
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/weapon.h	(revision 4948)
+++ /orxonox/trunk/src/world_entities/weapons/weapon.h	(revision 4949)
@@ -90,4 +90,6 @@
     /** @returns true if the weapon must be drawn */
     inline bool isVisible() const { return (this->currentState != WS_INACTIVE || !this->hideInactive)?true:false; };
+    /** @returns true if the Weapon is chargeable */
+    inline bool isChargeable() const { return this->chargeable; };
 
     // FUNCTIONS TO SET THE WEAPONS PROPERTIES.
Index: /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc	(revision 4948)
+++ /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc	(revision 4949)
@@ -40,4 +40,9 @@
 }
 
+WeaponManager::WeaponManager(const TiXmlElement* root)
+{
+  this->init();
+  this->loadParams(root);
+}
 
 /**
@@ -51,8 +56,8 @@
   world will clean them up for me
   */
-  for(int i = 0; i < W_MAX_CONFIGS; ++i)
+  for(int i = 0; i < WM_MAX_CONFIGS; ++i)
   {
     this->configs[i].bUsed = false;
-    for(int j = 0; j < W_MAX_SLOTS; ++j)
+    for(int j = 0; j < WM_MAX_SLOTS; ++j)
       this->configs[i].slots[j] = NULL;
   }
@@ -69,8 +74,8 @@
   this->setClassID(CL_WEAPON_MANAGER, "WeaponManager");
 
-  for(int i = 0; i < W_MAX_CONFIGS; ++i)
+  for(int i = 0; i < WM_MAX_CONFIGS; ++i)
   {
     this->configs[i].bUsed = false;
-    for(int j = 0; j < W_MAX_SLOTS; ++j)
+    for(int j = 0; j < WM_MAX_SLOTS; ++j)
       this->configs[i].slots[j] = NULL;
   }
@@ -186,11 +191,11 @@
   int i, lastConfID;
   lastConfID = this->currConfID;
-  for(i = this->currConfID + 1; i < W_MAX_CONFIGS && !this->configs[i].bUsed; ++i);
-  if( i == W_MAX_CONFIGS) this->currConfID = WM_CONFIG0;
+  for(i = this->currConfID + 1; i < WM_MAX_CONFIGS && !this->configs[i].bUsed; ++i);
+  if( i == WM_MAX_CONFIGS) this->currConfID = WM_CONFIG0;
   else this->currConfID = i;
 
 
   Weapon *w1, *w2;
-  for(int j = 0; j < W_MAX_SLOTS; ++j)
+  for(int j = 0; j < WM_MAX_SLOTS; ++j)
   {
     w1 = this->configs[lastConfID].slots[j];
@@ -224,5 +229,5 @@
 {
   Weapon* firingWeapon;
-  for(int i = 0; i < W_MAX_SLOTS; ++i)
+  for(int i = 0; i < WM_MAX_SLOTS; ++i)
   {
     firingWeapon = this->configs[this->currConfID].slots[i];
@@ -241,5 +246,5 @@
 {
   Weapon* w;
-  for(int i = 0; i < W_MAX_SLOTS; ++i)
+  for(int i = 0; i < WM_MAX_SLOTS; ++i)
   {
     w = this->configs[this->currConfID].slots[i];
@@ -259,5 +264,5 @@
   Weapon* w;
   for (int j = 0; j < 4; ++j )
-  for(int i = 0; i < W_MAX_SLOTS; ++i)
+  for(int i = 0; i < WM_MAX_SLOTS; ++i)
   {
     w = this->configs[j].slots[i];
@@ -274,5 +279,5 @@
 int WeaponManager::getNextFreeSlot(int configID)
 {
-  for( int i = 0; i < W_MAX_SLOTS; ++i)
+  for( int i = 0; i < WM_MAX_SLOTS; ++i)
   {
     if( this->configs[configID].slots[i] == NULL)
Index: /orxonox/trunk/src/world_entities/weapons/weapon_manager.h
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/weapon_manager.h	(revision 4948)
+++ /orxonox/trunk/src/world_entities/weapons/weapon_manager.h	(revision 4949)
@@ -35,6 +35,7 @@
 template <class T> class tAnimation;
 
-#define    W_MAX_SLOTS       8
-#define    W_MAX_CONFIGS     4
+#define    WM_MAX_SLOTS            8                   //!< How many slots the WeaponManager has at its max
+#define    WM_MAX_CONFIGS          4                   //!< The maximum number of predefined Configurations
+#define    WM_MAX_LOADED_WEAPONS   20                  //!< The
 
 //! this is an identifier for the weapon config
@@ -66,9 +67,34 @@
 } WM_SLOT;
 
+typedef enum
+{
+  WM_SLOTC_DIRECTIONAL   = 1,
+  WM_SLOTC_TURRET        = 2,
+  WM_SLOTC_ALLKINDS      = 3,
+
+  WM_SLOTC_FORWARD       = 4,
+  WM_SLOTC_BACKWARD      = 8,
+  WM_SLOTC_LEFT          = 16,
+  WM_SLOTC_RIGHT         = 32,
+  WM_SLOTC_ALLDIRS       = 60,
+
+  WM_SLOTC_ALL           = 63,
+} WM_SlotCapability;
+
+typedef struct WM_Slot
+{
+  int           number;
+  bool          occupied;
+  long          capability;
+
+  Weapon*       currentWeapon;
+  Weapon*       nextWeapon;
+};
+
 //! this is a weapon Configuration: it has up to 8 slots
 typedef struct
 {
   bool           bUsed;                       //!< is set to true, if this configuration is
-  Weapon*        slots[8];
+  Weapon*        slots[WM_MAX_SLOTS];
 } weaponConfig;
 
@@ -99,8 +125,10 @@
   private:
     Crosshair*              crosshair;               //!< an aim.
-    tAnimation<Crosshair>*  crossHairSizeAnim;
+    tAnimation<Crosshair>*  crossHairSizeAnim;       //!< An animation for the crosshair (scaling)
 
-    int                     slotCount;               //<! number of weapon slots a ship has
-    int                     currConfID;              //<! the currently selected config
-    weaponConfig            configs[4];              //<! a list of four configurations
+    int                     slotCount;               //!< number of weapon slots a ship has
+    int                     currConfID;              //!< the currently selected config
+    weaponConfig            configs[4];              //!< a list of four configurations
+
+    Weapon*                 availiableWeapons[WM_MAX_LOADED_WEAPONS];
 };
