Index: trunk/src/lib/coord/p_node.cc
===================================================================
--- trunk/src/lib/coord/p_node.cc	(revision 5750)
+++ trunk/src/lib/coord/p_node.cc	(revision 5769)
@@ -496,5 +496,5 @@
   if (child != NULL)
   {
-   child->remove();
+   child->removeNode();
 //   this->children->remove(child);
 //   child->parent = NULL;
@@ -507,5 +507,5 @@
  * this can be the case, if an entity in the world is being destroyed.
  */
-void PNode::remove()
+void PNode::removeNode()
 {
   tIterator<PNode>* iterator = this->children->getIterator();
@@ -513,5 +513,5 @@
 
   while( pn != NULL)
-    {
+  {
       NullParent::getInstance()->addChild(pn);
       pn = iterator->nextElement();
@@ -609,5 +609,5 @@
  * worry, normaly...
  */
-void PNode::update (float dt)
+void PNode::updateNode (float dt)
 {
   if( likely(this->parent != NULL))
@@ -698,5 +698,5 @@
           pn->parentDirChanged ();
 
-        pn->update(dt);
+        pn->updateNode(dt);
         pn = iterator->nextElement();
       }
@@ -708,4 +708,19 @@
 }
 
+
+void PNode::countChildNodes(int& nodes) const
+{
+  nodes++;
+  tIterator<PNode>* it = this->children->getIterator();
+  PNode* node = it->firstElement();
+  while(node != NULL)
+  {
+    node->countChildNodes(nodes);
+    node = it->nextElement();
+  }
+
+}
+
+
 /**
  *  displays some information about this pNode
@@ -714,5 +729,5 @@
  * @param level !! INTERNAL !! The n-th level of the Node we draw (this is internal and only for nice output).
  */
-void PNode::debug(unsigned int depth, unsigned int level) const
+void PNode::debugNode(unsigned int depth, unsigned int level) const
 {
   for (unsigned int i = 0; i < level; i++)
@@ -722,5 +737,9 @@
   else
     PRINT(0)(" -");
-  PRINT(0)("PNode(%s::%s) - absCoord: (%0.2f, %0.2f, %0.2f), relCoord(%0.2f, %0.2f, %0.2f), direction(%0.2f, %0.2f, %0.2f) - %s\n",
+
+  int childNodeCount = 0;
+  this->countChildNodes(childNodeCount);
+
+  PRINT(0)("PNode(%s::%s) - absCoord: (%0.2f, %0.2f, %0.2f), relCoord(%0.2f, %0.2f, %0.2f), direction(%0.2f, %0.2f, %0.2f) - %s - %d childs\n",
            this->getClassName(),
            this->getName(),
@@ -734,5 +753,6 @@
            this->getAbsDirV().y,
            this->getAbsDirV().z,
-           this->parentingModeToChar(parentMode));
+           this->parentingModeToChar(parentMode),
+           childNodeCount);
   if (depth >= 2 || depth == 0)
   {
@@ -743,7 +763,7 @@
     {
       if (depth == 0)
-        pn->debug(0, level + 1);
+        pn->debugNode(0, level + 1);
       else
-        pn->debug(depth - 1, level +1);
+        pn->debugNode(depth - 1, level +1);
       pn = iterator->nextElement();
     }
Index: trunk/src/lib/coord/p_node.h
===================================================================
--- trunk/src/lib/coord/p_node.h	(revision 5750)
+++ trunk/src/lib/coord/p_node.h	(revision 5769)
@@ -30,16 +30,29 @@
 typedef enum
 {
-  PNODE_LOCAL_ROTATE          =   1,    //!< Rotates all the children around their centers.
-  PNODE_ROTATE_MOVEMENT       =   2,    //!< Moves all the children around the center of their parent, without the rotation around their own centers.
+  // PARENTAL FOLLOWING
+  PNODE_LOCAL_ROTATE                   = 0x00000001,    //!< Rotates all the children around their centers.
+  PNODE_ROTATE_MOVEMENT                = 0x00000002,    //!< Moves all the children around the center of their parent, without the rotation around their own centers.
 
-  PNODE_MOVEMENT              =   4,    //!< Moves all children along with the parent.
+  PNODE_MOVEMENT                       = 0x00000004,    //!< Moves all children along with the parent.
 // special linkage modes
-  PNODE_ALL                   =   3,    //!< Moves all children around the center of their parent, and also rotates their centers
-  PNODE_ROTATE_AND_MOVE       =   5     //!< Rotates all children around their axis, and moves them as the Parent Moves, but does not rotate around the center of their parent.
+  PNODE_ALL                            = 0x00000003,    //!< Moves all children around the center of their parent, and also rotates their centers
+  PNODE_ROTATE_AND_MOVE                = 0x00000005,    //!< Rotates all children around their axis, and moves them as the Parent Moves, but does not rotate around the center of their parent.
+
+
+  PNODE_INACTIVE_NODE                  = 0x00000010,    //!< If the node is Active (if not, it and its child wont be updated).
+
+  // REPARENTING
+  PNODE_REPARENT_TO_NULLPARENT         = 0x00000100,
+  PNODE_REPARENT_KEEP_POSITION         = 0x00000200,
+
+
+  // DELETION
+  PNODE_PROHIBIT_CHILD_DELETE          = 0x00010000,
+  PNODE_PROHIBIT_DELETE_WITH_PARENT    = 0x00020000,
 
 } PARENT_MODE;
 
 //! The default mode of the translation-binding.
-#define PNODE_PARENT_MODE_DEFAULT PNODE_ALL
+#define PNODE_PARENT_MODE_DEFAULT PNODE_ALL | PNODE_REPARENT_KEEP_POSITION
 
 
@@ -101,5 +114,5 @@
   void addChild (const char* childName);
   void removeChild (PNode* child);
-  void remove();
+  void removeNode();
 
   void setParent (PNode* parent);
@@ -108,5 +121,5 @@
   inline PNode* getParent () const { return this->parent; };
   /** @returns the List of Children of this PNode */
-  inline const tList<PNode>* getChildren() const { return this->children; };
+ // inline const tList<PNode>* getChildren() const { return this->children; };
 
   void setParentSoft(PNode* parentNode, float bias = 1.0);
@@ -119,7 +132,8 @@
   int getParentMode() const { return this->parentMode; };
 
-  void update (float dt);
+  void updateNode (float dt);
 
-  void debug (unsigned int depth = 1, unsigned int level = 0) const;
+  void countChildNodes(int& nodes) const;
+  void debugNode (unsigned int depth = 1, unsigned int level = 0) const;
   void debugDraw(unsigned int depth = 1, float size = 1.0, const Vector& color = Vector(1, 0, 0), unsigned int level = 0) const;
 
