Index: orxonox/trunk/src/lib/coord/null_parent.cc
===================================================================
--- orxonox/trunk/src/lib/coord/null_parent.cc	(revision 4439)
+++ orxonox/trunk/src/lib/coord/null_parent.cc	(revision 4440)
@@ -43,6 +43,5 @@
 {
   PRINTF(4)("NullParent::NullParent() - making new NullParent, there can only be one..\n");
-  this->parent = this;
-  this->mode = PNODE_ALL;
+  this->setMode(PNODE_ALL);
   this->setName("NullParent");
 }
@@ -52,7 +51,5 @@
 {
   singletonRef = this;
-  this->parent = this;
-  this->mode = PNODE_ALL;
-  this->absCoordinate = absCoordinate;
+  this->setMode(PNODE_ALL);
   this->setName("NullParent");
 }
@@ -77,30 +74,2 @@
    worry, normaly...
 */
-void NullParent::update (float dt)
-{
-
-  PRINTF(4)("NullParent::update - (%f, %f, %f)\n", this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
-  this->absCoordinate = this->relCoordinate;
-  this->absDirection = parent->getAbsDir () * this->relDirection;
-
-  tIterator<PNode>* iterator = this->children->getIterator();
-  //PNode* pn = this->children->enumerate ();
-  PNode* pn = iterator->nextElement();
-  while( pn != NULL) 
-    { 
-      /* if this node has changed, make sure, that all children are updated also */
-      if( this->bRelCoorChanged || this->bAbsCoorChanged)
-	pn->parentCoorChanged ();
-      if( this->bRelDirChanged || this->bAbsDirChanged)
-	pn->parentDirChanged ();
-      pn->update (dt);
-      //pn = this->children->nextElement ();
-      pn = iterator->nextElement();
-    }
-
-  this->timeStamp = timeStamp;
-  this->bRelCoorChanged = false;
-  this->bAbsCoorChanged = false;
-  this->bRelDirChanged = false;
-  this->bAbsDirChanged = false;
-}
Index: orxonox/trunk/src/lib/coord/null_parent.h
===================================================================
--- orxonox/trunk/src/lib/coord/null_parent.h	(revision 4439)
+++ orxonox/trunk/src/lib/coord/null_parent.h	(revision 4440)
@@ -19,6 +19,4 @@
 
 
-  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 4439)
+++ orxonox/trunk/src/lib/coord/p_node.cc	(revision 4440)
@@ -408,86 +408,114 @@
 void PNode::update (float dt)
 {
-  this->lastAbsCoordinate = this->absCoordinate;
-
-  PRINTF(4)("PNode::update - %s - (%f, %f, %f)\n", this->getName(), this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
-
-
-  if( likely(this->mode & PNODE_MOVEMENT))
+  if( likely(this->parent != NULL))
     {
-      if( unlikely(this->bAbsCoorChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
+      this->lastAbsCoordinate = this->absCoordinate;
+
+      PRINTF(4)("PNode::update - %s - (%f, %f, %f)\n", this->getName(), this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
+
+
+      if( likely(this->mode & PNODE_MOVEMENT))
 	{
-	  /* if you have set the absolute coordinates this overrides all other changes */
-	  this->relCoordinate = this->absCoordinate - parent->getAbsCoor ();
+	  if( unlikely(this->bAbsCoorChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      /* if you have set the absolute coordinates this overrides all other changes */
+	      this->relCoordinate = this->absCoordinate - parent->getAbsCoor ();
+	    }
+	  if( likely(this->bRelCoorChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
+
+	    {
+	      /*this is bad style... must be deleted later - just for testing*/
+
+	      /*
+		if( unlikely(this->parent == NULL))
+		{
+		*this->absCoordinate = *this->relCoordinate;
+		}
+		else */
+	      this->absCoordinate = parent->getAbsCoor() + this->relCoordinate;	      /* update the current absCoordinate */
+	    }
 	}
-      if( likely(this->bRelCoorChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
-
+  
+      if( this->mode & PNODE_LOCAL_ROTATE)
 	{
-	  /*this is bad style... must be deleted later - just for testing*/
-
-	  /*
-	  if( unlikely(this->parent == NULL))
+	  if( unlikely(this->bAbsDirChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
 	    {
-	      *this->absCoordinate = *this->relCoordinate;
+	      /* if you have set the absolute coordinates this overrides all other changes */
+	      this->relDirection = this->absDirection - parent->getAbsDir();
 	    }
-	    else */
-	  this->absCoordinate = parent->getAbsCoor() + this->relCoordinate;	      /* update the current absCoordinate */
+	  else if( likely(this->bRelDirChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      /* update the current absDirection - remember * means rotation around sth.*/
+	      this->absDirection = parent->getAbsDir() * this->relDirection;
+	    }
 	}
-    }
   
-  if( this->mode & PNODE_LOCAL_ROTATE)
-    {
-      if( unlikely(this->bAbsDirChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
+      if( this->mode & PNODE_ROTATE_MOVEMENT)
 	{
-	  /* if you have set the absolute coordinates this overrides all other changes */
-	  this->relDirection = this->absDirection - parent->getAbsDir();
+	  if( unlikely(this->bAbsCoorChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      /* if you have set the absolute coordinates this overrides all other changes */
+	      this->relCoordinate = this->absCoordinate - parent->getAbsCoor ();
+	    }
+	  else if( likely(this->bRelCoorChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
+	    {
+	      /*this is bad style... must be deleted later - just for testing*/
+	      /*if( this->parent == NULL)
+	       *this->absCoordinate = *this->relCoordinate;
+	       else*/
+	      this->absCoordinate = parent->getAbsCoor() + parent->getAbsDir().apply(this->relCoordinate);	      /* update the current absCoordinate */
+	    }
 	}
-      else if( likely(this->bRelDirChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
-	{
-	  /* update the current absDirection - remember * means rotation around sth.*/
-	  this->absDirection = parent->getAbsDir() * this->relDirection;
-	}
-    }
-  
-  if( this->mode & PNODE_ROTATE_MOVEMENT)
-    {
-      if( unlikely(this->bAbsCoorChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
-	{
-	  /* if you have set the absolute coordinates this overrides all other changes */
-	  this->relCoordinate = this->absCoordinate - parent->getAbsCoor ();
-	}
-      else if( likely(this->bRelCoorChanged) /*&& this->timeStamp != DataTank::timeStamp*/)
-	{
-	  /*this is bad style... must be deleted later - just for testing*/
-	  /*if( this->parent == NULL)
-	    *this->absCoordinate = *this->relCoordinate;
-	    else*/
-	  this->absCoordinate = parent->getAbsCoor() + parent->getAbsDir().apply(this->relCoordinate);	      /* update the current absCoordinate */
-	}
-    }
   
   
-  tIterator<PNode>* iterator = this->children->getIterator();
-  //PNode* pn = this->children->enumerate();
-  PNode* pn = iterator->nextElement();
-  while( pn != NULL) 
-    { 
-      /* if this node has changed, make sure, that all children are updated also */
-      if( likely(this->bRelCoorChanged || this->bAbsCoorChanged))
-	pn->parentCoorChanged ();
-      if( likely(this->bRelDirChanged || this->bAbsDirChanged))
-	pn->parentDirChanged ();
-
-      pn->update(dt);
-      //pn = this->children->nextElement();
-      pn = iterator->nextElement();
-    }
-  delete iterator;
-
-  this->velocity = (this->absCoordinate - this->lastAbsCoordinate) / dt;
-  this->timeStamp = timeStamp;
-  this->bRelCoorChanged = false;
-  this->bAbsCoorChanged = false;
-  this->bRelDirChanged = false;
-  this->bAbsDirChanged = false;
+      tIterator<PNode>* iterator = this->children->getIterator();
+      //PNode* pn = this->children->enumerate();
+      PNode* pn = iterator->nextElement();
+      while( pn != NULL) 
+	{ 
+	  /* if this node has changed, make sure, that all children are updated also */
+	  if( likely(this->bRelCoorChanged || this->bAbsCoorChanged))
+	    pn->parentCoorChanged ();
+	  if( likely(this->bRelDirChanged || this->bAbsDirChanged))
+	    pn->parentDirChanged ();
+
+	  pn->update(dt);
+	  //pn = this->children->nextElement();
+	  pn = iterator->nextElement();
+	}
+      delete iterator;
+
+      this->velocity = (this->absCoordinate - this->lastAbsCoordinate) / dt;
+      this->bRelCoorChanged = false;
+      this->bAbsCoorChanged = false;
+      this->bRelDirChanged = false;
+      this->bAbsDirChanged = false;
+    }
+  else
+    {
+      PRINTF(4)("NullParent::update - (%f, %f, %f)\n", this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
+      this->absCoordinate = this->relCoordinate;
+      this->absDirection = this->getAbsDir () * this->relDirection;
+
+      tIterator<PNode>* iterator = this->children->getIterator();
+      //PNode* pn = this->children->enumerate ();
+      PNode* pn = iterator->nextElement();
+      while( pn != NULL) 
+	{ 
+	  /* if this node has changed, make sure, that all children are updated also */
+	  if( this->bRelCoorChanged || this->bAbsCoorChanged)
+	    pn->parentCoorChanged ();
+	  if( this->bRelDirChanged || this->bAbsDirChanged)
+	    pn->parentDirChanged ();
+	  pn->update (dt);
+	  //pn = this->children->nextElement ();
+	  pn = iterator->nextElement();
+	}
+
+      this->bRelCoorChanged = false;
+      this->bAbsCoorChanged = false;
+      this->bRelDirChanged = false;
+      this->bAbsDirChanged = false;
+    }
 }
 
Index: orxonox/trunk/src/lib/coord/p_node.h
===================================================================
--- orxonox/trunk/src/lib/coord/p_node.h	(revision 4439)
+++ orxonox/trunk/src/lib/coord/p_node.h	(revision 4440)
@@ -45,4 +45,5 @@
 #define DEFAULT_MODE PNODE_ALL
 
+
 //! Patent Node is a Engine to calculate the position of an Object in respect to the position of its parent.
 class PNode : virtual public BaseObject {
@@ -55,10 +56,4 @@
 
   void loadParams(const TiXmlElement* root);
-
-
-  PNode* parent;            //!< a pointer to the parent node
-  tList<PNode>* children;   //!< list of the children
-
-
 
   void setRelCoor (const Vector& relCoord);
@@ -80,13 +75,11 @@
   /** \returns a Vector pointing into the absolute Direction */
   inline Vector getAbsDirV() const { return this->absDirection.apply(Vector(0,1,0)); };
-
   void shiftDir (const Quaternion& shift);
 
   /** \returns the Speed of the Node */
-  inline float getSpeed() const {return this->velocity.len()/1000;} //! \FIX THIS SHOULD NOT BE /1000
+  inline float getSpeed() const {return this->velocity.len();} 
   /** \returns the Velocity of the Node */
   inline const Vector& getVelocity() const {return this->velocity;}
-  /** \returns the last calculated coordinate */
-  inline Vector getLastAbsCoor(void) {return this->lastAbsCoordinate;}
+
 
   void addChild (PNode* pNode, int parentingMode = DEFAULT_MODE);
@@ -94,35 +87,40 @@
   void remove();
 
-
   void setParent (PNode* parent);
-  inline void parentCoorChanged () { this->bRelCoorChanged = true; }
-  inline void parentDirChanged () { this->bRelDirChanged = true; }
   void setMode (int parentingMode);
   int getMode() const;
 
-  virtual void update (float dt);
+  void update (float dt);
   void processTick (float dt);
 
   void debug ();
 
- protected:
-  float timeStamp;         //!< this the timeStamp of when the abs{Coordinat, Direction} has been calculated
-  bool bAbsCoorChanged;    //!< If Absolute Coordinate has changed since last time we checked
-  bool bRelCoorChanged;    //!< If Relative Coordinate has changed since last time we checked
-  bool bAbsDirChanged;     //!< If Absolute Direction has changed since last time we checked
-  bool bRelDirChanged;     //!< If Relative Direction has changed since last time we checked
-
-  Vector relCoordinate;    //!< coordinates relative to the parent
-  Vector absCoordinate;    //!< absolute coordinates in the world ( from (0,0,0) )
-  Quaternion relDirection; //!< direction relative to the parent
-  Quaternion absDirection; //!< absolute direvtion in the world ( from (0,0,1) )
-
-  int mode;                //!< the mode of the binding
 
  private:
   void init(PNode* parent);
+  inline void parentCoorChanged () { this->bRelCoorChanged = true; }
+  inline void parentDirChanged () { this->bRelDirChanged = true; }
+  /** \returns the last calculated coordinate */
+  inline Vector getLastAbsCoor(void) {return this->lastAbsCoordinate;}
 
-  Vector velocity;          //!< Saves the velocity.
-  Vector lastAbsCoordinate; //!< this is used for speedcalculation, it stores the last coordinate
+
+ private:
+  bool            bAbsCoorChanged;    //!< If Absolute Coordinate has changed since last time we checked
+  bool            bRelCoorChanged;    //!< If Relative Coordinate has changed since last time we checked
+  bool            bAbsDirChanged;     //!< If Absolute Direction has changed since last time we checked
+  bool            bRelDirChanged;     //!< If Relative Direction has changed since last time we checked
+
+  Vector          relCoordinate;      //!< coordinates relative to the parent
+  Vector          absCoordinate;      //!< absolute coordinates in the world ( from (0,0,0) )
+  Quaternion      relDirection;       //!< direction relative to the parent
+  Quaternion      absDirection;       //!< absolute direvtion in the world ( from (0,0,1) )
+
+  Vector          velocity;           //!< Saves the velocity.
+  Vector          lastAbsCoordinate;  //!< this is used for speedcalculation, it stores the last coordinate
+
+  PNode*          parent;             //!< a pointer to the parent node
+  tList<PNode>*   children;           //!< list of the children
+
+  unsigned int    mode;               //!< the mode of the binding
 };
 
Index: orxonox/trunk/src/lib/physics/physics_interface.cc
===================================================================
--- orxonox/trunk/src/lib/physics/physics_interface.cc	(revision 4439)
+++ orxonox/trunk/src/lib/physics/physics_interface.cc	(revision 4440)
@@ -65,4 +65,5 @@
 void PhysicsInterface::recalcMass()
 {
+  /*
   PNode* massCalcPNode = dynamic_cast<PNode*>(this);  //! \todo not sure if this will work ....
   float massSum = 0;
@@ -87,4 +88,5 @@
     this->massChildren = massSum;
   }
+  */
 }
 	
@@ -95,4 +97,5 @@
   this->forceSum += field->calcForce(tmp->getAbsCoor());  
 }
+
 
 void PhysicsInterface::tickPhys( float dt )
Index: orxonox/trunk/src/util/track/track_node.cc
===================================================================
--- orxonox/trunk/src/util/track/track_node.cc	(revision 4439)
+++ orxonox/trunk/src/util/track/track_node.cc	(revision 4440)
@@ -43,5 +43,4 @@
 TrackNode::TrackNode (const Vector& absCoordinate)
 {
-  this->parent = NullParent::getInstance();
   this->trackManager = TrackManager::getInstance();
   this->setMode(PNODE_ALL);
