Index: /code/branches/FICN/src/orxonox/objects/SpaceShip.cc
===================================================================
--- /code/branches/FICN/src/orxonox/objects/SpaceShip.cc	(revision 646)
+++ /code/branches/FICN/src/orxonox/objects/SpaceShip.cc	(revision 647)
@@ -45,5 +45,5 @@
         RegisterObject(SpaceShip);
 
-        SetConfigValue(bInvertMouse_, true);
+        SetConfigValue(bInvertYAxis_, false);
         SetConfigValue(reloadTime_, 0.125);
 
@@ -51,4 +51,6 @@
         this->bLMousePressed_ = false;
         this->bRMousePressed_ = false;
+        this->mouseX_ = 0;
+        this->mouseY_ = 0;
 
         this->camNode_ = 0;
@@ -61,4 +63,20 @@
         this->timeToReload_ = 0;
 
+        this->maxSpeed_ = 0;
+        this->maxSideAndBackSpeed_ = 0;
+        this->maxRotation_ = 0;
+        this->translationAcceleration_ = 0;
+        this->rotationAcceleration_ = 0;
+        this->translationDamping_ = 0;
+        this->rotationDamping_ = 0;
+
+        this->maxRotationRadian_ = 0;
+        this->rotationAccelerationRadian_ = 0;
+        this->rotationDampingRadian_ = 0;
+        this->zeroRadian_ = Radian(0);
+
+        this->setRotationAxis(1, 0, 0);
+        this->setStatic(false);
+/*
         this->moveForward_ = 0;
         this->rotateUp_ = 0;
@@ -95,5 +113,5 @@
         this->brakeRotate(rotate*10);
         this->brakeLoop(loop);
-
+*/
         COUT(3) << "Info: SpaceShip was loaded" << std::endl;
     }
@@ -101,14 +119,6 @@
     SpaceShip::~SpaceShip()
     {
-        if (tt_)
-            delete tt_;
-    }
-
-    void SpaceShip::setMaxSpeedValues(float maxSpeedForward, float maxSpeedRotateUpDown, float maxSpeedRotateRightLeft, float maxSpeedLoopRightLeft)
-    {
-        this->maxSpeedForward_ = maxSpeedForward;
-        this->maxSpeedRotateUpDown_ = maxSpeedRotateUpDown;
-        this->maxSpeedRotateRightLeft_ = maxSpeedRotateRightLeft;
-        this->maxSpeedLoopRightLeft_ = maxSpeedLoopRightLeft;
+        if (this->tt_)
+            delete this->tt_;
     }
 
@@ -119,16 +129,16 @@
 
         // START CREATING THRUSTER
-        tt_ = new particle::ParticleInterface(Orxonox::getSingleton()->getSceneManager(),"twinthruster" + this->getName(),"Orxonox/engineglow");
-        tt_->getParticleSystem()->setParameter("local_space","true");
-        tt_->newEmitter();
-/*
-        tt_->setDirection(Vector3(0,0,1));
-        tt_->setPositionOfEmitter(0, Vector3(20,-1,-15));
-        tt_->setPositionOfEmitter(1, Vector3(-20,-1,-15));
-*/
-        tt_->setDirection(Vector3(-1,0,0));
-        tt_->setPositionOfEmitter(0, Vector3(-15,20,-1));
-        tt_->setPositionOfEmitter(1, Vector3(-15,-20,-1));
-        tt_->setVelocity(50);
+        this->tt_ = new particle::ParticleInterface(Orxonox::getSingleton()->getSceneManager(),"twinthruster" + this->getName(),"Orxonox/engineglow");
+        this->tt_->getParticleSystem()->setParameter("local_space","true");
+        this->tt_->newEmitter();
+/*
+        this->tt_->setDirection(Vector3(0,0,1));
+        this->tt_->setPositionOfEmitter(0, Vector3(20,-1,-15));
+        this->tt_->setPositionOfEmitter(1, Vector3(-20,-1,-15));
+*/
+        this->tt_->setDirection(Vector3(-1,0,0));
+        this->tt_->setPositionOfEmitter(0, Vector3(-15,20,-1));
+        this->tt_->setPositionOfEmitter(1, Vector3(-15,-20,-1));
+        this->tt_->setVelocity(50);
 
         emitterRate_ = tt_->getRate();
@@ -156,4 +166,5 @@
 
 
+/*
         if (xmlElem->Attribute("forward") && xmlElem->Attribute("rotateupdown") && xmlElem->Attribute("rotaterightleft") && xmlElem->Attribute("looprightleft"))
         {
@@ -170,4 +181,30 @@
             COUT(4) << "Loader: Initialized spaceship steering with values " << maxSpeedForward_ << " " << maxSpeedRotateUpDown_ << " " << maxSpeedRotateRightLeft_ << " " << maxSpeedLoopRightLeft_ << " " << std::endl;
     	}
+*/
+        if (xmlElem->Attribute("maxSpeed") && xmlElem->Attribute("maxSideAndBackSpeed") && xmlElem->Attribute("maxRotation") && xmlElem->Attribute("transAcc") && xmlElem->Attribute("rotAcc") && xmlElem->Attribute("transDamp") && xmlElem->Attribute("rotDamp"))
+        {
+
+            std::string msStr = xmlElem->Attribute("maxSpeed");
+            std::string msabsStr = xmlElem->Attribute("maxSideAndBackSpeed");
+            std::string mrStr = xmlElem->Attribute("maxRotation");
+            std::string taStr = xmlElem->Attribute("transAcc");
+            std::string raStr = xmlElem->Attribute("rotAcc");
+            std::string tdStr = xmlElem->Attribute("transDamp");
+            std::string rdStr = xmlElem->Attribute("rotDamp");
+
+            String2Number<float>(this->maxSpeed_, msStr);
+            String2Number<float>(this->maxSideAndBackSpeed_, msabsStr);
+            String2Number<float>(this->maxRotation_, mrStr);
+            String2Number<float>(this->translationAcceleration_, taStr);
+            String2Number<float>(this->rotationAcceleration_, raStr);
+            String2Number<float>(this->translationDamping_, tdStr);
+            String2Number<float>(this->rotationDamping_, rdStr);
+
+            this->maxRotationRadian_ = Radian(this->maxRotation_);
+            this->rotationAccelerationRadian_ = Radian(this->rotationAcceleration_);
+            this->rotationDampingRadian_ = Radian(this->rotationDamping_);
+
+            COUT(4) << "Loader: Initialized SpaceShip" << std::endl;
+    	}
 
     	if (xmlElem->Attribute("camera"))
@@ -192,6 +229,15 @@
     }
 
+    int sgn(float x)
+    {
+        if (x >= 0)
+            return 1;
+        else
+            return -1;
+    }
+
     bool SpaceShip::mouseMoved(const OIS::MouseEvent &e)
     {
+/*
         this->mouseX += e.state.X.rel;
         if (this->bInvertMouse_)
@@ -205,9 +251,45 @@
 
         this->moved = true;
-
+*/
         if (this->bRMousePressed_)
         {
             this->camNode_->roll(Degree(-e.state.X.rel * 0.10));
             this->camNode_->yaw(Degree(e.state.Y.rel * 0.10));
+        }
+        else
+        {
+            float minDimension = e.state.height;
+            if (e.state.width < minDimension)
+                minDimension = e.state.width;
+
+            this->mouseX_ += e.state.X.rel;
+            if (this->mouseX_ < -minDimension)
+                this->mouseX_ = -minDimension;
+            if (this->mouseX_ > minDimension)
+                this->mouseX_ = minDimension;
+
+            this->mouseY_ += e.state.Y.rel;
+            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);
         }
 
@@ -249,6 +331,4 @@
         }
 
-        WorldEntity::tick(dt);
-
         if (this->redNode_ && this->greenNode_)
         {
@@ -277,4 +357,105 @@
         mMouse->capture();
 
+
+        // #####################################
+        // ############# STEERING ##############
+        // #####################################
+
+        if (this->velocity_.x > this->maxSpeed_)
+            this->velocity_.x = this->maxSpeed_;
+        if (this->velocity_.x < -this->maxSideAndBackSpeed_)
+            this->velocity_.x = -this->maxSideAndBackSpeed_;
+        if (this->velocity_.y > this->maxSideAndBackSpeed_)
+            this->velocity_.y = this->maxSideAndBackSpeed_;
+        if (this->velocity_.y < -this->maxSideAndBackSpeed_)
+            this->velocity_.y = -this->maxSideAndBackSpeed_;
+        if (this->rotationRate_ > this->maxRotationRadian_)
+            this->rotationRate_ = this->maxRotationRadian_;
+        if (this->rotationRate_ < -this->maxRotationRadian_)
+            this->rotationRate_ = -this->maxRotationRadian_;
+
+        if (this->acceleration_.x == 0)
+        {
+            if (this->velocity_.x > 0)
+            {
+                this->velocity_.x -= (this->translationDamping_ * dt);
+                if (this->velocity_.x < 0)
+                    this->velocity_.x = 0;
+            }
+            else if (this->velocity_.x < 0)
+            {
+                this->velocity_.x += (this->translationDamping_ * dt);
+                if (this->velocity_.x > 0)
+                    this->velocity_.x = 0;
+            }
+        }
+
+        if (this->acceleration_.y == 0)
+        {
+            if (this->velocity_.y > 0)
+            {
+                this->velocity_.y -= (this->translationDamping_ * dt);
+                if (this->velocity_.y < 0)
+                    this->velocity_.y = 0;
+            }
+            else if (this->velocity_.y < 0)
+            {
+                this->velocity_.y += (this->translationDamping_ * dt);
+                if (this->velocity_.y > 0)
+                    this->velocity_.y = 0;
+            }
+        }
+
+        if (this->momentum_ == this->zeroRadian_)
+        {
+            if (this->rotationRate_ > this->zeroRadian_)
+            {
+                this->rotationRate_ -= (this->rotationDampingRadian_ * dt);
+                if (this->rotationRate_ < this->zeroRadian_)
+                    this->rotationRate_ = 0;
+            }
+            else if (this->rotationRate_ < this->zeroRadian_)
+            {
+                this->rotationRate_ += (this->rotationDampingRadian_ * dt);
+                if (this->rotationRate_ > this->zeroRadian_)
+                    this->rotationRate_ = 0;
+            }
+        }
+
+        if (mKeyboard->isKeyDown(OIS::KC_UP) || mKeyboard->isKeyDown(OIS::KC_W))
+            this->acceleration_.x = this->translationAcceleration_;
+        else if(mKeyboard->isKeyDown(OIS::KC_DOWN) || mKeyboard->isKeyDown(OIS::KC_S))
+            this->acceleration_.x = -this->translationAcceleration_;
+        else
+            this->acceleration_.x = 0;
+
+        if (mKeyboard->isKeyDown(OIS::KC_RIGHT) || mKeyboard->isKeyDown(OIS::KC_D))
+            this->acceleration_.y = -this->translationAcceleration_;
+        else if (mKeyboard->isKeyDown(OIS::KC_LEFT) || mKeyboard->isKeyDown(OIS::KC_A))
+            this->acceleration_.y = this->translationAcceleration_;
+        else
+            this->acceleration_.y = 0;
+
+        if (mKeyboard->isKeyDown(OIS::KC_DELETE) || mKeyboard->isKeyDown(OIS::KC_Q))
+            this->momentum_ = Radian(-this->rotationAccelerationRadian_);
+        else if (mKeyboard->isKeyDown(OIS::KC_PGDOWN) || mKeyboard->isKeyDown(OIS::KC_E))
+            this->momentum_ = Radian(this->rotationAccelerationRadian_);
+        else
+            this->momentum_ = 0;
+
+        WorldEntity::tick(dt);
+
+        this->roll(this->mouseXRotation_ * dt);
+        if (this->bInvertYAxis_)
+            this->yaw(Radian(-this->mouseYRotation_ * dt));
+        else
+            this->yaw(Radian(this->mouseYRotation_ * dt));
+
+        if (this->acceleration_.x > 0)
+            this->tt_->setRate(emitterRate_);
+        else
+            this->tt_->setRate(0);
+
+/*
         if (mKeyboard->isKeyDown(OIS::KC_UP) || mKeyboard->isKeyDown(OIS::KC_W))
             this->moveForward(speed);
@@ -311,6 +492,6 @@
             mouseX = 0;
             moved = false;
-        }
-        else
+        }*/
+/*        else
         {
             this->rotateUp(0);
@@ -318,6 +499,6 @@
             this->rotateRight(0);
             this->rotateLeft(0);
-        }
-
+        }*/
+/*
         if(moveForward_ > 0)
         {
@@ -426,4 +607,5 @@
 
         Vector3 transVector = Vector3::ZERO;
+*/
 /*
         transVector.z = 1;
@@ -433,5 +615,5 @@
         this->roll(Degree(speedLoopRightLeft_*dt), Ogre::Node::TS_LOCAL);
 */
-
+/*
         transVector.x = 1;
         this->translate(transVector*speedForward_*dt, Ogre::Node::TS_LOCAL);
@@ -439,16 +621,7 @@
         this->roll(Degree(speedRotateRightLeft_*dt), Ogre::Node::TS_LOCAL);
         this->pitch(Degree(speedLoopRightLeft_*dt), Ogre::Node::TS_LOCAL);
-
-        if (accelerationForward_ > 25.0)
-        {
-            this->tt_->setRate(emitterRate_);
-        }
-        else
-        {
-            this->tt_->setRate(0);
-        }
-
-    }
-
+*/
+    }
+/*
     void SpaceShip::moveForward(float moveForward) {
         moveForward_ = moveForward;
@@ -506,3 +679,4 @@
         maxSpeedLoopRightLeft_ = maxSpeedLoopRightLeft;
     }
+*/
 }
Index: /code/branches/FICN/src/orxonox/objects/SpaceShip.h
===================================================================
--- /code/branches/FICN/src/orxonox/objects/SpaceShip.h	(revision 646)
+++ /code/branches/FICN/src/orxonox/objects/SpaceShip.h	(revision 647)
@@ -19,6 +19,6 @@
             ~SpaceShip();
             virtual void loadParams(TiXmlElement* xmlElem);
-            void setMaxSpeedValues(float maxSpeedForward, float maxSpeedRotateUpDown, float maxSpeedRotateRightLeft, float maxSpeedLoopRightLeft);
             virtual void tick(float dt);
+/*
             void moveForward(float moveForward);
             void rotateUp(float rotateUp);
@@ -35,4 +35,5 @@
             void maxSpeedRotateRightLeft(float maxSpeedRotateRightLeft);
             void maxSpeedLoopRightLeft(float maxSpeedLoopRightLeft);
+*/
             bool mouseMoved(const OIS::MouseEvent &e);
             bool mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id);
@@ -41,5 +42,5 @@
 
         private:
-            bool bInvertMouse_;
+            bool bInvertYAxis_;
             bool setMouseEventCallback_;
             bool bLMousePressed_;
@@ -48,5 +49,5 @@
             Ogre::SceneNode* camNode_;
 
-            particle::ParticleInterface *tt_;
+            particle::ParticleInterface* tt_;
 
             BillboardSet redBillboard_;
@@ -59,4 +60,23 @@
             float reloadTime_;
 
+            float maxSideAndBackSpeed_;
+            float maxSpeed_;
+            float maxRotation_;
+            float translationAcceleration_;
+            float rotationAcceleration_;
+            float translationDamping_;
+            float rotationDamping_;
+
+            Radian maxRotationRadian_;
+            Radian rotationAccelerationRadian_;
+            Radian rotationDampingRadian_;
+            Radian zeroRadian_;
+            Radian mouseXRotation_;
+            Radian mouseYRotation_;
+
+            float mouseX_;
+            float mouseY_;
+
+/*
             float moveForward_;
             float rotateUp_;
@@ -93,5 +113,5 @@
             float minMouseX;
             bool moved;
-
+*/
             int emitterRate_;
     };
Index: /code/branches/FICN/src/orxonox/objects/WorldEntity.h
===================================================================
--- /code/branches/FICN/src/orxonox/objects/WorldEntity.h	(revision 646)
+++ /code/branches/FICN/src/orxonox/objects/WorldEntity.h	(revision 647)
@@ -133,9 +133,4 @@
       void registerAllVariables();
 
-    private:
-      Ogre::SceneNode* node_;
-      static unsigned int worldEntityCounter_s;
-
-      bool bStatic_;
       Vector3 velocity_;
       Vector3 acceleration_;
@@ -143,4 +138,9 @@
       Radian rotationRate_;
       Radian momentum_;
+
+    private:
+      static unsigned int worldEntityCounter_s;
+      Ogre::SceneNode* node_;
+      bool bStatic_;
   };
 }
Index: /code/branches/FICN/src/orxonox/particle/ParticleInterface.cc
===================================================================
--- /code/branches/FICN/src/orxonox/particle/ParticleInterface.cc	(revision 646)
+++ /code/branches/FICN/src/orxonox/particle/ParticleInterface.cc	(revision 647)
@@ -40,11 +40,5 @@
   ParticleInterface::~ParticleInterface(void)
   {
-std::cout << "blubiblub_1\n";
     sceneManager_->destroyParticleSystem(particleSystem_);
-std::cout << "blubiblub_2\n";
-
-//    delete sceneNode_;
-//    delete particleSystem_;
-//    delete sceneManager_;
   }
 
