Index: orxonox/branches/trackManager/src/p_node.cc
===================================================================
--- orxonox/branches/trackManager/src/p_node.cc	(revision 3370)
+++ orxonox/branches/trackManager/src/p_node.cc	(revision 3371)
@@ -226,5 +226,8 @@
 */
 void PNode::setAbsDir (Quaternion* absDir)
-{}
+{
+  this->bAbsDirChanged = true;
+  this->absDirection = *absDir;
+}
 
 
Index: orxonox/branches/trackManager/src/track_manager.cc
===================================================================
--- orxonox/branches/trackManager/src/track_manager.cc	(revision 3370)
+++ orxonox/branches/trackManager/src/track_manager.cc	(revision 3371)
@@ -19,5 +19,5 @@
 #include "track_manager.h"
 #include <stdarg.h>
-
+#include "p_node.h"
 
 using namespace std;
@@ -111,4 +111,5 @@
   this->maxTime = 0;
   this->trackElemCount = 1;
+  this->bindSlave = NULL;
 }
 
@@ -440,9 +441,19 @@
 void TrackManager::tick(float dt)
 {
+  dt /= 1000;
+  printf("LocalTime is: %f, timestep is: %f\n", this->localTime, dt);
   if (this->localTime <= this->firstTrackElem->duration)
     this->jumpTo(this->localTime);
+  printf("LocalTime is: %f, timestep is: %f\n", this->localTime, dt);
   this->localTime += dt;
   if (this->localTime > this->currentTrackElem->startingTime + this->currentTrackElem->duration && this->currentTrackElem->childCount > 0)
     this->currentTrackElem = this->currentTrackElem->children[0];
+  if (this->bindSlave)
+    {
+      Vector tmp = this->calcPos();
+      Quaternion quat = Quaternion(this->calcDir(), Vector(0,1,0)); 
+      this->bindSlave->setAbsCoor(&tmp);
+      this->bindSlave->setAbsDir(&quat);
+    }
 }
 
@@ -471,4 +482,13 @@
 }
 
+/**
+   \brief Sets the PNode, that should be moved along the Tack
+   \param bindSlave the PNode to set
+*/
+void TrackManager::setBindSlave(PNode* bindSlave)
+{
+  if (!this->bindSlave)
+    this->bindSlave = bindSlave;
+}
 
 
Index: orxonox/branches/trackManager/src/track_manager.h
===================================================================
--- orxonox/branches/trackManager/src/track_manager.h	(revision 3370)
+++ orxonox/branches/trackManager/src/track_manager.h	(revision 3371)
@@ -14,4 +14,5 @@
 #include "stdincl.h"
 
+class PNode;
 
 //! condition for choosing a certain Path. \todo implement a useful way.
@@ -104,4 +105,5 @@
   float maxTime;                      //!< The maximal time the track has.
   int trackElemCount;                 //!< The count of TrackElements that exist.
+  PNode* bindSlave;
   
   void initChildren(unsigned int childCount);
@@ -134,4 +136,6 @@
   void choosePath(int graphID);
 
+  void setBindSlave(PNode* bindSlave);
+
   // DEBUG //
   void drawGraph(float dt) const;
Index: orxonox/branches/trackManager/src/world.cc
===================================================================
--- orxonox/branches/trackManager/src/world.cc	(revision 3370)
+++ orxonox/branches/trackManager/src/world.cc	(revision 3371)
@@ -175,5 +175,5 @@
       trackManager->addPoint(Vector(30,0,5));
       trackManager->addPoint(Vector(40,0,5));
-      trackManager->setDuration(.5);
+      trackManager->setDuration(2);
       trackManager->setSavePoint();
       trackManager->addPoint(Vector(50,10,10));
@@ -182,5 +182,5 @@
       trackManager->addPoint(Vector(80,0,-10));
       trackManager->addPoint(Vector(90,0,-10));
-      trackManager->setDuration(.5);
+      trackManager->setDuration(5);
       trackManager->setSavePoint();
       trackManager->addPoint(Vector(110,0,5));
@@ -189,5 +189,5 @@
       trackManager->addPoint(Vector(140,0,-10));
       trackManager->addPoint(Vector(150,0,-10));
-      trackManager->setDuration(.5);
+      trackManager->setDuration(3);
       int fork11, fork12, fork13, fork14;
       trackManager->fork(4, &fork11, &fork12, &fork13, &fork14);
@@ -195,4 +195,5 @@
       trackManager->addPoint(Vector(170, 0, -15));
       trackManager->addPoint(Vector(180, 0, -15));
+      trackManager->setDuration(3);
       trackManager->workOn(fork12);
       trackManager->addPoint(Vector(170, 0, 10));
@@ -200,4 +201,5 @@
       trackManager->addPoint(Vector(190,2,5));
       trackManager->addPoint(Vector(200,2,5));
+      trackManager->setDuration(7);
       int fork21, fork22;
       trackManager->fork(2, &fork21, &fork22);
@@ -208,4 +210,5 @@
       trackManager->addPoint(Vector(250, 0, 0));
       trackManager->addPoint(Vector(260, 0, 5));
+      trackManager->setDuration(3);
       trackManager->join(2, fork12, fork11);
       trackManager->workOn(fork22);
@@ -214,12 +217,13 @@
       trackManager->addPoint(Vector(240, 0, 10));
       trackManager->addPoint(Vector(250, 0, 5));
+      trackManager->setDuration(6);
       trackManager->workOn(fork13);
       trackManager->addPoint(Vector(200,-10,5));
       trackManager->addPoint(Vector(250,-10,5));
-      printf("fork14: %d\n", fork14);
+      trackManager->setDuration(3);
       trackManager->workOn(fork14);
       trackManager->addPoint(Vector(200,15,0));
       trackManager->addPoint(Vector(210,0,10));
-
+      trackManager->setDuration(1);
 
 
@@ -273,5 +277,4 @@
 	    this->spawn (myPlayer);
 	    this->localPlayer = myPlayer;	    
-
 	    // bind input
 	    Orxonox *orx = Orxonox::getInstance ();
@@ -290,5 +293,5 @@
 	    env->setName ("env");
 	    this->spawn(env, es, qs);
-
+	    trackManager->setBindSlave(env);
 
 	    break;
@@ -541,5 +544,4 @@
   trackManager->drawGraph(.01);
   trackManager->debug(2);
-  delete trackManager;
   
   /*
@@ -651,5 +653,5 @@
 	  t = loc->part;
 	  
-	  if( t >= tracklen )
+	  if( t >= traclen )
 	    {
 	      printf("An entity is out of the game area\n");
@@ -882,4 +884,5 @@
       this->update ();
       this->localCamera->timeSlice(dt);
+      this->trackManager->tick(dt);
     }
   this->lastFrame = currentFrame;
