Index: /orxonox/trunk/src/world_entities/weapons/test_gun.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/test_gun.cc	(revision 4894)
+++ /orxonox/trunk/src/world_entities/weapons/test_gun.cc	(revision 4895)
@@ -53,7 +53,7 @@
 
   this->objectComponent1 = new PNode();
-  Animation3D* animation1 = this->createAnimation(WS_SHOOTING, this->objectComponent1);
-  Animation3D* animation2 = this->createAnimation(WS_ACTIVATING, this);
-  Animation3D* animation3 = this->createAnimation(WS_DEACTIVATING, this);
+  Animation3D* animation1 = this->getAnimation(WS_SHOOTING, this->objectComponent1);
+  Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
+  Animation3D* animation3 = this->getAnimation(WS_DEACTIVATING, this);
   //parent->addChild(this->objectComponent1, PNODE_ALL);
   this->addChild(this->objectComponent1, PNODE_ALL);
@@ -85,9 +85,9 @@
       animation1->addKeyFrame(Vector(0, 0, .5), Quaternion(), 0.0, ANIM_LINEAR, ANIM_CONSTANT);
 
-      animation2->addKeyFrame(Vector(-2.6, 0.1, -2.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
-      animation2->addKeyFrame(Vector(-2.6, 0.1, -3.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
-
-      animation3->addKeyFrame(Vector(-2.6, 0.1, -3.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
-      animation3->addKeyFrame(Vector(-2.6, 0.1, -2.0), Quaternion(), 0.1, ANIM_LINEAR, ANIM_CONSTANT);
+      animation2->addKeyFrame(Vector(-2.6, 0.1, -2.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
+      animation2->addKeyFrame(Vector(-2.6, 0.1, -3.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
+
+      animation3->addKeyFrame(Vector(-2.6, 0.1, -3.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
+      animation3->addKeyFrame(Vector(-2.6, 0.1, -2.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_CONSTANT);
     }
 /*
@@ -102,4 +102,6 @@
   this->setStateDuration(WS_SHOOTING, .2);
   this->setStateDuration(WS_RELOADING, .5);
+  //this->setStateDuration(WS_ACTIVATING, .4);
+  //this->setStateDuration(WS_DEACTIVATING, .4);
 
   this->energy = 100;
@@ -181,12 +183,4 @@
 void TestGun::destroy ()
 {}
-
-
-/**
- *  is called, when there is no fire button pressed
-*/
-void TestGun::weaponIdle()
-{}
-
 
 /**
Index: /orxonox/trunk/src/world_entities/weapons/test_gun.h
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/test_gun.h	(revision 4894)
+++ /orxonox/trunk/src/world_entities/weapons/test_gun.h	(revision 4895)
@@ -45,5 +45,4 @@
     virtual void destroy();
 
-    virtual void weaponIdle();
     virtual void draw();
 
Index: /orxonox/trunk/src/world_entities/weapons/weapon.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/weapon.cc	(revision 4894)
+++ /orxonox/trunk/src/world_entities/weapons/weapon.cc	(revision 4895)
@@ -129,8 +129,8 @@
 
 /**
- * creates an Animation3D for a certain State.
- * @param state what state should the Animation be created for
- * @param node the node this Animation should apply to.
- * @returns The created animation.Animation(), NULL on error.
+ * creates/returns an Animation3D for a certain State.
+ * @param state what State should the Animation be created/returned for
+ * @param node the node this Animation should apply to. (NULL is fine if the animation was already created)
+ * @returns The created animation.Animation(), NULL on error (or if the animation does not yet exist).
  *
  * This function does only generate the Animation Object, and if set it will
@@ -138,15 +138,21 @@
  * What this does not do, is set keyframes, you have to operate on the returned animation.
  */
-Animation3D* Weapon::createAnimation(WeaponState state, PNode* node)
-{
-  if (state >= WS_STATE_COUNT || node == NULL)
+Animation3D* Weapon::getAnimation(WeaponState state, PNode* node)
+{
+  if (state >= WS_STATE_COUNT) // if the state is not known
     return NULL;
 
-  if (unlikely(this->animation[state] != NULL))
-  {
-    delete this->animation[state];
-    this->animation[state] = NULL;
-  }
-  return this->animation[state] = new Animation3D(node);
+  if (unlikely(this->animation[state] == NULL)) // if the animation does not exist yet create it.
+  {
+    if (likely(node != NULL))
+      return this->animation[state] = new Animation3D(node);
+    else
+    {
+      PRINTF(2)("Node not defined for the Creation of the 3D-animation of state %s\n", stateToChar(state));
+      return NULL;
+    }
+  }
+  else
+    return this->animation[state];
 }
 
@@ -156,5 +162,4 @@
 // GAME ACTION //
 /////////////////
-
 /**
  * request an action that should be executed,
@@ -241,6 +246,5 @@
 bool Weapon::activateW()
 {
-
-  if (this->currentState == WS_INACTIVE)
+//  if (this->currentState == WS_INACTIVE)
   {
         // play Sound
@@ -250,10 +254,11 @@
       this->animation[WS_ACTIVATING]->replay();
         // activate
-    PRINTF(5)("Activating the Weapon %s\n", this->getName());
+    PRINTF(4)("Activating the Weapon %s\n", this->getName());
     this->activate();
-        // setting up for next action
-    this->requestedAction = WA_NONE;
+    this->active = true;
+    // setting up for next action
     this->stateDuration = this->times[WA_ACTIVATE] + this->stateDuration;
   }
+  this->requestedAction = WA_NONE;
 }
 
@@ -275,9 +280,9 @@
         // deactivate
     this->deactivate();
+    this->active = false;
         // setting up for next action
-    this->requestedAction = WA_NONE;
     this->stateDuration = this->times[WA_DEACTIVATE] + this->stateDuration;
   }
-
+  this->requestedAction = WA_NONE;
 }
 
@@ -414,22 +419,4 @@
 // HELPER FUNCTIONS //
 //////////////////////
-// inclass
-/**
- * checks if the next Action given is valid
- * @returns if the Action that comes next is valid
- * @todo more checks
- */
-bool Weapon::nextActionValid() const
-{
-  if (this->currentState == WS_INACTIVE)
-  {
-    return (this->requestedAction == WA_ACTIVATE || this->requestedAction == WA_NONE);
-  }
-  else
-    return true;
-
-}
-
-
 /**
  * checks wether all the Weapons functions are valid, and if it is possible to go to action with it.
Index: /orxonox/trunk/src/world_entities/weapons/weapon.h
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/weapon.h	(revision 4894)
+++ /orxonox/trunk/src/world_entities/weapons/weapon.h	(revision 4895)
@@ -112,5 +112,5 @@
     void setActionSound(const char* action, const char* soundFile) { this->setActionSound(charToAction(action), soundFile); };
 
-    Animation3D* createAnimation(WeaponState state, PNode* node);
+    Animation3D* getAnimation(WeaponState state, PNode* node = NULL);
 
     // FLOW
@@ -137,5 +137,4 @@
     static const char*   stateToChar(WeaponState state);
 
-
   private:
     /** executive functions, that handle timing with actions.
@@ -151,7 +150,4 @@
     bool fireW();
     bool reloadW();
-
-    bool nextActionValid() const;
-
 
 
Index: /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc	(revision 4894)
+++ /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc	(revision 4895)
@@ -76,4 +76,8 @@
   }
   this->currConfID = W_CONFIG0;
+
+
+
+
   this->crosshair = new Crosshair();
 
@@ -237,23 +241,25 @@
 {
   Weapon* w;
+  for (int j = 0; j < 4; ++j )
+    for(int i = 0; i < W_MAX_SLOTS; ++i)
+  {
+    w = this->configs[j].slots[i];
+    if( w != NULL) w->tick(dt);
+  }
+
+  crosshair->setRotationSpeed(5);
+}
+
+
+/**
+ * triggers draw of all weapons in the current weaponconfig
+ */
+void WeaponManager::draw()
+{
+  Weapon* w;
+  for (int j = 0; j < 4; ++j )
   for(int i = 0; i < W_MAX_SLOTS; ++i)
   {
-    w = this->configs[this->currConfID].slots[i];
-    if( w != NULL) w->tick(dt);
-  }
-
-  crosshair->setRotationSpeed(5);
-}
-
-
-/**
- * triggers draw of all weapons in the current weaponconfig
- */
-void WeaponManager::draw()
-{
-  Weapon* w;
-  for(int i = 0; i < W_MAX_SLOTS; ++i)
-  {
-    w = this->configs[this->currConfID].slots[i];
+    w = this->configs[j].slots[i];
     if( w != NULL)
       w->draw();
