Index: /trunk/src/lib/coord/p_node.cc
===================================================================
--- /trunk/src/lib/coord/p_node.cc	(revision 5413)
+++ /trunk/src/lib/coord/p_node.cc	(revision 5414)
@@ -415,4 +415,35 @@
   this->setAbsDir(Quaternion(Vector(x,y,z), Vector(0,1,0)));
 }
+
+/**
+ *  sets the absolute direction
+ * @param absDir absolute coordinates
+ */
+void PNode::setAbsDirSoft (const Quaternion& absDirSoft, float bias)
+{
+  if (this->toDirection == NULL)
+    this->toDirection = new Quaternion();
+
+  if (likely(this->parent != NULL))
+    *this->toDirection = absDirSoft / this->parent->getAbsDir();
+  else
+   *this->toDirection = absDirSoft;
+
+  this->bias = bias;
+}
+
+/**
+ * @see void PNode::setAbsDir (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::setAbsDirSoft (float x, float y, float z, float bias)
+{
+  this->setAbsDirSoft(Quaternion(Vector(x,y,z), Vector(0,1,0)), bias);
+}
+
 
 /**
Index: /trunk/src/lib/coord/p_node.h
===================================================================
--- /trunk/src/lib/coord/p_node.h	(revision 5413)
+++ /trunk/src/lib/coord/p_node.h	(revision 5414)
@@ -83,4 +83,6 @@
   void setAbsDir (const Quaternion& absDir);
   void setAbsDir (float x, float y, float z);
+  void setAbsDirSoft(const Quaternion& absDirSoft, float bias = 1.0);
+  void setAbsDirSoft(float x, float y, float z, float bias = 1.0);
   /** @returns the absolute Direction */
   inline const Quaternion& getAbsDir () const { return this->absDirection; };
Index: /trunk/src/lib/graphics/render2D/element_2d.cc
===================================================================
--- /trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5413)
+++ /trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5414)
@@ -367,4 +367,43 @@
 
 /**
+ * @param absCoordSoft set absolute coordinate
+ * @param bias how fast to iterato to the new Coordinate
+ */
+void Element2D::setAbsCoorSoft2D (const Vector& absCoordSoft, float bias)
+{
+  if (this->toCoordinate == NULL)
+    this->toCoordinate = new Vector();
+
+  if( likely(this->parentMode & E2D_PARENT_MOVEMENT))
+  {
+    /* if you have set the absolute coordinates this overrides all other changes */
+    if (likely(this->parent != NULL))
+      *this->toCoordinate = absCoordSoft - parent->getAbsCoor2D ();
+    else
+      *this->toCoordinate = absCoordSoft;
+  }
+  if( this->parentMode & E2D_PARENT_ROTATE_MOVEMENT)
+  {
+    if (likely(this->parent != NULL))
+      *this->toCoordinate = absCoordSoft - parent->getAbsCoor2D ();
+    else
+      *this->toCoordinate = absCoordSoft;
+  }
+
+  this->bias = bias;
+}
+
+/**
+ * @param x x-coordinate.
+ * @param y y-coordinate.
+ * @param z z-coordinate.
+ * @see void PNode::setAbsCoor (const Vector& absCoord)
+ */
+void Element2D::setAbsCoorSoft2D (float x, float y, float depth, float bias)
+{
+  this->setAbsCoorSoft2D(Vector(x, y, depth), bias);
+}
+
+/**
  *  shift coordinate ralative
  * @param shift shift vector
@@ -439,4 +478,21 @@
 
   this->bRelDirChanged = true;
+}
+
+/**
+ *  sets the absolute direction softly
+ * @param absDir absolute coordinates
+ */
+void Element2D::setAbsDirSoft2D (float absDirSoft, float bias)
+{
+  if (this->toDirection == NULL)
+    this->toDirection = new float;
+
+  if (likely(this->parent != NULL))
+    *this->toDirection = absDirSoft - this->parent->getAbsDir2D();
+  else
+    *this->toDirection = absDirSoft;
+
+  this->bias = bias;
 }
 
Index: /trunk/src/lib/graphics/render2D/element_2d.h
===================================================================
--- /trunk/src/lib/graphics/render2D/element_2d.h	(revision 5413)
+++ /trunk/src/lib/graphics/render2D/element_2d.h	(revision 5414)
@@ -134,4 +134,6 @@
     void setAbsCoor2D (float x, float y, float depth = 1.0);
     void setAbsCoor2Dpx (int x, int y);
+    void setAbsCoorSoft2D (const Vector& absCoordSoft, float bias = 1.0);
+    void setAbsCoorSoft2D (float x, float y, float depth = 1.0, float bias = 1.0);
     /** @returns the absolute position */
     inline const Vector& getAbsCoor2D () const { return this->absCoordinate; };
@@ -148,4 +150,5 @@
     inline float getRelDirSoft2D() const { return (this->toDirection)?*this->toDirection:this->relDirection; };
     void setAbsDir2D (float absDir);
+    void setAbsDirSoft2D (float absDirSoft, float bias = 1.0);
     /** @returns the absolute Direction */
     inline float getAbsDir2D () const { return this->absDirection; };
Index: /trunk/src/world_entities/weapons/turret.cc
===================================================================
--- /trunk/src/world_entities/weapons/turret.cc	(revision 5413)
+++ /trunk/src/world_entities/weapons/turret.cc	(revision 5414)
@@ -127,5 +127,5 @@
     quat = Quaternion(direction, Vector(0,1,0)) * Quaternion ( -M_PI_2, Vector(0,1,0)) ;
 
-  this->setAbsDir(quat);
+  this->setAbsDirSoft(quat, 5);
 }
 
@@ -140,6 +140,5 @@
   if (target != NULL)
   {
-    pj->setVelocity(this->getVelocity()+(target->getAbsCoor() - this->getAbsCoor())*.5);//this->getVelocity());
-    pj->setAbsDir(this->getAbsDir());
+    pj->setVelocity(this->getVelocity()+(this->getAbsDir().apply(Vector(1,0,0))*100.0   /*target->getAbsCoor() - this->getAbsCoor()*/)*.5);//this->getVelocity());
   }
   else
