Index: /trunk/src/lib/coord/p_node.cc
===================================================================
--- /trunk/src/lib/coord/p_node.cc	(revision 7125)
+++ /trunk/src/lib/coord/p_node.cc	(revision 7126)
@@ -80,14 +80,17 @@
 PNode::~PNode ()
 {
-  printf("delete PNode: %s::%s\n", this->getClassName(), this->getName());
+  PRINTF(4)("delete %s::%s\n", this->getClassName(), this->getName());
   // remove the Node, delete it's children (if required).
   std::list<PNode*>::iterator tmp = this->children.begin();
   std::list<PNode*>::iterator deleteNode;
+  unsigned int size;
   while(!this->children.empty())
-    while (tmp != this->children.end())
+  {
+    tmp = this->children.begin();
+    //while (tmp != this->children.end())
     {
       deleteNode = tmp;
       tmp++;
-      //      printf("TEST::%s(%s) %s\n", (*deleteNode)->getName(), (*deleteNode)->getClassName(), this->getName());
+      size = this->children.size();
       if ((this->parentMode & PNODE_PROHIBIT_CHILD_DELETE) ||
           ((*deleteNode)->parentMode & PNODE_PROHIBIT_DELETE_WITH_PARENT))
@@ -95,5 +98,5 @@
         if (this == PNode::nullParent && (*deleteNode)->parentMode & PNODE_REPARENT_TO_NULL)
         {
-          printf("%s::%s deletes PNode: %s::%s\n",
+          PRINTF(4)("%s::%s deletes %s::%s\n",
                  this->getClassName(), this->getName(),
                  (*deleteNode)->getClassName(), (*deleteNode)->getName());
@@ -102,8 +105,7 @@
         else
         {
-          printf("%s::%s reparents PNode: %s::%s\n",
+          PRINTF(4)("%s::%s reparents %s::%s\n",
                  this->getClassName(), this->getName(),
                  (*deleteNode)->getClassName(), (*deleteNode)->getName());
-
           (*deleteNode)->reparent();
         }
@@ -111,10 +113,12 @@
       else
       {
-        printf("%s::%s deletes PNode: %s::%s\n",
+        PRINTF(4)("%s::%s deletes PNode: %s::%s\n",
                this->getClassName(), this->getName(),
                (*deleteNode)->getClassName(), (*deleteNode)->getName());
         delete (*deleteNode);
       }
+      //if (size <= this->children.size()) break;
     }
+  }
 
   if (this->parent != NULL)
Index: /trunk/src/orxonox.cc
===================================================================
--- /trunk/src/orxonox.cc	(revision 7125)
+++ /trunk/src/orxonox.cc	(revision 7126)
@@ -120,5 +120,5 @@
 
   SDL_QuitSubSystem(SDL_INIT_TIMER);
-  ClassList::debug(3);
+  ClassList::debug();
 
   PRINT(3)
Index: /trunk/src/story_entities/game_world_data.cc
===================================================================
--- /trunk/src/story_entities/game_world_data.cc	(revision 7125)
+++ /trunk/src/story_entities/game_world_data.cc	(revision 7126)
@@ -252,5 +252,4 @@
   FastFactory::flushAll(true);
   GraphicsEngine::getInstance()->displayFPS(false);
-  State::setPlayer(NULL);
   // erease everything that is left.
   // delete PNode::getNullParent(); // not needed as this is also done in the next step (and also much cleaner)
@@ -261,14 +260,13 @@
     while (!nodeList->empty())
   {
-    ClassList::debug( 3, CL_PARENT_NODE);
-    PNode::getNullParent()->debugNode( 1);
-
-/*    printf("%s::%s\n", nodeList->front()->getClassName(), nodeList->front()->getName());*/
+//    ClassList::debug( 3, CL_PARENT_NODE);
+//    PNode::getNullParent()->debugNode(0);
+//    printf("%s::%s\n", nodeList->front()->getClassName(), nodeList->front()->getName());
     delete nodeList->front();
-    printf("OK\n");
   }
   /* remove the player object */
   if( this->localPlayer)
     delete this->localPlayer;
+  State::setPlayer(NULL);
 
   nodeList = ClassList::getList(CL_GRAPHICS_EFFECT);
Index: /trunk/src/world_entities/environments/water.cc
===================================================================
--- /trunk/src/world_entities/environments/water.cc	(revision 7125)
+++ /trunk/src/world_entities/environments/water.cc	(revision 7126)
@@ -63,5 +63,4 @@
 Water::~Water()
 {
-  delete this->grid;
 }
 
Index: /trunk/src/world_entities/space_ships/turbine_hover.cc
===================================================================
--- /trunk/src/world_entities/space_ships/turbine_hover.cc	(revision 7125)
+++ /trunk/src/world_entities/space_ships/turbine_hover.cc	(revision 7126)
@@ -80,11 +80,11 @@
   Weapon* wpLeft = new TestGun(1);
   wpLeft->setName("testGun Left");
-  Weapon* cannon = dynamic_cast<Weapon*>(Factory::fabricate(CL_HYPERBLASTER));
-
-  cannon->setName("BFG");
+  //Weapon* cannon = dynamic_cast<Weapon*>(Factory::fabricate(CL_HYPERBLASTER));
+
+  //  cannon->setName("BFG");
 
   this->addWeapon(wpLeft, 1, 0);
   this->addWeapon(wpRight,1 ,1);
-  this->addWeapon(cannon, 0, 2);
+  //this->addWeapon(cannon, 0, 2);
 
   this->getWeaponManager()->changeWeaponConfig(1);
Index: /trunk/src/world_entities/weapons/weapon.cc
===================================================================
--- /trunk/src/world_entities/weapons/weapon.cc	(revision 7125)
+++ /trunk/src/world_entities/weapons/weapon.cc	(revision 7126)
@@ -29,5 +29,4 @@
 #include "state.h"
 #include "animation3d.h"
-#include "vector.h"
 
 #include "sound_source.h"
@@ -86,4 +85,6 @@
   this->soundSource = new SoundSource(this);       //< Every Weapon has exacty one SoundSource.
   this->emissionPoint.setParent(this);             //< One EmissionPoint, that is a PNode connected to the weapon. You can set this to the exitting point of the Projectiles
+  this->emissionPoint.setName("EmissionPoint");
+  this->emissionPoint.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
 
   this->defaultTarget = NULL;                      //< Nothing is Targeted by default.
