Index: /orxonox/trunk/src/lib/coord/null_parent.cc
===================================================================
--- /orxonox/trunk/src/lib/coord/null_parent.cc	(revision 3528)
+++ /orxonox/trunk/src/lib/coord/null_parent.cc	(revision 3529)
@@ -36,16 +36,19 @@
    \todo this constructor is not jet implemented - do it
 */
-NullParent::NullParent () 
+NullParent::NullParent () : PNode("NullParent")
 {
+  printf("NullParent::NullParent() - making new NullParent, there can only be one..\n");
   this->parent = this;
   this->mode = ALL;
+  this->setName("NullParent");
 }
 
 
-NullParent::NullParent (Vector* absCoordinate)
+NullParent::NullParent (Vector* absCoordinate) : PNode("NullParent")
 {
   this->parent = this;
   this->mode = ALL;
   this->absCoordinate = *absCoordinate;
+  this->setName("NullParent");
 }
 
@@ -58,5 +61,5 @@
 NullParent::~NullParent () 
 {
-  delete singletonRef;
+  //delete singletonRef;
   singletonRef = NULL;
 }
Index: /orxonox/trunk/src/lib/coord/p_node.cc
===================================================================
--- /orxonox/trunk/src/lib/coord/p_node.cc	(revision 3528)
+++ /orxonox/trunk/src/lib/coord/p_node.cc	(revision 3529)
@@ -40,4 +40,9 @@
   this->bAbsDirChanged = false;
   this->parent = NULL;
+
+  printf("PNode::PNode() - constructor, now adding\n");
+  NullParent* np = NullParent::getInstance();
+  np->addChild(this);
+  printf("PNode::PNode() - finished adding\n");
 }
 
@@ -63,4 +68,29 @@
 }
 
+
+/**
+   \brief this constructor is very special.
+   \param with the name of the class
+
+   this constuctor exists, because there was a little issue with a
+   PNode<->NullPointer relation. It is crutial, that this construcor
+   exists, and is never used except from the NullParent itself. If you
+   delete it, there will probably be a endless loop, because in the
+   default constcutor of PNode NullPointer is generated, and NullPointer
+   gerenates itself again and again... 
+   dont't think about it...
+   \todo patrick think about this one here...
+*/
+PNode::PNode(char* name)
+{
+  printf("PNode::PNode(char*) - start\n");
+  this->children = new tList<PNode>();
+  this->bRelCoorChanged = true;
+  this->bAbsCoorChanged = false;
+  this->bRelDirChanged = true;
+  this->bAbsDirChanged = false;
+  this->parent = NULL; 
+  printf("PNode::PNode(char*) - end\n");
+}
 
 /**
@@ -96,4 +126,5 @@
       pn = this->children->nextElement();
     } 
+  /* this deletes all children in the list */
   this->children->destroy ();
 }
@@ -280,14 +311,14 @@
 void PNode::addChild (PNode* pNode, parentingMode mode)
 {
-  if( pNode->parent == NULL )
+  if( pNode->parent != NULL )
     {
-      pNode->mode = mode;
-      pNode->parent = this;
-      this->children->add (pNode);
+      printf("PNode::addChild() - removing child from old parent \n");
+      PRINTF(2)("PNode::addChild() - reparenting node: removing it and adding it again\n");
+      pNode->parent->removeChild(pNode);
     }
-  else
-    {
-      PRINTF(1)("PNode::addChild() - this node has already been added - closed Loop MARK \n");
-    }
+  pNode->mode = mode;
+  pNode->parent = this;
+  this->children->add(pNode);
+  printf("PNode::addChild() - Parent added\n");
 }
 
@@ -358,5 +389,6 @@
 void PNode::update (float timeStamp)
 {
-  printf ("PNode::update - %s - (%f, %f, %f)\n", this->objectName, this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
+  //printf ("PNode::update - %s - (%f, %f, %f)\n", this->objectName, this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
+  // printf("%s", this->objectName);
 
       if( this->mode == MOVEMENT || this->mode == ALL)
Index: /orxonox/trunk/src/lib/coord/p_node.h
===================================================================
--- /orxonox/trunk/src/lib/coord/p_node.h	(revision 3528)
+++ /orxonox/trunk/src/lib/coord/p_node.h	(revision 3529)
@@ -23,4 +23,5 @@
 
 #include "stdincl.h"
+
 
 class PNode; /* forward decleration, so that parentEntry has access to PNode */
@@ -80,4 +81,6 @@
 
  protected:
+  PNode(char*);
+
   float timeStamp;         //!< this the timeStamp of when the abs{Coordinat, Direction} has been calculated
   char* objectName;        //!< The name of the Object
@@ -95,2 +98,3 @@
 
 #endif /* _P_NODE_H */
+ 
Index: /orxonox/trunk/src/story_entities/world.cc
===================================================================
--- /orxonox/trunk/src/story_entities/world.cc	(revision 3528)
+++ /orxonox/trunk/src/story_entities/world.cc	(revision 3529)
@@ -42,4 +42,6 @@
 {
   this->init(name, -1);
+  printf("World::World - generating Nullparent\n");
+  NullParent* np = NullParent::getInstance();
 }
 
@@ -67,5 +69,6 @@
 
   this->localCamera->destroy();
-  this->nullParent->destroy();  
+  this->nullParent->destroy();
+  delete this->nullParent;
   //delete this->skySphere;
 
@@ -252,6 +255,4 @@
 	    this->nullParent->setName ("NullParent");
 
-
-
 	    // create a player
 	    WorldEntity* myPlayer = new Player();
@@ -804,9 +805,6 @@
 void World::spawn(WorldEntity* entity)
 {
-  if( this->nullParent != NULL && entity->parent == NULL)
-    this->nullParent->addChild (entity);
-
+  this->nullParent->addChild (entity);
   this->entities->add (entity);
-
   entity->postSpawn ();
 }
@@ -821,11 +819,9 @@
 void World::spawn(WorldEntity* entity, Vector* absCoor, Quaternion* absDir)
 {
+  this->nullParent->addChild (entity);
+  this->entities->add (entity);
+
   entity->setAbsCoor (absCoor);
   entity->setAbsDir (absDir);
-  
-  if( this->nullParent != NULL && entity->parent == NULL)
-    this->nullParent->addChild (entity);
-
-  this->entities->add (entity);
 
   entity->postSpawn ();
@@ -845,5 +841,5 @@
 {
 
-  if( parentNode != NULL && entity->parent == NULL)
+  if( parentNode != NULL)
     {
       parentNode->addChild (entity);
