Index: branches/single_player_map/src/lib/collision_reaction/cr_physics_ground_walk.cc
===================================================================
--- branches/single_player_map/src/lib/collision_reaction/cr_physics_ground_walk.cc	(revision 8825)
+++ branches/single_player_map/src/lib/collision_reaction/cr_physics_ground_walk.cc	(revision 8829)
@@ -69,13 +69,5 @@
   AABB* box = collision->getEntityB()->getModelAABB();
 
-  if( box != NULL)
-  {
-    PRINTF(0)("collpos:\n");
-    Vector collPos =  ce->getCollisionPosition();
-    collPos.debug();
 
-  }
-
-#if 0
   if( box != NULL)
     height = ( ce->getCollisionPosition() - collision->getEntityB()->getAbsCoor() )*(-1.0f) ;
@@ -134,5 +126,5 @@
 
   }// if(box!= NULL)
-#endif
+
   /*
   PRINTF(0)("Collision with Ground: \n");
Index: branches/single_player_map/src/lib/util/executor/executor_lua.h
===================================================================
--- branches/single_player_map/src/lib/util/executor/executor_lua.h	(revision 8825)
+++ branches/single_player_map/src/lib/util/executor/executor_lua.h	(revision 8829)
@@ -437,4 +437,56 @@
   private:
     ret          (T::*functionPointer)(type0, type1, type2);
+};
+
+
+///////////
+//// 4 ////
+///////////
+//! Executes a Function with a lua_State* parameter.
+template<class T, typename ret, typename type0, typename type1, typename type2, typename type3> class ExecutorLua4ret : public Executor
+{
+  public:
+    /**
+   * @brief Constructor of a ExecutorXML
+   * @param function a Function to call
+     */
+    ExecutorLua4ret(ret (T::*function)(type0, type1, type2, type3))
+  : Executor(ExecutorParamType<type0>(), ExecutorParamType<type1>(), ExecutorParamType<type2>(), ExecutorParamType<type3>())
+    {
+      this->functionPointer = function;
+      this->functorType = Executor_Objective | Executor_NoLoadString;
+    }
+
+    /**
+     * @brief executes the Command on BaseObject
+     * @param object the BaseObject to execute this Executor on
+     * @param loadString ignored in this case
+     */
+    virtual void operator()(BaseObject* object, const SubString& = SubString()) const
+    {
+      PRINTF(1)("no usefull executor\n");
+    }
+
+    virtual void operator()(BaseObject* object, int& count, void* values) const
+    {
+      lua_State* state = (lua_State*)values;
+      count = 1;
+
+      toLua<ret>(state, (dynamic_cast<T*>(object)->*(functionPointer))(
+          fromLua<type0>(state, 1),
+          fromLua<type1>(state, 2),
+          fromLua<type2>(state, 3),
+          fromLua<type3>(state, 4) ));
+    }
+
+    /**
+     * @returns a _new_ Copy of this Executor
+     */
+    virtual Executor* clone () const
+    {
+      return new ExecutorLua4ret<T, ret, type0, type1, type2, type3>(this->functionPointer);
+    }
+  private:
+    ret          (T::*functionPointer)(type0, type1, type2, type3);
 };
 
Index: branches/single_player_map/src/world_entities/npcs/generic_npc.cc
===================================================================
--- branches/single_player_map/src/world_entities/npcs/generic_npc.cc	(revision 8825)
+++ branches/single_player_map/src/world_entities/npcs/generic_npc.cc	(revision 8829)
@@ -43,4 +43,5 @@
                         addMethod("walkTo", ExecutorLua3ret<GenericNPC,float,float,float,float>(&GenericNPC::walkTo))
                         ->addMethod("setTime", ExecutorLua1<GenericNPC,float>(&GenericNPC::setTime))
+                        ->addMethod("turnTo", ExecutorLua4ret<GenericNPC,bool,float,float,float,float>(&GenericNPC::turnTo))
                        );
 
@@ -155,5 +156,5 @@
     this->destDir = destDir;
 
-    float time = 100.0f;
+    //float time = 100.0f;
 
     if( this->currentAnim != NULL)
@@ -161,7 +162,7 @@
 
     this->currentAnim = new Animation3D(this);
+    this->currentAnim->addKeyFrame(this->getAbsCoor(), this->getAbsDir(), 0.0f, ANIM_LINEAR, ANIM_LINEAR);
     this->currentAnim->addKeyFrame(this->getAbsCoor(), this->getAbsDir(), time, ANIM_LINEAR, ANIM_LINEAR);
     this->currentAnim->addKeyFrame(this->destCoor, this->destDir, time, ANIM_LINEAR, ANIM_LINEAR);
-
 
     this->currentAnim->setInfinity(ANIM_INF_CONSTANT);
@@ -407,21 +408,32 @@
   Quaternion destDir = Quaternion(Vector(qx, qy, qz), qu);
 
+  printf("Turning: %f, %f, %f, %f \n",qu,qx,qy,qz);
   // check if this is the current goal
+  this->destDir.debug();
+  destDir.debug();
   if( this->destDir != destDir)
   {
-    this->destCoor = destCoor;
-
-    float time = 5.0f;
-
+//     if( this->currentAnim != NULL)
+//       this->currentAnim->stop();
+//     
+    PRINTF(0)("SET ANIMATION\n");
+    this->destDir = destDir;
+// 
+   
+    
     if( this->currentAnim != NULL)
       delete this->currentAnim;
-
+    
+    this->setAbsDirSoft(destDir, 0.1f);
+/*
     this->currentAnim = new Animation3D(this);
+    this->currentAnim->addKeyFrame(this->getAbsCoor(), this->getAbsDir(), 0.0f, ANIM_LINEAR, ANIM_LINEAR);
     this->currentAnim->addKeyFrame(this->getAbsCoor(), this->getAbsDir(), time, ANIM_LINEAR, ANIM_LINEAR);
     this->currentAnim->addKeyFrame(this->getAbsCoor(), this->destDir, time, ANIM_LINEAR, ANIM_LINEAR);
 
+
     this->currentAnim->setInfinity(ANIM_INF_CONSTANT);
-    this->currentAnim->play();
-
+    this->currentAnim->play();*/
+    
     this->setAnimation(STAND, MD2_ANIM_LOOP);
   }
@@ -468,7 +480,4 @@
     ((InteractiveModel*)this->getModel(0))->tick(time);
 
-  // tick this animation
-  if( this->currentAnim != NULL)
-    this->currentAnim->tick(time);
 }
 
