Index: orxonox/branches/parenting/src/Makefile.am
===================================================================
--- orxonox/branches/parenting/src/Makefile.am	(revision 3277)
+++ orxonox/branches/parenting/src/Makefile.am	(revision 3302)
@@ -29,5 +29,6 @@
 		 list.cc \
 		 p_node.cc \
-		 null_parent.cc
+		 null_parent.cc \
+		 base_object.cc 
 
 noinst_HEADERS = ability.h \
@@ -64,5 +65,6 @@
 		 campaign.h \
 		 p_node.h \
-		 null_parent.h
+		 null_parent.h \
+		 base_object.h
 
 
Index: orxonox/branches/parenting/src/Makefile.in
===================================================================
--- orxonox/branches/parenting/src/Makefile.in	(revision 3277)
+++ orxonox/branches/parenting/src/Makefile.in	(revision 3302)
@@ -61,5 +61,5 @@
 	environment.$(OBJEXT) object.$(OBJEXT) array.$(OBJEXT) \
 	material.$(OBJEXT) list.$(OBJEXT) p_node.$(OBJEXT) \
-	null_parent.$(OBJEXT)
+	null_parent.$(OBJEXT) base_object.$(OBJEXT)
 orxonox_OBJECTS = $(am_orxonox_OBJECTS)
 orxonox_LDADD = $(LDADD)
@@ -68,5 +68,6 @@
 am__depfiles_maybe = depfiles
 @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/array.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/base_entity.Po ./$(DEPDIR)/camera.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/base_entity.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/base_object.Po ./$(DEPDIR)/camera.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/campaign.Po ./$(DEPDIR)/collision.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/command_node.Po \
@@ -220,5 +221,6 @@
 		 list.cc \
 		 p_node.cc \
-		 null_parent.cc
+		 null_parent.cc \
+		 base_object.cc 
 
 noinst_HEADERS = ability.h \
@@ -255,5 +257,6 @@
 		 campaign.h \
 		 p_node.h \
-		 null_parent.h
+		 null_parent.h \
+		 base_object.h
 
 EXTRA_DIST = orxonox.conf
@@ -335,4 +338,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base_entity.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base_object.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camera.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/campaign.Po@am__quote@
Index: orxonox/branches/parenting/src/base_object.cc
===================================================================
--- orxonox/branches/parenting/src/base_object.cc	(revision 3302)
+++ orxonox/branches/parenting/src/base_object.cc	(revision 3302)
@@ -0,0 +1,48 @@
+
+
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+*/
+
+
+#include "base_object.h"
+
+
+using namespace std;
+
+
+/**
+   \brief standard constructor
+*/
+BaseObject::BaseObject () {}
+
+
+/**
+   \brief standard deconstructor
+*/
+BaseObject::~BaseObject () {}
+
+
+void BaseObject::setClassName (char* className)
+{
+  this->className = className;
+}
+
+
+bool BaseObject::isA (char* className)
+{
+  if( this->className == className)
+    return false;
+  return true;
+}
Index: orxonox/branches/parenting/src/base_object.h
===================================================================
--- orxonox/branches/parenting/src/base_object.h	(revision 3302)
+++ orxonox/branches/parenting/src/base_object.h	(revision 3302)
@@ -0,0 +1,27 @@
+/*! 
+    \file proto_class.h
+    \brief Definition of the proto class template, used quickly start work
+*/
+
+
+#ifndef _BASE_OBJECT_H
+#define _BASE_OBJECT_H
+
+#include "stdincl.h"
+
+
+class BaseObject {
+
+ public:
+  BaseObject ();
+  ~BaseObject ();
+
+  void setClassName (char* className);
+  bool isA (char* className);
+
+ private:
+  char* className;
+
+};
+
+#endif /* _BASE_OBJECT_H */
Index: orxonox/branches/parenting/src/camera.cc
===================================================================
--- orxonox/branches/parenting/src/camera.cc	(revision 3277)
+++ orxonox/branches/parenting/src/camera.cc	(revision 3302)
@@ -45,4 +45,6 @@
   this->actualPlace.r.y = 10.0;
   this->actualPlace.r.z = -5.0;
+
+  this->setDrawable (false);
 }
 
@@ -83,4 +85,5 @@
     case ELLIPTICAL:
       {
+	/*
 	//r = actual_place.r 
 	Orxonox *orx = Orxonox::getInstance();
@@ -95,5 +98,4 @@
 	      {
 		Vector *start = new Vector(0.0, 1.0, 0.0);
-		//r = /*actual_place.r*/ *start - plFocus.r;
 		r = *(new Vector(0.0, 5.0, 0.0));
 
@@ -120,37 +122,24 @@
 	    //printf("vector r = %f, %f, %f\n",r.x, r.y, r.z );
 	    rAbs = r.len();
-	    if(t < 30.0) /* FIXME!!*/
+	    if(t < 30)
 	      {
 		ka = rAbs / deltaTime*deltaTime;
 	      }
-	    /* this is the new length of the vector */
-	    //float len = ka * powf((deltaTime - t), 2);
-	    
-	    /* calc the rotation */
-	    /*
-	    Vector axis(0.0, 0.0, 1.0);
-	    if(t < 30.0)
-	      a0 = PI/4 - atanf(fabs(r.x) / fabs(r.y));
-	    printf("a0 = %f\n", a0);
-	    float angle = a0/deltaTime * (deltaTime - t);
-	    printf("angle is: %f\n", angle);
-	    Quaternion q(angle, axis);
-	    */
-	    //r = q.apply(r);
-	    //r = r * (len/r.len());
-	    
-	    //res->quatSlerp(from, to, t/deltaTime, res);
+
 	    res->quatSlerp(to, from, t/deltaTime, res);
 
 	    Vector ursp(0.0, 0.0, 0.0);
-	    desiredPlace.r = /*plFocus.r -*/ ursp - res->apply(r); 
+	    desiredPlace.r =  ursp - res->apply(r); 
 
 	    printf("desired place is: %f, %f, %f\n", desiredPlace.r.x, desiredPlace.r.y, desiredPlace.r.z);
 	    //plLastBPlace = *bound->get_placement();
+	    
 	  } 
+      */
       }
       break;
     case SMOTH_FOLLOW:
       {
+	/*
 	Placement *plBound = bound->getPlacement();
 	Location lcBound;
@@ -160,6 +149,7 @@
 	    Vector vDirection(0.0, 0.0, 1.0);
 	    vDirection = plBound->w.apply(vDirection);
-	    desiredPlace.r = (vDirection * ((lcBound.dist-10.0)/* / l*/)) + Vector(0,0,5.0);
+	    desiredPlace.r = (vDirection * ((lcBound.dist-10.0))) + Vector(0,0,5.0);
 	  }
+	*/
 	break;
       }
@@ -167,4 +157,5 @@
     case STICKY:
       {
+	/*
 	if(bound != null)
 	  {
@@ -175,4 +166,5 @@
 	    desiredPlace.r = plBound->r - vDirection*10 + eclipticOffset;
 	  }
+	*/
 	break;
       }
@@ -182,11 +174,17 @@
       if( bound != NULL && world != NULL )
 	{
-	  bound->getLookat (&lookat);
-	  world->calcCameraPos (&lookat, &desiredPlace);
+	  //bound->getLookat (&lookat);
+	  //bound->getAbsCoor ()
+	  //world->calcCameraPos (&lookat, &desiredPlace);
+	  //FIXME: camera should be made via relative coordinates
+	  Vector* cameraOffset = new Vector (-10, 0, 5);
+	  this->setRelCoor (cameraOffset);
 	} 
       else
 	{
+	  /*
 	  desiredPlace.r = Vector (0,0,0);
 	  desiredPlace.w = Quaternion (); 
+	  */
 	}
       break;
@@ -237,17 +235,18 @@
   // rotation
   float matrix[4][4];
-  actualPlace.w.conjugate().matrix (matrix);
+  //this->absDirection.conjugate().matrix (matrix);
   /* orientation and */
-  glMultMatrixf ((float*)matrix);
+  //glMultMatrixf ((float*)matrix);
   /*  translation */
-  glTranslatef (-actualPlace.r.x, -actualPlace.r.y,- actualPlace.r.z);
+  glTranslatef (this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z );
+  //glTranslatef (-actualPlace.r.x, -actualPlace.r.y,- actualPlace.r.z);
 //Placement *plBound = bound->get_placement();
 
   // ===== second camera control calculation option
-  /*
-   gluLookAt(actual_place.r.x, actual_place.r.y, actual_place.r.z, 
-              plBound->r.x, plBound->r.y, plBound->r.z,
-              0.0, 0.0, 1.0);
-  */
+  
+  gluLookAt(this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z, 
+	    this->parent->getAbsCoor ().x, this->parent->getAbsCoor ().y, this->parent->getAbsCoor ().z,
+	    0.0, 0.0, 1.0);
+  
 
   glMatrixMode (GL_MODELVIEW);
Index: orxonox/branches/parenting/src/camera.h
===================================================================
--- orxonox/branches/parenting/src/camera.h	(revision 3277)
+++ orxonox/branches/parenting/src/camera.h	(revision 3302)
@@ -8,6 +8,7 @@
 
 #include "stdincl.h"
+#include "world_entity.h"
 
-class WorldEntity;
+
 class World;
 
@@ -23,5 +24,5 @@
 enum CAMERA_MODE {NORMAL, SMOTH_FOLLOW, STICKY, ELLIPTICAL};
 
-class Camera {
+class Camera : public WorldEntity {
  private:
   WorldEntity* bound;		//!< the WorldEntity the Camera is bound to
Index: orxonox/branches/parenting/src/environment.cc
===================================================================
--- orxonox/branches/parenting/src/environment.cc	(revision 3277)
+++ orxonox/branches/parenting/src/environment.cc	(revision 3302)
@@ -70,7 +70,11 @@
   glLoadIdentity();
   float matrix[4][4];
+
+  glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
+  this->getAbsDir ().matrix (matrix);
   
-  glTranslatef(getPlacement()->r.x,getPlacement()->r.y,getPlacement()->r.z);
-  getPlacement()->w.matrix (matrix);
+
+  //glTranslatef(getPlacement()->r.x,getPlacement()->r.y,getPlacement()->r.z);
+  //getPlacement()->w.matrix (matrix);
   glMultMatrixf ((float*)matrix);
 
Index: orxonox/branches/parenting/src/null_parent.cc
===================================================================
--- orxonox/branches/parenting/src/null_parent.cc	(revision 3277)
+++ orxonox/branches/parenting/src/null_parent.cc	(revision 3302)
@@ -60,5 +60,5 @@
    worry, normaly...
 */
-void NullParent::update (long timeStamp)
+void NullParent::update (float timeStamp)
 {
   this->absCoordinate = this->relCoordinate;
Index: orxonox/branches/parenting/src/null_parent.h
===================================================================
--- orxonox/branches/parenting/src/null_parent.h	(revision 3277)
+++ orxonox/branches/parenting/src/null_parent.h	(revision 3302)
@@ -9,8 +9,8 @@
 
 #include "stdincl.h"
-#include "p_node.h"
+#include "world_entity.h"
 
 
-class NullParent : public PNode {
+class NullParent : public WorldEntity {
 
  public:
@@ -19,5 +19,5 @@
   ~NullParent ();
 
-  virtual void update (long timeStamp);
+  virtual void update (float timeStamp);
 
 };
Index: orxonox/branches/parenting/src/p_node.cc
===================================================================
--- orxonox/branches/parenting/src/p_node.cc	(revision 3277)
+++ orxonox/branches/parenting/src/p_node.cc	(revision 3302)
@@ -180,9 +180,4 @@
       this->bRelCoorChanged = true;
     }
-
-  printf("PNode::shiftCoor() - relCoord: (%f, %f, %f)\n", 
-	 this->relCoordinate.x, 
-	 this->relCoordinate.y,
-	 this->relCoordinate.z);
 }
 
@@ -342,7 +337,8 @@
    worry, normaly...
 */
-void PNode::update (long timeStamp)
-{
-      
+void PNode::update (float timeStamp)
+{
+  printf ("PNode::update - %s - (%f, %f, %f)\n", this->objectName, this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
+
       if( this->mode == MOVEMENT || this->mode == ALL)
 	{
@@ -399,4 +395,23 @@
 
 
+/*
+  \brief tick
+*/
+void PNode::processTick (float dt)
+{
+  this->tick (dt);
+  PNode* pn = this->children->enumerate();
+  while( pn != NULL) 
+    { 
+      pn->processTick (dt);
+      pn = this->children->nextElement();
+    } 
+}
+
+
+void PNode::tick (float dt)
+{}
+
+
 void PNode::debug()
 {
@@ -406,2 +421,22 @@
 	 this->absCoordinate.z);
 }
+
+
+/*
+  \brief set the name of the node
+
+  for debug purposes realy usefull, not used to work properly
+*/
+void PNode::setName (char* newName)
+{
+  this->objectName = newName;
+}
+
+
+/*
+  \brief gets the name of the node
+*/
+char* PNode::getName ()
+{
+  return this->objectName;
+}
Index: orxonox/branches/parenting/src/p_node.h
===================================================================
--- orxonox/branches/parenting/src/p_node.h	(revision 3277)
+++ orxonox/branches/parenting/src/p_node.h	(revision 3302)
@@ -29,5 +29,5 @@
 #define DEFAULT_MODE ALL
 
-class PNode {
+class PNode : public BaseObject {
 
  public:
@@ -45,7 +45,10 @@
   Vector getRelCoor ();
   void setRelCoor (Vector* relCoord);
+  //void setRelCoor (Vector relCoord);
   Vector getAbsCoor ();
   void setAbsCoor (Vector* absCoord);
+  //void setAbsCoor (Vector absCoord);
   void shiftCoor (Vector* shift);
+  //void shiftCoor (Vector shift);
 
   Quaternion getRelDir ();
@@ -62,9 +65,17 @@
   void parentDirChanged ();
   void setMode (parentingMode mode);
-  virtual void update (long timeStamp);
+
+  virtual void update (float timeStamp);
+  void processTick (float dt);
+  virtual void tick (float dt);
+
+  void setName (char* newName);
+  char* getName ();
+
 
   void debug ();
 
-  long timeStamp;   //! this the timeStamp of when the abs{Coordinat, Direction} has been calculated
+  float timeStamp;   //! this the timeStamp of when the abs{Coordinat, Direction} has been calculated
+  char* objectName;
   bool bAbsCoorChanged;
   bool bRelCoorChanged;
Index: orxonox/branches/parenting/src/player.cc
===================================================================
--- orxonox/branches/parenting/src/player.cc	(revision 3277)
+++ orxonox/branches/parenting/src/player.cc	(revision 3302)
@@ -54,10 +54,10 @@
 }
 
-Player::~Player()
+Player::~Player ()
 {
   delete this->obj;
 }
 
-void Player::postSpawn()
+void Player::postSpawn ()
 {
   travelSpeed = 15.0;
@@ -69,23 +69,23 @@
 }
 
-void Player::tick(float time)
+void Player::tick (float time)
 {
   // movement
-  move (time);
+  this->move (time);
 }
 
-void Player::hit(WorldEntity* weapon, Vector loc)
+void Player::hit (WorldEntity* weapon, Vector loc)
 {
 }
 
-void Player::destroy()
+void Player::destroy ()
 {
 }
 
-void Player::collide(WorldEntity* other, Uint32 ownhitflags, Uint32 otherhitflags)
+void Player::collide (WorldEntity* other, Uint32 ownhitflags, Uint32 otherhitflags)
 {
 }
 
-void Player::command(Command* cmd)
+void Player::command (Command* cmd)
 {
   //printf("Player|recieved command [%s]\n", cmd->cmd);
@@ -97,5 +97,5 @@
 }
 
-void Player::draw()
+void Player::draw ()
 { 
   glMatrixMode(GL_MODELVIEW);
@@ -103,17 +103,18 @@
   float matrix[4][4];
   
-  glTranslatef(getPlacement()->r.x, getPlacement()->r.y, getPlacement()->r.z);
-  getPlacement()->w.matrix (matrix);
+  glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
+  //PN glTranslatef(getPlacement()->r.x, getPlacement()->r.y, getPlacement()->r.z);
+  //getPlacement()->w.matrix (matrix);
+  this->getAbsDir ().matrix (matrix);
   glMultMatrixf((float*)matrix);
   
   glMatrixMode(GL_MODELVIEW);
-  glRotatef(-90, 0,1,0);
+  //glRotatef(-90, 0,1,0);
   obj->draw();
   // glCallList(objectList);
-
-  
-  
 }
 
+
+/*PN
 void Player::getLookat(Location* locbuf)
 {
@@ -121,19 +122,21 @@
   //locbuf->dist += 5.0;
 }
+*/
 
-void Player::leftWorld()
+void Player::leftWorld ()
 {
 }
 
-void Player::move(float time)
+void Player::move (float time)
 {
   Vector accel(0.0, 0.0, 0.0);
   /* FIXME: calculating the direction and orthDirection every timeSlice is redundant! save it somewhere */
-  Placement *pos = getPlacement();
+  //Placement *pos = getPlacement();
+  
   /* calculate the direction in which the craft is heading  */
-  Vector direction(0.0, 0.0, 1.0);
-  direction = pos->w.apply(direction);
-  Vector orthDirection(0.0, 0.0, 1.0);
-  orthDirection = orthDirection.cross(direction);
+  Vector direction (1.0, 0.0, 0.0);
+  //direction = this->absDirection.apply (direction);
+  Vector orthDirection (0.0, 0.0, 1.0);
+  //orthDirection = orthDirection.cross (direction);
 
   if( bUp) { accel = accel+(direction*acceleration); }
@@ -144,5 +147,5 @@
   if( bDescend) {/* FIXME */} /* \todo up and down player movement */
 
-  Location* l = getLocation();
+  //Location* l = getLocation();
   
   // r(t) = r(0) + v(0)*t + 1/2*a*t^2
@@ -152,7 +155,12 @@
 
   /* this the base-speed of the player: determines how fast and how the player follows the track*/
-  l->dist = l->dist + travelSpeed * time;
-
+  //l->dist = l->dist + travelSpeed * time;
+  
+  Vector* shift = new Vector (this->travelSpeed * time, 0, 0);
+  this->shiftCoor (shift);
+  
   /* this updates the player position on the track - user interaction */
-  l->pos = l->pos + accel*time;
+  //l->pos = l->pos + accel*time;
+  Vector move = accel * time;
+  this->shiftCoor (&move);
 }
Index: orxonox/branches/parenting/src/player.h
===================================================================
--- orxonox/branches/parenting/src/player.h	(revision 3277)
+++ orxonox/branches/parenting/src/player.h	(revision 3302)
@@ -27,5 +27,5 @@
   
   virtual void draw();
-  virtual void getLookat(Location* locbuf);
+  // virtual void getLookat(Location* locbuf);
   
   virtual void leftWorld();
Index: orxonox/branches/parenting/src/proto_class.cc
===================================================================
--- orxonox/branches/parenting/src/proto_class.cc	(revision 3277)
+++ orxonox/branches/parenting/src/proto_class.cc	(revision 3302)
@@ -28,5 +28,8 @@
    \todo this constructor is not jet implemented - do it
 */
-ProtoClass::ProtoClass () {}
+ProtoClass::ProtoClass () 
+{
+   this->setClassName ("ProtoClass");
+}
 
 
Index: orxonox/branches/parenting/src/proto_class.h
===================================================================
--- orxonox/branches/parenting/src/proto_class.h	(revision 3277)
+++ orxonox/branches/parenting/src/proto_class.h	(revision 3302)
@@ -12,5 +12,5 @@
 /*class Test;*/ /* forward definition of class Test (without including it here!)*/
 
-class ProtoClass {
+class ProtoClass : public BaseObject {
 
  public:
Index: orxonox/branches/parenting/src/stdincl.h
===================================================================
--- orxonox/branches/parenting/src/stdincl.h	(revision 3277)
+++ orxonox/branches/parenting/src/stdincl.h	(revision 3302)
@@ -39,4 +39,5 @@
 #include "orxonox.h"
 #include "data_tank.h"
+#include "base_object.h"
 
 #endif /* _STDINCL_H */
Index: orxonox/branches/parenting/src/story_entity.h
===================================================================
--- orxonox/branches/parenting/src/story_entity.h	(revision 3277)
+++ orxonox/branches/parenting/src/story_entity.h	(revision 3302)
@@ -12,5 +12,5 @@
 
 //! A class that represents something to play in orxonox. it is a container for worlds, movies, mission briefings, etc...
-class StoryEntity {
+class StoryEntity : public BaseObject {
 
  public:
Index: orxonox/branches/parenting/src/track.cc
===================================================================
--- orxonox/branches/parenting/src/track.cc	(revision 3277)
+++ orxonox/branches/parenting/src/track.cc	(revision 3302)
@@ -29,4 +29,5 @@
   this->end = NULL;
   this->nextID = 0;
+  this->setClassName ("Track");
 }
 
@@ -44,4 +45,5 @@
   this->end = finish;
   this->nextID = next;
+  this->setClassName ("Track");
 }
 
Index: orxonox/branches/parenting/src/track.h
===================================================================
--- orxonox/branches/parenting/src/track.h	(revision 3277)
+++ orxonox/branches/parenting/src/track.h	(revision 3302)
@@ -14,5 +14,5 @@
    To create special levels with special camera movement, rules or whatever, derive from this base class.
 */
-class Track 
+class Track : public BaseObject
 {
  private:
Index: orxonox/branches/parenting/src/world.cc
===================================================================
--- orxonox/branches/parenting/src/world.cc	(revision 3277)
+++ orxonox/branches/parenting/src/world.cc	(revision 3302)
@@ -36,4 +36,5 @@
 World::World (char* name)
 {
+  this->setClassName ("World");
   this->worldName = name;
   this->debugWorldNr = -1;
@@ -132,4 +133,5 @@
 	  {
 	    this->nullParent = new NullParent ();
+	    this->nullParent->setName ("NullParent");
 
 	    // create some path nodes
@@ -153,4 +155,5 @@
 	    // create a player
 	    WorldEntity* myPlayer = new Player();
+	    myPlayer->setName ("player");
 	    this->spawn(myPlayer);
 	    this->localPlayer = myPlayer;	    
@@ -162,5 +165,7 @@
 	    // bind camera
 	    this->localCamera = new Camera(this);
-	    this->getCamera()->bind (myPlayer);	
+	    this->localCamera->setName ("camera");
+	    this->getCamera()->bind (myPlayer);
+	    this->localPlayer->addChild (this->localCamera);
 	    
 	    /*
@@ -449,4 +454,7 @@
   WorldEntity* entity;
   
+  ((WorldEntity*)this->nullParent)->processDraw ();
+
+  /*
   entity = this->entities->enumerate();
   while( entity != NULL ) 
@@ -455,5 +463,5 @@
       entity = this->entities->nextElement();
     }
-  
+  */
   
   // draw debug coord system
@@ -473,4 +481,5 @@
 void World::update ()
 {
+  /*
   //List<WorldEntity> *l;
   WorldEntity* entity;
@@ -491,5 +500,4 @@
 	  t = loc->part;
 	  
-	  /* check if entity has still a legal track-id */
 	  if( t >= tracklen )
 	    {
@@ -514,14 +522,9 @@
       else
 	{
-	  /* \todo: implement check whether this particular free entity 
-	     is out of the game area
-	     \todo: call function to notify the entity that it left 
-	     the game area
-	  */
 	}
       
       entity = entities->nextElement();
     }
-  
+  */  
 }
 
@@ -536,4 +539,7 @@
   float seconds = deltaT / 1000.0;
   
+  this->nullParent->update (seconds);
+  this->nullParent->processTick (seconds);
+
   entity = entities->enumerate(); 
   while( entity != NULL) 
@@ -656,12 +662,12 @@
 void World::mainLoop()
 {
-  this->lastFrame = SDL_GetTicks();
+  this->lastFrame = SDL_GetTicks ();
   printf("World::mainLoop() - Entering main loop\n");
   while( !this->bQuitOrxonox && !this->bQuitCurrentGame) /* \todo implement pause */
     {
       // Network
-      synchronize();
+      this->synchronize ();
       // Process input
-      handleInput();
+      this->handleInput ();
       if( this->bQuitCurrentGame || this->bQuitOrxonox)
 	{
@@ -670,11 +676,11 @@
 	}
       // Process time
-      timeSlice();
+      this->timeSlice ();
       // Process collision
-      collision();
+      this->collision ();
       // Draw
-      display();
-  
-      for(int i = 0; i < 10000000; i++) {}
+      this->display ();
+  
+      for( int i = 0; i < 10000000; i++) {}
     }
   printf("World::mainLoop() - Exiting the main loop\n");
@@ -792,4 +798,5 @@
     this->nullParent->addChild (entity);
 
+  /*
   entities->add (entity);
   zeroloc.dist = 0;
@@ -803,4 +810,5 @@
       this->track[loc->part].mapCoords( loc, entity->getPlacement());
     }
+  */
   entity->postSpawn ();
 }
@@ -817,7 +825,8 @@
     this->nullParent->addChild (entity);
 
-  Location zeroLoc;
+  //Location zeroLoc;
   WorldEntity* owner;
   this->entities->add (entity);
+  /*
   if( loc == NULL)
     {
@@ -828,9 +837,12 @@
       loc = &zeroLoc;
     }
-  entity->init (loc, owner);
+  */
+  //entity->init (loc, owner);
+  /*
   if (entity->bFree)
     {
       this->track[loc->part].mapCoords( loc, entity->getPlacement());
     }
+  */
   entity->postSpawn ();
   //return entity;
@@ -848,4 +860,5 @@
     this->nullParent->addChild (entity);
 
+  /*
   Placement zeroPlc;
   WorldEntity* owner;
@@ -856,6 +869,7 @@
       plc = &zeroPlc;
     }
+  */
   this->entities->add (entity);
-  entity->init (plc, owner);
+  //entity->init (plc, owner);
   entity->postSpawn ();
   //return entity;
Index: orxonox/branches/parenting/src/world_entity.cc
===================================================================
--- orxonox/branches/parenting/src/world_entity.cc	(revision 3277)
+++ orxonox/branches/parenting/src/world_entity.cc	(revision 3302)
@@ -36,4 +36,5 @@
 WorldEntity::WorldEntity (bool isFree) : bFree(isFree)
 {
+  this->setClassName ("WorldEntity");
   this->bDraw = true;
   collisioncluster = NULL;
@@ -53,8 +54,10 @@
    \return a pointer to location
 */
+/*PN
 Location* WorldEntity::getLocation ()
 {
   return &loc;
 }
+*/
 
 /**
@@ -62,9 +65,10 @@
    \return a pointer to placement
 */
+ /*PN
 Placement* WorldEntity::getPlacement ()
 {
   return &place;
 }
-
+ */
 /**
    \brief query whether the WorldEntity in question is free
@@ -89,4 +93,5 @@
 }
 
+
 /**
    \brief this method is called every frame
@@ -99,4 +104,26 @@
 }
 
+
+/** 
+    \brief process draw function 
+*/
+void WorldEntity::processDraw ()
+{
+  this->draw ();
+  PNode* pn = this->children->enumerate ();
+  while( pn != NULL) 
+    { 
+      ((WorldEntity*)pn)->processDraw ();
+      pn = this->children->nextElement();
+    } 
+}
+
+
+void WorldEntity::setDrawable (bool bDraw)
+{
+  this->bDraw = bDraw;
+}
+
+
 /**
    \brief the entity is drawn onto the screen with this function
@@ -105,6 +132,5 @@
 */
 void WorldEntity::draw() 
-{
-}
+{}
 
 /**
@@ -140,6 +166,6 @@
 void WorldEntity::init( Location* spawnloc, WorldEntity* spawnowner)
 {
-  loc = *spawnloc;
-  owner = spawnowner;
+  //  loc = *spawnloc;
+  //owner = spawnowner;
 }
 
@@ -149,6 +175,6 @@
 void WorldEntity::init( Placement* spawnplc, WorldEntity* spawnowner)
 {
-  place = *spawnplc;
-  owner = spawnowner;
+  //place = *spawnplc;
+  //owner = spawnowner;
 }
 
@@ -181,7 +207,9 @@
    to look at the location you return with this.
 */
+/*PN
 void WorldEntity::getLookat (Location* locbuf)
 {
 }
+*/
 
 /**
Index: orxonox/branches/parenting/src/world_entity.h
===================================================================
--- orxonox/branches/parenting/src/world_entity.h	(revision 3277)
+++ orxonox/branches/parenting/src/world_entity.h	(revision 3302)
@@ -22,6 +22,6 @@
   
   //PNode* pNode;
-  Location* getLocation ();
-  Placement* getPlacement ();
+  //PN Location* getLocation ();
+  //PN Placement* getPlacement ();
   void setCollision (CollisionCluster* newhull);
   
@@ -37,7 +37,9 @@
   virtual void collide (WorldEntity* other,  Uint32 ownhitflags, Uint32 otherhitflags);
   virtual void command (Command* cmd);
-  
+
+  void processDraw ();
   virtual void draw ();
-  virtual void getLookat (Location* locbuf);
+  void setDrawable (bool bDraw);
+  //PN virtual void getLookat (Location* locbuf);
   
   virtual void leftWorld ();
@@ -50,6 +52,6 @@
   WorldEntity* owner;
   CollisionCluster* collisioncluster;
-  Placement place;
-  Location loc;
+  //PN Placement place;
+  //PN Location loc;
   
   void init( Location* spawnloc, WorldEntity* spawnowner);
