Index: code/branches/network/src/core/CommandExecutor.cc
===================================================================
--- code/branches/network/src/core/CommandExecutor.cc	(revision 1389)
+++ code/branches/network/src/core/CommandExecutor.cc	(revision 1391)
@@ -403,10 +403,10 @@
         if (evaluation.bEvaluatedParams_ && evaluation.evaluatedExecutor_)
         {
-std::cout << "CE_execute (evaluation): " << evaluation.evaluatedExecutor_->getName() << " " << evaluation.param_[0] << " " << evaluation.param_[1] << " " << evaluation.param_[2] << " " << evaluation.param_[3] << " " << evaluation.param_[4] << std::endl;
+//std::cout << "CE_execute (evaluation): " << evaluation.evaluatedExecutor_->getName() << " " << evaluation.param_[0] << " " << evaluation.param_[1] << " " << evaluation.param_[2] << " " << evaluation.param_[3] << " " << evaluation.param_[4] << std::endl;
             (*evaluation.evaluatedExecutor_)(evaluation.param_[0], evaluation.param_[1], evaluation.param_[2], evaluation.param_[3], evaluation.param_[4]);
             return true;
         }
 
-std::cout << "CE_execute: " << evaluation.processedCommand_ << "\n";
+//std::cout << "CE_execute: " << evaluation.processedCommand_ << "\n";
         switch (evaluation.state_)
         {
Index: code/branches/network/src/core/InputHandler.cc
===================================================================
--- code/branches/network/src/core/InputHandler.cc	(revision 1389)
+++ code/branches/network/src/core/InputHandler.cc	(revision 1391)
@@ -159,5 +159,5 @@
         // default amplitude is 1.0f
         float paramModifier = 1.0f;
-        if (getLowercase(tokens[iToken]) == "axisamp")
+        if (getLowercase(tokens[iToken]) == "scale")
         {
           iToken++;
@@ -307,4 +307,9 @@
   KeyBinder::KeyBinder() : deriveTime_(0.0f)
   {
+    mouseRelative_[0] = 0;
+    mouseRelative_[1] = 0;
+    mousePosition_[0] = 0;
+    mousePosition_[1] = 0;
+
     RegisterObject(KeyBinder);
 
@@ -477,7 +482,8 @@
   {
     SetConfigValue(analogThreshold_, 0.01f)  .description("Threshold for analog axes until which the state is 0.");
+    SetConfigValue(mouseSensitivity_, 1.0f)  .description("Mouse sensitivity.");
     SetConfigValue(bDeriveMouseInput_, false).description("Whether or not to derive moues movement for the absolute value.");
-    SetConfigValue(derivePeriod_, 0.1f)      .description("Accuracy of the mouse input deriver. The higher the more precise, but laggier.");
-    SetConfigValue(mouseSensitivity_, 1.0f)  .description("Mouse sensitivity.");
+    SetConfigValue(derivePeriod_, 0.1f).description("Accuracy of the mouse input deriver. The higher the more precise, but laggier.");
+    SetConfigValue(mouseSensitivityDerived_, 1.0f).description("Mouse sensitivity if mouse input is derived.");
 
     float oldThresh = buttonThreshold_;
@@ -574,4 +580,5 @@
       if (halfAxes_[i].relVal_ > analogThreshold_ || halfAxes_[i].absVal_ > analogThreshold_)
       {
+        COUT(3) << halfAxes_[i].name_ << "\t" << halfAxes_[i].absVal_ << std::endl;
         halfAxes_[i].execute();
       }
@@ -588,11 +595,16 @@
           if (mouseRelative_[i] > 0)
           {
-            halfAxes_[2*i + 0].absVal_ = mouseRelative_[i] * derivePeriod_ / 500 * mouseSensitivity_;
+            halfAxes_[2*i + 0].absVal_ =  mouseRelative_[i] / derivePeriod_ / 5000 * mouseSensitivityDerived_;
             halfAxes_[2*i + 1].absVal_ = 0.0f;
           }
-          else if (mouseRelative_[0] < 0)
+          else if (mouseRelative_[i] < 0)
           {
             halfAxes_[2*i + 0].absVal_ = 0.0f;
-            halfAxes_[2*i + 1].absVal_ = -mouseRelative_[i] * derivePeriod_ / 500 * mouseSensitivity_;
+            halfAxes_[2*i + 1].absVal_ = -mouseRelative_[i] / derivePeriod_ / 5000 * mouseSensitivityDerived_;
+          }
+          else
+          {
+            halfAxes_[2*i + 0].absVal_ = 0.0f;
+            halfAxes_[2*i + 1].absVal_ = 0.0f;
           }
           //COUT(3) << mouseRelative_[i] << " | ";
@@ -672,5 +684,5 @@
             }
             else
-              halfAxes_[1 + 2*i].absVal_ =  ((float)mousePosition_[i])/1024 * mouseSensitivity_;
+              halfAxes_[0 + 2*i].absVal_ =  ((float)mousePosition_[i])/1024 * mouseSensitivity_;
           }
           else
@@ -687,4 +699,8 @@
               halfAxes_[1 + 2*i].absVal_ = -((float)mousePosition_[i])/1024 * mouseSensitivity_;
           }
+          //COUT(3) << "half axis 0: " << halfAxes_[0].absVal_ << std::endl;
+          //COUT(3) << "half axis 1: " << halfAxes_[1].absVal_ << std::endl;
+          //COUT(3) << "half axis 2: " << halfAxes_[2].absVal_ << std::endl;
+          //COUT(3) << "half axis 3: " << halfAxes_[3].absVal_ << std::endl;
 
           // relative
@@ -722,16 +738,34 @@
   {
     // TODO: check whether 16 bit integer as general axis value is a good idea (works under windows)
-    CCOUT(3) << halfAxes_[8 + axis].name_ << std::endl;
+    int i = 8 + axis * 2;
     if (value >= 0)
     {
-      halfAxes_[8 + axis].absVal_ = ((float)value)/0x8000;
-      halfAxes_[8 + axis].relVal_ = ((float)value)/0x8000;
-      halfAxes_[8 + axis].hasChanged_ = true;
+      //if (value > 10000)
+      //{ CCOUT(3) << halfAxes_[i].name_ << std::endl; }
+
+      halfAxes_[i].absVal_ = ((float)value)/0x8000;
+      halfAxes_[i].relVal_ = ((float)value)/0x8000;
+      halfAxes_[i].hasChanged_ = true;
+      if (halfAxes_[i + 1].absVal_ > 0)
+      {
+        halfAxes_[i + 1].absVal_ = -0.0f;
+        halfAxes_[i + 1].relVal_ = -0.0f;
+        halfAxes_[i + 1].hasChanged_ = true;
+      }
     }
     else
     {
-      halfAxes_[8 + axis + 1].absVal_ = -((float)value)/0x8000;
-      halfAxes_[8 + axis + 1].relVal_ = -((float)value)/0x8000;
-      halfAxes_[8 + axis + 1].hasChanged_ = true;
+      //if (value < -10000)
+      //{ CCOUT(3) << halfAxes_[i + 1].name_ << std::endl; }
+
+      halfAxes_[i + 1].absVal_ = -((float)value)/0x8000;
+      halfAxes_[i + 1].relVal_ = -((float)value)/0x8000;
+      halfAxes_[i + 1].hasChanged_ = true;
+      if (halfAxes_[i].absVal_ > 0)
+      {
+        halfAxes_[i].absVal_ = -0.0f;
+        halfAxes_[i].relVal_ = -0.0f;
+        halfAxes_[i].hasChanged_ = true;
+      }
     }
   }
Index: code/branches/network/src/core/InputHandler.h
===================================================================
--- code/branches/network/src/core/InputHandler.h	(revision 1389)
+++ code/branches/network/src/core/InputHandler.h	(revision 1391)
@@ -208,5 +208,5 @@
 
     //! Keeps track of the absolute mouse value (incl. scroll wheel)
-    int mousePosition_[3];
+    int mousePosition_[2];
     //! Used to derive mouse input if requested
     int mouseRelative_[2];
@@ -224,4 +224,6 @@
     //! mouse sensitivity
     float mouseSensitivity_;
+    //! mouse sensitivity if mouse input is derived
+    float mouseSensitivityDerived_;
   };
 
Index: code/branches/network/src/core/InputManager.cc
===================================================================
--- code/branches/network/src/core/InputManager.cc	(revision 1389)
+++ code/branches/network/src/core/InputManager.cc	(revision 1391)
@@ -603,5 +603,5 @@
 
     // check whether the button already is in the list (can happen when focus was lost)
-    std::vector<int> buttonsDown = joyStickButtonsDown_[iJoyStick];
+    std::vector<int>& buttonsDown = joyStickButtonsDown_[iJoyStick];
     unsigned int iButton = 0;
     while (iButton < buttonsDown.size() && buttonsDown[iButton] != button)
@@ -625,5 +625,5 @@
 
     // remove the button from the joyStickButtonsDown_ list
-    std::vector<int> buttonsDown = joyStickButtonsDown_[iJoyStick];
+    std::vector<int>& buttonsDown = joyStickButtonsDown_[iJoyStick];
     for (unsigned int iButton = 0; iButton < buttonsDown.size(); iButton++)
     {
@@ -643,5 +643,6 @@
   bool InputManager::axisMoved(const OIS::JoyStickEvent &arg, int axis)
   {
-    //CCOUT(3) << arg.state.mAxes[axis].abs << std::endl;
+    //if (arg.state.mAxes[axis].abs > 10000 || arg.state.mAxes[axis].abs < -10000)
+    //{ CCOUT(3) << "axis " << axis << " moved" << arg.state.mAxes[axis].abs << std::endl;}
     // use the device to identify which one called the method
     OIS::JoyStick* joyStick = (OIS::JoyStick*)arg.device;
@@ -659,4 +660,6 @@
   bool InputManager::sliderMoved(const OIS::JoyStickEvent &arg, int id)
   {
+    //if (arg.state.mSliders[id].abX > 10000 || arg.state.mSliders[id].abX < -10000)
+    //{CCOUT(3) << "slider " << id << " moved" << arg.state.mSliders[id].abX << std::endl;}
     //CCOUT(3) << arg.state.mSliders[id].abX << "\t |" << arg.state.mSliders[id].abY << std::endl;
     // use the device to identify which one called the method
Index: code/branches/network/src/orxonox/Orxonox.cc
===================================================================
--- code/branches/network/src/orxonox/Orxonox.cc	(revision 1389)
+++ code/branches/network/src/orxonox/Orxonox.cc	(revision 1391)
@@ -517,4 +517,5 @@
       // again, just to be sure ogre works fine
       ogreRoot._fireFrameEnded(evt);
+      //msleep(100);
 	  }
 
Index: code/branches/network/src/orxonox/objects/SpaceShip.cc
===================================================================
--- code/branches/network/src/orxonox/objects/SpaceShip.cc	(revision 1389)
+++ code/branches/network/src/orxonox/objects/SpaceShip.cc	(revision 1391)
@@ -53,4 +53,10 @@
     ConsoleCommand(SpaceShip, setMaxSpeedTest, AccessLevel::Debug, false);
     ConsoleCommand(SpaceShip, whereAmI, AccessLevel::User, true);
+    ConsoleCommand(SpaceShip, moveLongitudinal, AccessLevel::User, true).setDefaultValue(0, 1.0f).setAxisParamIndex(0).setKeybindMode(KeybindMode::OnHold);
+    ConsoleCommand(SpaceShip, moveLateral, AccessLevel::User, true).setDefaultValue(0, 1.0f).setAxisParamIndex(0).setKeybindMode(KeybindMode::OnHold);
+    ConsoleCommand(SpaceShip, moveYaw, AccessLevel::User, true).setDefaultValue(0, 1.0f).setAxisParamIndex(0).setKeybindMode(KeybindMode::OnHold);
+    ConsoleCommand(SpaceShip, movePitch, AccessLevel::User, true).setDefaultValue(0, 1.0f).setAxisParamIndex(0).setKeybindMode(KeybindMode::OnHold);
+    ConsoleCommand(SpaceShip, moveRoll, AccessLevel::User, true).setDefaultValue(0, 1.0f).setAxisParamIndex(0).setKeybindMode(KeybindMode::OnHold);
+    ConsoleCommand(SpaceShip, fire, AccessLevel::User, true).setKeybindMode(KeybindMode::OnHold);
     ConsoleCommandGeneric(test1, SpaceShip, createExecutor(createFunctor(&SpaceShip::setMaxSpeedTest), "setMaxSpeed", AccessLevel::Debug), false);
     ConsoleCommandGeneric(test2, SpaceShip, createExecutor(createFunctor(&SpaceShip::setMaxSpeedTest), "setMaxBlubber", AccessLevel::Debug), false);
@@ -308,67 +314,7 @@
     }
 
-    void SpaceShip::mouseMoved(IntVector2 abs, IntVector2 rel, IntVector2 clippingSize)
-    {
-/*
-        this->mouseX += e.state.X.rel;
-        if (this->bInvertMouse_)
-            this->mouseY += e.state.Y.rel;
-        else
-            this->mouseY -= e.state.Y.rel;
-
-//        if(mouseX>maxMouseX) maxMouseX = mouseX;
-//        if(mouseX<minMouseX) minMouseX = mouseX;
-//        cout << "mouseX: " << mouseX << "\tmouseY: " << mouseY << endl;
-
-        this->moved = true;
-*/
-        if (this->bRMousePressed_)
-        {
-            this->camNode_->roll(Degree(-rel.x * 0.10));
-            this->camNode_->yaw(Degree(rel.y * 0.10));
-        }
-        else
-        {
-            float minDimension = clippingSize.y;
-            if (clippingSize.x < minDimension)
-                minDimension = clippingSize.x;
-
-            this->mouseX_ += rel.x;
-            if (this->mouseX_ < -minDimension)
-                this->mouseX_ = -minDimension;
-            if (this->mouseX_ > minDimension)
-                this->mouseX_ = minDimension;
-
-            this->mouseY_ += rel.y;
-            if (this->mouseY_ < -minDimension)
-                this->mouseY_ = -minDimension;
-            if (this->mouseY_ > minDimension)
-                this->mouseY_ = minDimension;
-
-            float xRotation = this->mouseX_ / minDimension;
-            xRotation = xRotation*xRotation * sgn(xRotation);
-            xRotation *= -this->rotationAcceleration_;
-            if (xRotation > this->maxRotation_)
-                xRotation = this->maxRotation_;
-            if (xRotation < -this->maxRotation_)
-                xRotation = -this->maxRotation_;
-            this->mouseXRotation_ = Radian(xRotation);
-
-            float yRotation = this->mouseY_ / minDimension;
-            yRotation = yRotation*yRotation * sgn(yRotation);
-            yRotation *= this->rotationAcceleration_;
-            if (yRotation > this->maxRotation_)
-                yRotation = this->maxRotation_;
-            if (yRotation < -this->maxRotation_)
-                yRotation = -this->maxRotation_;
-            this->mouseYRotation_ = Radian(yRotation);
-        }
-    }
-
     void SpaceShip::mouseButtonPressed(MouseButton::Enum id)
     {
-        if (id == MouseButton::Left)
-            this->bLMousePressed_ = true;
-        else if (id == MouseButton::Right)
+        if (id == MouseButton::Right)
             this->bRMousePressed_ = true;
     }
@@ -376,7 +322,5 @@
     void SpaceShip::mouseButtonReleased(MouseButton::Enum id)
     {
-        if (id == MouseButton::Left)
-            this->bLMousePressed_ = false;
-        else if (id == MouseButton::Right)
+        if (id == MouseButton::Right)
         {
             this->bRMousePressed_ = false;
@@ -495,29 +439,4 @@
         }
 
-        if( (network::Client::getSingleton() &&  network::Client::getSingleton()->getShipID() == objectID) || server_ )
-        {
-          COUT(4) << "steering our ship: " << objectID << std::endl;
-          if (InputManager::isKeyDown(KeyCode::Up) || InputManager::isKeyDown(KeyCode::W))
-            this->acceleration_.x = this->translationAcceleration_;
-          else if(InputManager::isKeyDown(KeyCode::Down) || InputManager::isKeyDown(KeyCode::S))
-            this->acceleration_.x = -this->translationAcceleration_;
-          else
-            this->acceleration_.x = 0;
-
-          if (InputManager::isKeyDown(KeyCode::Right) || InputManager::isKeyDown(KeyCode::D))
-            this->acceleration_.y = -this->translationAcceleration_;
-          else if (InputManager::isKeyDown(KeyCode::Left) || InputManager::isKeyDown(KeyCode::A))
-            this->acceleration_.y = this->translationAcceleration_;
-          else
-            this->acceleration_.y = 0;
-
-          if (InputManager::isKeyDown(KeyCode::Delete) || InputManager::isKeyDown(KeyCode::Q))
-            this->momentum_ = Radian(-this->rotationAccelerationRadian_);
-          else if (InputManager::isKeyDown(KeyCode::PageDown) || InputManager::isKeyDown(KeyCode::E))
-            this->momentum_ = Radian(this->rotationAccelerationRadian_);
-          else
-            this->momentum_ = 0;
-        }/*else
-          COUT(4) << "not steering ship: " << objectID << " our ship: " << network::Client::getSingleton()->getShipID() << std::endl;*/
 
         WorldEntity::tick(dt);
@@ -533,5 +452,62 @@
         else
             this->tt_->setRate(0);
-    }
-
+
+        if( (network::Client::getSingleton() &&  network::Client::getSingleton()->getShipID() == objectID) || server_ )
+        {
+          COUT(4) << "steering our ship: " << objectID << std::endl;
+          this->acceleration_.x = 0;
+          this->acceleration_.y = 0;
+          this->momentum_ = 0;
+          this->mouseXRotation_ = Radian(0);
+          this->mouseYRotation_ = Radian(0);
+          this->bLMousePressed_ = false;
+        }/*else
+          COUT(4) << "not steering ship: " << objectID << " our ship: " << network::Client::getSingleton()->getShipID() << std::endl;*/
+    }
+    void SpaceShip::movePitch(float val)
+    {
+        SpaceShip* this_ = getLocalShip();
+        val = -val * val * sgn(val) * this_->rotationAcceleration_;
+        if (val > this_->maxRotation_)
+            val = this_->maxRotation_;
+        if (val < -this_->maxRotation_)
+            val = -this_->maxRotation_;
+        this_->mouseYRotation_ = Radian(val);
+    }
+
+    void SpaceShip::moveYaw(float val)
+    {
+        SpaceShip* this_ = getLocalShip();
+        val = -val * val * sgn(val) * this_->rotationAcceleration_;
+        if (val > this_->maxRotation_)
+            val = this_->maxRotation_;
+        if (val < -this_->maxRotation_)
+            val = -this_->maxRotation_;
+        this_->mouseXRotation_ = Radian(val);
+    }
+
+    void SpaceShip::moveRoll(float val)
+    {
+        SpaceShip* this_ = getLocalShip();
+        this_->momentum_ = Radian(-this_->rotationAccelerationRadian_ * val);
+    }
+
+    void SpaceShip::moveLongitudinal(float val)
+    {
+        SpaceShip* this_ = getLocalShip();
+        COUT(3) << val << std::endl;
+        this_->acceleration_.x = this_->translationAcceleration_ * val;
+    }
+
+    void SpaceShip::moveLateral(float val)
+    {
+        SpaceShip* this_ = getLocalShip();
+        this_->acceleration_.y = -this_->translationAcceleration_ * val;
+    }
+
+    void SpaceShip::fire()
+    {
+        SpaceShip* this_ = getLocalShip();
+        this_->bLMousePressed_ = true;
+    }
 }
Index: code/branches/network/src/orxonox/objects/SpaceShip.h
===================================================================
--- code/branches/network/src/orxonox/objects/SpaceShip.h	(revision 1389)
+++ code/branches/network/src/orxonox/objects/SpaceShip.h	(revision 1391)
@@ -66,5 +66,4 @@
 
             void getFocus();
-            static SpaceShip* instance_s;
             static Vector3 getSPosition();
             static Quaternion getSOrientation();
@@ -73,8 +72,15 @@
                 { SpaceShip::instance_s->setMaxSpeed(value); }
 
+            static void movePitch(float value);
+            static void moveYaw(float value);
+            static void moveRoll(float value);
+            static void moveLongitudinal(float value);
+            static void moveLateral(float value);
+            static void fire();
+
             void mouseButtonPressed (MouseButton::Enum id);
             void mouseButtonReleased(MouseButton::Enum id);
             void mouseButtonHeld    (MouseButton::Enum id) { }
-            void mouseMoved         (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize);
+            void mouseMoved         (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) { }
             void mouseScrolled      (int abs, int rel) { }
 
@@ -131,4 +137,6 @@
             float emitterRate_;
             bool server_;
+
+            static SpaceShip* instance_s;
     };
 }
