Index: orxonox/trunk/src/lib/coord/null_parent.cc
===================================================================
--- orxonox/trunk/src/lib/coord/null_parent.cc	(revision 3643)
+++ orxonox/trunk/src/lib/coord/null_parent.cc	(revision 3644)
@@ -77,5 +77,5 @@
    worry, normaly...
 */
-void NullParent::update ()
+void NullParent::update (float dt)
 {
 
@@ -92,5 +92,5 @@
       if( this->bRelDirChanged || this->bAbsDirChanged)
 	pn->parentDirChanged ();
-      pn->update ();
+      pn->update (dt);
       pn = this->children->nextElement ();
     }
Index: orxonox/trunk/src/lib/coord/null_parent.h
===================================================================
--- orxonox/trunk/src/lib/coord/null_parent.h	(revision 3643)
+++ orxonox/trunk/src/lib/coord/null_parent.h	(revision 3644)
@@ -19,6 +19,6 @@
 
 
-  virtual void update ();
-
+  virtual void update (float dt);
+  
  private:
   NullParent ();
Index: orxonox/trunk/src/lib/coord/p_node.cc
===================================================================
--- orxonox/trunk/src/lib/coord/p_node.cc	(revision 3643)
+++ orxonox/trunk/src/lib/coord/p_node.cc	(revision 3644)
@@ -115,4 +115,5 @@
   this->absDirection = new Quaternion();
   this->relDirection = new Quaternion();
+  this->lastAbsCoordinate = new Vector();
 }
 
@@ -297,4 +298,19 @@
 {}
 
+
+/**
+   \brief this calculates the current movement speed of the node
+*/
+float PNode::getSpeed()
+{
+  if(this->time == 0)
+    return 0;
+  Vector* diff = new Vector();
+  *diff = *this->absCoordinate - *this->lastAbsCoordinate;
+  float x = diff->len();
+  return x / this->time;
+}
+
+
 /**
    \brief adds a child and makes this node to a parent
@@ -422,6 +438,7 @@
    worry, normaly...
 */
-void PNode::update ()
-{
+void PNode::update (float dt)
+{
+  this->time = dt;
   PRINTF(4)("PNode::update - %s - (%f, %f, %f)\n", this->objectName, this->absCoordinate->x, this->absCoordinate->y, this->absCoordinate->z);
   // printf("%s", this->objectName);
@@ -486,5 +503,5 @@
 	pn->parentDirChanged ();
 
-      pn->update();
+      pn->update(dt);
       pn = this->children->nextElement();
     }
Index: orxonox/trunk/src/lib/coord/p_node.h
===================================================================
--- orxonox/trunk/src/lib/coord/p_node.h	(revision 3643)
+++ orxonox/trunk/src/lib/coord/p_node.h	(revision 3644)
@@ -72,4 +72,6 @@
   void shiftDir (Quaternion* shift);
 
+  float getSpeed();
+
   void addChild (PNode* pNode);
   void addChild (PNode* pNode, int parentingMode);
@@ -84,5 +86,5 @@
   int getMode();
 
-  virtual void update ();
+  virtual void update (float dt);
   void processTick (float dt);
 
@@ -92,7 +94,4 @@
 
   void debug ();
-
- private:
-  void init(PNode* parent);
 
  protected:
@@ -111,4 +110,9 @@
   int mode;                //!< the mode of the binding
 
+ private:
+  void init(PNode* parent);
+
+  Vector* lastAbsCoordinate; //!< this is used for speedcalculation, it stores the last coordinate
+  float time;                //!< time since last update
 };
 
Index: orxonox/trunk/src/story_entities/world.cc
===================================================================
--- orxonox/trunk/src/story_entities/world.cc	(revision 3643)
+++ orxonox/trunk/src/story_entities/world.cc	(revision 3644)
@@ -128,5 +128,4 @@
 World::World (int worldID)
 {
-  printf(">>>>>>>>>>>>>>>>>WORLD::WORLD called NEW WORLD created\n");
   this->init(NULL, worldID);
 }
@@ -604,5 +603,5 @@
   p4->debug ();
   
-  p1->update ();
+  p1->update (0);
 
   printf ("World::debug() - update\n");
@@ -613,5 +612,5 @@
 
   p2->shiftCoor (new Vector(-1, -1, -1));
-  p1->update ();
+  p1->update (0);
 
   p1->debug ();
@@ -623,5 +622,5 @@
 
 
- p1->update ();
+ p1->update (0);
 
   p1->debug ();
@@ -720,5 +719,5 @@
   if(!this->bPause)
     {
-      Uint32 dt = currentFrame - this->lastFrame;
+      this->dt = currentFrame - this->lastFrame;
       
       if(dt > 0)
@@ -765,5 +764,5 @@
 void World::update()
 {
-  this->nullParent->update ();
+  this->nullParent->update (dt);
 }
 
Index: orxonox/trunk/src/story_entities/world.h
===================================================================
--- orxonox/trunk/src/story_entities/world.h	(revision 3643)
+++ orxonox/trunk/src/story_entities/world.h	(revision 3644)
@@ -87,4 +87,5 @@
 
   Uint32 lastFrame;             //!< last time of frame
+  Uint32 dt;                    //!< time needed to calculate this frame
   bool bQuitOrxonox;            //!< quit this application
   bool bQuitCurrentGame;        //!< quit only the current game and return to menu
