Index: /orxonox/trunk/src/lib/coord/p_node.cc
===================================================================
--- /orxonox/trunk/src/lib/coord/p_node.cc	(revision 4989)
+++ /orxonox/trunk/src/lib/coord/p_node.cc	(revision 4990)
@@ -113,4 +113,5 @@
 
   this->toPosition = NULL;
+  this->toDirection = NULL;
 }
 
@@ -187,4 +188,17 @@
 
   *this->toPosition = relCoordSoft;
+}
+
+
+/**
+ *  set relative coordinates
+ * @param x x-relative coordinates to its parent
+ * @param y y-relative coordinates to its parent
+ * @param z z-relative coordinates to its parent
+   \see  void PNode::setRelCoor (const Vector& relCoord)
+ */
+void PNode::setRelCoorSoft (float x, float y, float z)
+{
+  this->setRelCoorSoft(Vector(x, y, z));
 }
 
@@ -277,4 +291,31 @@
 }
 
+
+/**
+ * sets the Relative Direction of this node to its parent in a Smoothed way
+ * @param relDirSoft the direction to iterate to smoothely.
+ */
+void PNode::setRelDirSoft(const Quaternion& relDirSoft)
+{
+  if (likely(this->toDirection == NULL))
+    this->toDirection = new Quaternion();
+
+  *this->toDirection = relDirSoft;
+}
+
+/**
+ * @see void PNode::setRelDirSoft (const Quaternion& relDir)
+ * @param x the x direction
+ * @param y the y direction
+ * @param z the z direction
+ *
+ * main difference is, that here you give a directional vector, that will be translated into a Quaternion
+ */
+void PNode::setRelDirSoft(float x, float y, float z)
+{
+  this->setRelDirSoft(Quaternion(Vector(x,y,z), Vector(0,1,0)));
+}
+
+
 /**
  *  sets the absolute direction (0,0,1)
@@ -418,4 +459,8 @@
 }
 
+/**
+ * does the reparenting in a very smooth way
+ * @param parentNode the new Node to connect this node to.
+ */
 void PNode::softReparent(PNode* parentNode)
 {
@@ -426,11 +471,18 @@
     *this->toPosition = this->getRelCoor();
   }
-
-
-  Vector tmp = this->getAbsCoor();
+  if (likely(this->toDirection == NULL))
+  {
+    this->toDirection = new Quaternion();
+    *this->toDirection = this->getRelDir();
+  }
+
+
+  Vector tmpV = this->getAbsCoor();
+  Quaternion tmpQ = this->getAbsDir();
 
   parentNode->addChild(this);
 
-  this->setRelCoor(tmp - parentNode->getAbsCoor());
+  this->setRelCoor(tmpV - parentNode->getAbsCoor());
+  this->setRelDir(tmpQ - parentNode->getAbsDir());
 }
 
@@ -511,4 +563,19 @@
           PRINTF(5)("SmoothMove of %s finished\n", this->getName());
         }
+      }
+      if (unlikely(this->toDirection != NULL))
+      {
+        Quaternion rotQuat = (*this->toDirection - this->getRelDir()) *dt;
+
+//        if (likely(rotQuat.len() >= .001))
+        {
+          this->shiftDir(rotQuat);
+        }
+/*        else
+        {
+          delete this->toPosition;
+          this->toPosition = NULL;
+          PRINTF(5)("SmoothMove of %s finished\n", this->getName());
+        }*/
       }
 
Index: /orxonox/trunk/src/lib/coord/p_node.h
===================================================================
--- /orxonox/trunk/src/lib/coord/p_node.h	(revision 4989)
+++ /orxonox/trunk/src/lib/coord/p_node.h	(revision 4990)
@@ -62,5 +62,6 @@
   void setRelCoor (const Vector& relCoord);
   void setRelCoor (float x, float y, float z);
-  void setRelCoorSoft(const Vector& softRelCoord);
+  void setRelCoorSoft(const Vector& relCoordSoft);
+  void setRelCoorSoft(float x, float y, float z);
   /** @returns the relative position */
   inline const Vector& getRelCoor () const { return this->relCoordinate; };
@@ -73,4 +74,6 @@
   void setRelDir (const Quaternion& relDir);
   void setRelDir (float x, float y, float z);
+  void setRelDirSoft(const Quaternion& relDirSoft);
+  void setRelDirSoft(float x, float y, float z);
   /** @returns the relative Direction */
   inline const Quaternion& getRelDir () const { return this->relDirection; };
@@ -139,5 +142,6 @@
 
 
-  Vector*         toPosition;         //!< a position to wich to iterate. (This is used in conjunction with softReparent.)
+  Vector*         toPosition;         //!< a position to which to iterate. (This is used in conjunction with softReparent.and set*CoorSoft)
+  Quaternion*     toDirection;        //!< a direction to which to iterate. (This is used in conjunction with softReparent and set*DirSoft)
 
   PNode*          parent;             //!< a pointer to the parent node
Index: /orxonox/trunk/src/world_entities/player.cc
===================================================================
--- /orxonox/trunk/src/world_entities/player.cc	(revision 4989)
+++ /orxonox/trunk/src/world_entities/player.cc	(revision 4990)
@@ -123,5 +123,5 @@
   this->setClassID(CL_PLAYER, "Player");
 
-//  this->model = (Model*)ResourceManager::getInstance()->load("models/reaplow.obj", OBJ, RP_CAMPAIGN);
+  //  this->model = (Model*)ResourceManager::getInstance()->load("models/reaplow.obj", OBJ, RP_CAMPAIGN);
   travelSpeed = 15.0;
   velocity = new Vector();
