Index: /trunk/src/world_entities/npcs/ground_turret.cc
===================================================================
--- /trunk/src/world_entities/npcs/ground_turret.cc	(revision 6735)
+++ /trunk/src/world_entities/npcs/ground_turret.cc	(revision 6736)
@@ -115,10 +115,10 @@
   if (likely(this->left != NULL))
   {
-    this->left->tickW(dt);
+//    this->left->tickW(dt);
     this->left->requestAction(WA_SHOOT);
   }
   if (likely(this->right != NULL))
   {
-    this->right->tickW(dt);
+//    this->right->tickW(dt);
     this->right->requestAction(WA_SHOOT);
   }
Index: /trunk/src/world_entities/weapons/weapon.cc
===================================================================
--- /trunk/src/world_entities/weapons/weapon.cc	(revision 6735)
+++ /trunk/src/world_entities/weapons/weapon.cc	(revision 6736)
@@ -538,5 +538,5 @@
  * tick signal for time dependent/driven stuff
 */
-void Weapon::tickW(float dt)
+bool Weapon::tickW(float dt)
 {
   //printf("%s ", stateToChar(this->currentState));
@@ -550,5 +550,5 @@
     {
       this->currentState = WS_INACTIVE;
-      return;
+      return false;
     }
     else
@@ -561,5 +561,5 @@
     }
   }
-  tick(dt);
+  return true;
 }
 
Index: /trunk/src/world_entities/weapons/weapon.h
===================================================================
--- /trunk/src/world_entities/weapons/weapon.h	(revision 6735)
+++ /trunk/src/world_entities/weapons/weapon.h	(revision 6736)
@@ -153,7 +153,7 @@
 
     // FLOW
-    void tickW(float dt); //!< this is a function that must be called by the weaponManager, or any other weaponHandler, all other functions are handled from within
-
-    virtual void tick(float dt) {};
+    bool tickW(float dt); //!< this is a function that must be called by the weaponManager, or any other weaponHandler, all other functions are handled from within
+
+    virtual void tick(float dt) { tickW(dt); };
 
     bool check() const;
Index: /trunk/src/world_entities/weapons/weapon_manager.cc
===================================================================
--- /trunk/src/world_entities/weapons/weapon_manager.cc	(revision 6735)
+++ /trunk/src/world_entities/weapons/weapon_manager.cc	(revision 6736)
@@ -121,5 +121,5 @@
 
   LoadParam(root, "slot-count", this, WeaponManager, setSlotCount)
-      .describe("how many slots(cannons) the WeaponManager can handle");
+  .describe("how many slots(cannons) the WeaponManager can handle");
 
   LOAD_PARAM_START_CYCLE(root, element);
@@ -127,5 +127,5 @@
     // CHECK IF THIS WORKS....
     LoadParamXML_CYCLE(element, "weapons", this, WeaponManager, loadWeapons)
-        .describe("loads Weapons");
+    .describe("loads Weapons");
   }
   LOAD_PARAM_END_CYCLE(element);
@@ -255,5 +255,5 @@
 
   if (!(this->currentSlotConfig[slotID].capability & weapon->getCapability() & WTYPE_ALLKINDS) &&
-        this->currentSlotConfig[slotID].capability & weapon->getCapability() & WTYPE_ALLDIRS)
+      this->currentSlotConfig[slotID].capability & weapon->getCapability() & WTYPE_ALLDIRS)
   {
     PRINTF(2)("Unable to add Weapon with wrong capatibility to Slot %d (W:%d M:%d)\n",
@@ -268,10 +268,12 @@
   this->configs[configID][slotID] = weapon;
   weapon->setAmmoContainer(this->getAmmoContainer(weapon->getProjectileType()));
-  if (this->parent != NULL)
-  {
-    this->parent->addChild(weapon);
-  }
   if(configID == this->currentConfigID)
     this->currentSlotConfig[slotID].nextWeapon = weapon;
+  if (this->parent != NULL)
+  {
+    this->parent->addChild(weapon);
+    if (this->parent->isA(CL_PLAYABLE))
+      dynamic_cast<Playable*>(this->parent)->weaponConfigChanged();
+  }
   PRINTF(3)("Added a new Weapon (%s::%s) to the WeaponManager: config %i/ slot %i\n", weapon->getClassName(), weapon->getName(), configID, slotID);
   return true;
@@ -350,14 +352,5 @@
   PRINTF(4)("Changing weapon configuration: to %i\n", this->currentConfigID);
   for (int i = 0; i < WM_MAX_SLOTS; i++)
-  {
     this->currentSlotConfig[i].nextWeapon = this->configs[currentConfigID][i];
-    if (this->currentSlotConfig[i].currentWeapon != this->currentSlotConfig[i].nextWeapon)
-    {
-      if (this->currentSlotConfig[i].currentWeapon != NULL)
-        (this->currentSlotConfig[i].currentWeapon->requestAction(WA_DEACTIVATE));
-      if (this->currentSlotConfig[i].nextWeapon != NULL && this->currentSlotConfig[i].nextWeapon->isActive())
-        this->currentSlotConfig[i].nextWeapon = NULL;
-    }
-  }
 }
 
@@ -387,41 +380,48 @@
   Weapon* tickWeapon;
 
-  // all weapons
   for(int i = 0; i < this->slotCount; i++)
   {
-
+/*
+    NICE LITTLE DEBUG FUNCTION
+       if (this->currentSlotConfig[i].currentWeapon != NULL || this->currentSlotConfig[i].nextWeapon != NULL)
+      printf("%p %p\n", this->currentSlotConfig[i].currentWeapon, this->currentSlotConfig[i].nextWeapon);*/
+
+    // current Weapon in Slot i
     tickWeapon = this->currentSlotConfig[i].currentWeapon;
-    if (tickWeapon != this->currentSlotConfig[i].nextWeapon) // if no change occures
-    {
-      if (tickWeapon != NULL && tickWeapon->isActive())
+    // On A change (current != next)
+    if (tickWeapon != this->currentSlotConfig[i].nextWeapon)
+    {
+      // if a Weapon is Active in slot i, deactivate it.
+      if (tickWeapon != NULL )
       {
-        tickWeapon->requestAction(WA_DEACTIVATE);
+        if (tickWeapon->isActive())
+        {
+          tickWeapon->requestAction(WA_DEACTIVATE);
+          continue;
+        }
+        else
+        {
+          tickWeapon->toList(OM_NULL);
+          this->currentSlotConfig[i].currentWeapon = NULL;
+        }
+      }
+
+      // switching to next Weapon
+      tickWeapon = this->currentSlotConfig[i].currentWeapon = this->currentSlotConfig[i].nextWeapon;
+      if (tickWeapon != NULL)
+      {
+        if (this->parent != NULL)
+          tickWeapon->toList(this->parent->getOMListNumber());
+        tickWeapon->requestAction(WA_ACTIVATE);
+        this->currentSlotConfig[i].position.activateNode();
+        tickWeapon->setParent(&this->currentSlotConfig[i].position);
+        printf("ACTIVATE\n");
       }
       else
-      {
-        if (this->currentSlotConfig[i].currentWeapon != NULL)
-          this->currentSlotConfig[i].currentWeapon->toList(OM_NULL);
-        tickWeapon = this->currentSlotConfig[i].currentWeapon = this->currentSlotConfig[i].nextWeapon;
-        if (tickWeapon != NULL)
-        {
-          tickWeapon->requestAction(WA_ACTIVATE);
-          tickWeapon->setParent(&this->currentSlotConfig[i].position);
-          tickWeapon->toList(this->parent->getOMListNumber());
-          this->currentSlotConfig[i].position.activateNode();
-          if (this->parent->isA(CL_PLAYABLE))
-          {
-            dynamic_cast<Playable*>(this->parent)->weaponConfigChanged();
-          }
-        }
-        else
-          this->currentSlotConfig[i].position.deactivateNode();
-      }
-    }
-
-    if( tickWeapon != NULL && tickWeapon->isActive())
-      tickWeapon->tickW(dt);
-  }
-
-  crosshair->setRotationSpeed(5);
+        this->currentSlotConfig[i].position.deactivateNode();
+      if (this->parent != NULL && this->parent->isA(CL_PLAYABLE))
+        dynamic_cast<Playable*>(this->parent)->weaponConfigChanged();
+    }
+  }
 }
 
@@ -457,5 +457,5 @@
             (this->currentSlotConfig[i].capability & capability & WTYPE_ALLDIRS))
           return i;
-    }
+      }
   }
   else
