Index: code/branches/FICN/src/orxonox/objects/Fighter.cc
===================================================================
--- code/branches/FICN/src/orxonox/objects/Fighter.cc	(revision 644)
+++ code/branches/FICN/src/orxonox/objects/Fighter.cc	(revision 645)
@@ -55,4 +55,6 @@
         this->ammoDump_ = NULL;
         this->mainWeapon_ = NULL;
+        this->rightButtonPressed_ = false;
+        this->leftButtonPressed_ = false;
 
         this->moveForward_ = 0;
@@ -114,4 +116,5 @@
         Model::loadParams(xmlElem);
 
+#if 0
         w = new particle::ParticleInterface(Orxonox::getSingleton()->getSceneManager(),"schuss" + this->getName(),"Orxonox/schuss");
         w->getParticleSystem()->setParameter("local_space","true");
@@ -131,6 +134,5 @@
         node1->setInheritScale(false);
         w->addToSceneNode(node1);
-
-
+#endif
 
         tt = new particle::ParticleInterface(Orxonox::getSingleton()->getSceneManager(),"twinthruster" + this->getName(),"Orxonox/engineglow");
@@ -151,5 +153,4 @@
         tt->addToSceneNode(node2);
 
-
         // add weapon
 
@@ -160,4 +161,6 @@
         mainWeapon_ = new BarrelGun();
         mainWeapon_->setAmmoDump(ammoDump_);
+        Orxonox::getSingleton()->getSceneManager()->getRootSceneNode()->removeChild(mainWeapon_->getNode());
+        getNode()->addChild(mainWeapon_->getNode());
 
         if (xmlElem->Attribute("forward") && xmlElem->Attribute("rotateupdown") && xmlElem->Attribute("rotaterightleft") && xmlElem->Attribute("looprightleft"))
@@ -216,5 +219,21 @@
     bool Fighter::mousePressed(const OIS::MouseEvent &arg, OIS::MouseButtonID id )
     {
-
+      if (id == OIS::MB_Left)
+      {
+        this->leftButtonPressed_ = true;
+      }
+      else if (id == OIS::MB_Right)
+        this->rightButtonPressed_ = true;
+      return true;
+    }
+
+    bool Fighter::mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id )
+    {
+      if (id == OIS::MB_Left)
+      {
+        this->leftButtonPressed_ = false;
+      }
+      else if (id == OIS::MB_Right)
+        this->rightButtonPressed_ = false;
       return true;
     }
@@ -239,4 +258,9 @@
         mMouse->capture();
 
+        if (leftButtonPressed_)
+            mainWeapon_->primaryFireRequest();
+        if (rightButtonPressed_)
+            mainWeapon_->secondaryFireRequest();
+
         if (mKeyboard->isKeyDown(OIS::KC_UP) || mKeyboard->isKeyDown(OIS::KC_W))
             this->moveForward(speed);
@@ -256,4 +280,9 @@
         if (mKeyboard->isKeyDown(OIS::KC_LEFT) || mKeyboard->isKeyDown(OIS::KC_A))
             this->loopLeft(loop);
+        else
+            this->loopLeft(0);
+
+        if (mKeyboard->isKeyDown(OIS::KC_G))
+            this->mainWeapon_->addAction(BaseWeapon::RELOAD);
         else
             this->loopLeft(0);
Index: code/branches/FICN/src/orxonox/objects/Fighter.h
===================================================================
--- code/branches/FICN/src/orxonox/objects/Fighter.h	(revision 644)
+++ code/branches/FICN/src/orxonox/objects/Fighter.h	(revision 645)
@@ -37,5 +37,5 @@
             bool mouseMoved(const OIS::MouseEvent &e);
             bool mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id);// { return true; }
-            bool mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id) { return true; }
+            bool mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id);// { return true; }
 
 
@@ -49,4 +49,7 @@
             AmmunitionDump* ammoDump_;
             BarrelGun* mainWeapon_;
+
+            bool leftButtonPressed_;
+            bool rightButtonPressed_;
 
             float moveForward_;
Index: code/branches/FICN/src/orxonox/objects/weapon_system/barrel_gun.cc
===================================================================
--- code/branches/FICN/src/orxonox/objects/weapon_system/barrel_gun.cc	(revision 644)
+++ code/branches/FICN/src/orxonox/objects/weapon_system/barrel_gun.cc	(revision 645)
@@ -52,8 +52,8 @@
     primaryFirePower_ = 100;
     secondaryFirePower_ = 500;
-    primaryFiringRate_ = 10;
-    secondaryFiringRate_ = 2;
-    primaryBulletSpeed_ = 1000;
-    secondaryBulletSpeed_ = 500;
+    primaryFiringRate_ = 1.0/7.0;
+    secondaryFiringRate_ = 1.0/2.0;
+    primaryBulletSpeed_ = 800;
+    secondaryBulletSpeed_ = 300;
     magazineSize_ = 25;
   }
@@ -80,9 +80,9 @@
           + StringConverter::toString(bulletCounter_++), "Barrel.mesh");
 
-    Vector3 speed = (temp->getOrientation() * Vector3(0, 0, -1))
+    Vector3 speed = (temp->getOrientation() * Vector3(1, 0, 0))
           .normalisedCopy() * primaryBulletSpeed_;
     speed += getVelocity();
 
-	  temp->setScale(Vector3(1, 1, 1) * 4);
+	  temp->setScale(Vector3(1, 1, 1) * 2);
 	  temp->yaw(Degree(-90));
 
@@ -97,7 +97,7 @@
 
 
-  void BarrelGun::primaryFiring(unsigned int time)
+  void BarrelGun::primaryFiring(float time)
   {
-    if (time > (unsigned int)1000/primaryFiringRate_)
+    if (time > primaryFiringRate_)
     {
       currentState_ = IDLE;
@@ -122,9 +122,9 @@
           + StringConverter::toString(bulletCounter_++), "Barrel.mesh");
 
-    Vector3 speed = (temp->getOrientation() * Vector3(0, 0, -1))
+    Vector3 speed = (temp->getOrientation() * Vector3(1, 0, 0))
           .normalisedCopy() * secondaryBulletSpeed_*0.5;
     speed += getVelocity();
 
-	  temp->setScale(Vector3(1, 1, 1) * 10);
+	  temp->setScale(Vector3(1, 1, 1) * 4);
 	  temp->yaw(Degree(-90));
 
@@ -140,7 +140,7 @@
 
 
-  void BarrelGun::secondaryFiring(unsigned int time)
+  void BarrelGun::secondaryFiring(float time)
   {
-    if (time > (unsigned int)1000/secondaryFiringRate_)
+    if (time > secondaryFiringRate_)
       currentState_ = IDLE;
   }
Index: code/branches/FICN/src/orxonox/objects/weapon_system/barrel_gun.h
===================================================================
--- code/branches/FICN/src/orxonox/objects/weapon_system/barrel_gun.h	(revision 644)
+++ code/branches/FICN/src/orxonox/objects/weapon_system/barrel_gun.h	(revision 645)
@@ -49,9 +49,9 @@
     void primaryFire();
 
-    void primaryFiring(unsigned int);
+    void primaryFiring(float);
 
     void secondaryFire();
 
-    void secondaryFiring(unsigned int);
+    void secondaryFiring(float);
 
   public:
Index: code/branches/FICN/src/orxonox/objects/weapon_system/base_weapon.cc
===================================================================
--- code/branches/FICN/src/orxonox/objects/weapon_system/base_weapon.cc	(revision 644)
+++ code/branches/FICN/src/orxonox/objects/weapon_system/base_weapon.cc	(revision 645)
@@ -46,4 +46,6 @@
   
   CreateFactory(BaseWeapon);
+
+  float BaseWeapon::nextActionValidityPeriod_ = 0.5;
 
   BaseWeapon::BaseWeapon()
@@ -105,9 +107,9 @@
       {
       case PRIMARY_FIRE:
-        primaryFiring((unsigned int)(totalTime_ - actionStartTime_));
+        primaryFiring(totalTime_ - actionStartTime_);
         break;
 
       case SECONDARY_FIRE:
-        secondaryFiring((unsigned int)(totalTime_ - actionStartTime_));
+        secondaryFiring(totalTime_ - actionStartTime_);
         break;
 
Index: code/branches/FICN/src/orxonox/objects/weapon_system/base_weapon.h
===================================================================
--- code/branches/FICN/src/orxonox/objects/weapon_system/base_weapon.h	(revision 644)
+++ code/branches/FICN/src/orxonox/objects/weapon_system/base_weapon.h	(revision 645)
@@ -78,9 +78,9 @@
     virtual void primaryFire() { };
 
-    virtual void primaryFiring(unsigned int) { };
+    virtual void primaryFiring(float) { };
 
     virtual void secondaryFire() { };
 
-    virtual void secondaryFiring(unsigned int) { };
+    virtual void secondaryFiring(float) { };
 
     inline void registerAllVariables() { }//Model::registerAllVariables(); }
@@ -100,5 +100,5 @@
 
     float totalTime_;
-    unsigned long actionStartTime_;
+    float actionStartTime_;
 
     State currentState_;
@@ -107,13 +107,13 @@
     Action nextAction_;
     bool actionAdded_;
-    unsigned long timeSinceNextActionAdded_;
-    static const unsigned long nextActionValidityPeriod_ = 500;
+    float timeSinceNextActionAdded_;
+    static float nextActionValidityPeriod_;
 
     // weapon properties
     int leftAmmo_;
-    int primaryFirePower_;
-    int secondaryFirePower_;
-    int primaryFiringRate_;
-    int secondaryFiringRate_;
+    float primaryFirePower_;
+    float secondaryFirePower_;
+    float primaryFiringRate_;
+    float secondaryFiringRate_;
     Ogre::Real primaryBulletSpeed_;
     Ogre::Real secondaryBulletSpeed_;
