Index: /trunk/src/lib/math/quaternion.cc
===================================================================
--- /trunk/src/lib/math/quaternion.cc	(revision 8730)
+++ /trunk/src/lib/math/quaternion.cc	(revision 8731)
@@ -216,5 +216,5 @@
 
 /**
- * @returns the heading
+ * @returns the Heading
  */
 float Quaternion::getHeading() const
@@ -230,4 +230,12 @@
 
 /**
+ * @returns the Heading-Quaternion
+ */
+Quaternion Quaternion::getHeadingQuat() const
+{
+  return Quaternion(this->getHeading(), Vector(0,1,0));
+}
+
+/**
  * @returns the Attitude
  */
@@ -236,4 +244,13 @@
   return asin(2.0 * (v.x*v.y + v.z*w));
 }
+
+/**
+ * @returns the Attitude-Quaternion
+ */
+Quaternion Quaternion::getAttitudeQuat() const
+{
+  return Quaternion(this->getAttitude(), Vector(0,0,1));
+}
+
 
 /**
@@ -247,4 +264,13 @@
     return 0.0f;
 }
+
+/**
+ * @returns the Bank-Quaternion
+ */
+Quaternion Quaternion::getBankQuat() const
+{
+  return Quaternion(this->getBank(), Vector(1,0,0));
+}
+
 
 
Index: /trunk/src/lib/math/quaternion.h
===================================================================
--- /trunk/src/lib/math/quaternion.h	(revision 8730)
+++ /trunk/src/lib/math/quaternion.h	(revision 8731)
@@ -98,6 +98,9 @@
 
   float getHeading() const;
+  Quaternion getHeadingQuat() const;
   float getAttitude() const;
+  Quaternion getAttitudeQuat() const;
   float getBank() const;
+  Quaternion getBankQuat() const;
   /** @returns the rotational axis of this Quaternion */
   inline Vector getSpacialAxis() const { return this->v / sin(acos(w));/*sqrt(v.x*v.x + v.y*v.y + v.z+v.z);*/ };
Index: /trunk/src/world_entities/creatures/fps_player.cc
===================================================================
--- /trunk/src/world_entities/creatures/fps_player.cc	(revision 8730)
+++ /trunk/src/world_entities/creatures/fps_player.cc	(revision 8731)
@@ -18,5 +18,5 @@
 
 #include "interactive_model.h"
-#include "md2/md2Model.h"
+#include "state.h"
 
 #include "src/lib/util/loading/factory.h"
@@ -28,8 +28,6 @@
 
 
+
 CREATE_FACTORY(FPSPlayer, CL_FPS_PLAYER);
-
-
-using namespace std;
 
 
@@ -72,4 +70,5 @@
   this->bBackward = false;
   this->bJump = false;
+
   this->xMouse = 0.0f;
   this->yMouse = 0.0f;
@@ -78,5 +77,9 @@
   this->setHealth(80);
 
-  this->mouseDir = this->getAbsDir();
+
+  this->cameraNode.setParent(this);
+
+  this->attitude = this->getAbsDir().getAttitude();
+  this->heading = this->getAbsDir().getHeading();
 
   //add events to the eventlist
@@ -91,6 +94,4 @@
   this->getWeaponManager().setSlotCount(0);
 
-  this->getWeaponManager().getFixedTarget()->setParent(this);
-  this->getWeaponManager().getFixedTarget()->setRelCoor(100000,0,0);
 
   dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( false);
@@ -101,5 +102,5 @@
   registerVar( new SynchronizeableBool( &bForward, &bForward, "bForward", PERMISSION_OWNER ) );
   registerVar( new SynchronizeableBool( &bBackward, &bBackward, "bBackward", PERMISSION_OWNER ) );
-  registerVar( new SynchronizeableQuaternion( &mouseDir, &mouseDir, "mouseDir", PERMISSION_OWNER ) );
+//  registerVar( new SynchronizeableQuaternion( &mouseDir, &mouseDir, "mouseDir", PERMISSION_OWNER ) );
 
   // collision reaction registration
@@ -119,7 +120,6 @@
 void FPSPlayer::setPlayDirection(const Quaternion& quat, float speed)
 {
-  this->mouseDir = quat;
-  this->angleY = quat.getHeading();
-  this->angleX = quat.getAttitude();
+  this->attitude = this->getAbsDir().getAttitude();
+  this->heading = this->getAbsDir().getHeading();
 }
 
@@ -140,6 +140,15 @@
 void FPSPlayer::enter()
 {
-  dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( false );
-  this->attachCamera();
+  dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( true );
+
+  State::getCameraNode()->setParentSoft(&this->cameraNode);
+  State::getCameraTargetNode()->setParentSoft(&this->cameraNode);
+
+  this->getWeaponManager().getFixedTarget()->setParent(State::getCameraTargetNode());
+  this->getWeaponManager().getFixedTarget()->setRelCoor(0,0,0);
+
+
+  State::getCameraNode()->setRelCoor(0,0,0);
+  State::getCameraTargetNode()->setRelCoor(10,0,0);
 }
 
@@ -165,19 +174,20 @@
     yMouse *= time ;
 
-    angleX -= xMouse;
-    angleY -= yMouse;
-
-    if ( angleY > 2.05 )
-      angleY = 2.05;
-
-    if ( angleY < -1.15 )
-      angleY = -1.15;
-
-    this->mouseDir = Quaternion( angleX, Vector( 0, 1, 0 ) ) * Quaternion( angleY, Vector( 0, 0, 1 ) );
+    heading -= xMouse;
+    attitude-= yMouse;
+
+    if ( attitude > 2.05 )
+      attitude = 2.05;
+
+    else if ( attitude < -1.15 )
+      attitude = -1.15;
+
+    this->setAbsDir(Quaternion(heading, Vector(0,1,0)));
+    this->cameraNode.setRelDir(Quaternion( attitude, Vector( 0, 0, 1 ) ));
 
     xMouse = yMouse = 0;
   }
 
-  this->setAbsDir( this->mouseDir );
+ // this->setAbsDir( this->mouseDir );
 
   Vector velocity;
Index: /trunk/src/world_entities/creatures/fps_player.h
===================================================================
--- /trunk/src/world_entities/creatures/fps_player.h	(revision 8730)
+++ /trunk/src/world_entities/creatures/fps_player.h	(revision 8731)
@@ -45,9 +45,10 @@
     float                 xMouse;             //!< mouse moved in x-Direction
     float                 yMouse;             //!< mouse moved in y-Direction
-    Quaternion            mouseDir;           //!< the direction where the player wants to fly
 
-    float                 angleX;
-    float                 angleY;
 
+    float                 heading;
+    float                 attitude;
+
+    PNode                 cameraNode;
 };
 
