Index: branches/playability/src/world_entities/projectiles/projectile.cc
===================================================================
--- branches/playability/src/world_entities/projectiles/projectile.cc	(revision 9963)
+++ branches/playability/src/world_entities/projectiles/projectile.cc	(revision 9964)
@@ -23,4 +23,6 @@
 #include "model.h"
 #include "sound/resource_sound_buffer.h"
+
+#include <cmath>
 
 #include "debug.h"
@@ -157,4 +159,31 @@
 }
 
+
+/**
+ *  this function gets called by tick to calculate the new flight direction
+ *  @param curDirection direction vector
+ *  @param estTargetDir target vector, pointing to where the target will be on hit
+ *  @param angle = tick * turningSpeed
+ *  @return normalized (new) direction vector
+*/
+Vector Projectile::newDirection(Vector curDirection, Vector estTargetDir, float angle)
+{
+  float tmp = angleDeg ( curDirection, estTargetDir);
+  if (tmp == 0) { return curDirection; }
+
+  if( angle >  tmp ) { angle = tmp; }
+
+  //Vector n = curDirection.cross(estTargetDir);
+  //Vector d = n.cross(curDirection);
+  Vector d = curDirection.cross(estTargetDir).cross(curDirection);
+  d.normalize();
+  if( angle == 90) { return d; }
+
+  Vector newDir = curDirection + d *  curDirection.len() * tan (angle);
+  newDir.normalize();
+  return newDir;
+}
+
+
 /**
  * signal tick, time dependent things will be handled here
@@ -163,4 +192,7 @@
 void Projectile::tick (float dt)
 {
+  Vector estTargetDir = this->targetPosition + this->targetVelocity * this->eta;
+  //Vector estTargetDir = (this->target.getRelCoor() + this->target.getVelocity()) / this->velocity.len() ;
+  this->velocity = this->newDirection(this->velocity, estTargetDir, this->turningSpeed * dt ) * this->velocity.len();
   Vector v = this->velocity * (dt);
   this->shiftCoor(v);
@@ -179,2 +211,3 @@
     this->soundSource.play(this->explosionBuffer);
 }
+
Index: branches/playability/src/world_entities/projectiles/projectile.h
===================================================================
--- branches/playability/src/world_entities/projectiles/projectile.h	(revision 9963)
+++ branches/playability/src/world_entities/projectiles/projectile.h	(revision 9964)
@@ -64,18 +64,22 @@
   protected:
     // energy
-    float                  energyMin;                 //!< The minimal Energy a Projectile needs to be emitted.
-    bool                   bChargeable;               //!< if the Projectile is Charegeable
+    float                   energyMin;                //!< The minimal Energy a Projectile needs to be emitted.
+    bool                    bChargeable;              //!< if the Projectile is Charegeable
 
-    float                  lifeCycle;                 //!< The percentage of the Lifetime done [0-1]
-    float                  lifeSpan;                  //!< The entire lifespan of the Shoot. in seconds
+    float                   lifeCycle;                //!< The percentage of the Lifetime done [0-1]
+    float                   lifeSpan;                 //!< The entire lifespan of the Shoot. in seconds
 
     float                   physDamage;               //!< damage to shield and armor
     float                   elecDamage;               //!< damage to elctronic
+    float                   turningSpeed;             //!< degrees per tick
 
-    Vector                 flightDirection;           //!< DOF direction in which the shoot flighs
+    Vector                  flightDirection;          //!< DOF direction in which the shoot flighs
 
-    Vector                 velocity;                  //!< velocity of the projectile.
+    Vector                  velocity;                 //!< velocity of the projectile.
 
-    PNode*                 target;                    //!< A target for guided Weapons.
+    PNode*                  target;                   //!< A target for guided Weapons.
+    Vector                  targetPosition;           //!< current target position relative to projectile
+    Vector                  targetVelocity;           //!< current target speed and direction
+    float                   eta;                      //!< estimated time of arrival == time to kaboom!
 
     OrxSound::SoundSource  soundSource;
@@ -83,4 +87,6 @@
     OrxSound::SoundBuffer  explosionBuffer;
     OrxSound::SoundBuffer  engineBuffer;
+
+    virtual Vector newDirection(Vector curDirection, Vector estTargetDir, float angle);
 };
 
