Index: /orxonox/branches/parenting/src/list.h
===================================================================
--- /orxonox/branches/parenting/src/list.h	(revision 3247)
+++ /orxonox/branches/parenting/src/list.h	(revision 3248)
@@ -78,6 +78,6 @@
   
 
-  void add(WorldEntity* entity);
-  void remove(WorldEntity* entity);
+  void add(T* entity);
+  void remove(T* entity);
   void destroy();
   T* firstElement();
@@ -104,5 +104,5 @@
 
 template<class T>
-void tList<T>::add(WorldEntity* entity)
+void tList<T>::add(T* entity)
 {
   listElement* el = new listElement;
@@ -120,5 +120,5 @@
 
 template<class T>
-void tList<T>::remove(WorldEntity* entity)
+void tList<T>::remove(T* entity)
 {
   this->currentEl = this->first;
Index: /orxonox/branches/parenting/src/p_node.cc
===================================================================
--- /orxonox/branches/parenting/src/p_node.cc	(revision 3247)
+++ /orxonox/branches/parenting/src/p_node.cc	(revision 3248)
@@ -28,5 +28,8 @@
    \todo this constructor is not jet implemented - do it
 */
-PNode::PNode () {}
+PNode::PNode () 
+{
+  this->children = new tList<PNode>();
+}
 
 
@@ -36,5 +39,9 @@
    \todo this deconstructor is not jet implemented - do it
 */
-PNode::~PNode () {}
+PNode::~PNode () 
+{
+  this->children->destroy();
+  delete this->children;
+}
 
 
@@ -44,5 +51,8 @@
 */
 Vector PNode::getRelCoor ()
-{}
+{
+  Vector r = this->relCoordinate; /* return a copy, so it can't be modified */
+  return r;
+}
 
 
@@ -80,4 +90,29 @@
 
 /**
+   \brief shift coordinate (abs and rel)
+   \param shift vector
+
+   this function shifts the current coordinates about the vector shift. this is
+   usefull because from some place else you can:
+   PNode* someNode = ...;
+   Vector objectMovement = calculateShift();
+   someNode->shiftCoor(objectMovement);
+
+   elsewhere you would have to:
+   PNode* someNode = ...;
+   Vector objectMovement = calculateShift();
+   Vector currentCoor = someNode->getRelCoor();
+   Vector newCoor = currentCoor + objectMovement;
+   someNode->setRelCoor(newCoor);
+   
+   yea right... shorter...
+
+*/
+void PNode::shiftCoor (Vector shift)
+{}
+
+
+
+/**
    \brief get relative direction
    \returns relative direction to its parent
@@ -120,4 +155,29 @@
 
 /**
+   \brief shift coordinate (abs and rel)
+   \param shift vector
+
+   this function shifts the current coordinates about the vector shift. this is
+   usefull because from some place else you can:
+   PNode* someNode = ...;
+   Quaternion objectMovement = calculateShift();
+   someNode->shiftCoor(objectMovement);
+
+   elsewhere you would have to:
+   PNode* someNode = ...;
+   Quaternion objectMovement = calculateShift();
+   Quaternion currentCoor = someNode->getRelCoor();
+   Quaternion newCoor = currentCoor + objectMovement;
+   someNode->setRelCoor(newCoor);
+   
+   yea right... shorter...
+
+*/
+void PNode::shiftDir (Quaternion shift)
+{}
+
+
+
+/**
    \brief adds a child and makes this node to a parent
    \param child reference
@@ -126,12 +186,51 @@
 */
 void PNode::addChild (PNode* pNode)
-{}
-
-
+{
+  this->addChild(pNode, DEFAULT_MODE);
+}
+
+
+/**
+   \brief adds a child and makes this node to a parent
+   \param child reference
+   \param on which changes the child should also change ist state
+
+   use this to add a child to this node.
+*/
+void PNode::addChild (PNode* pNode, parentingMode mode)
+{
+  pNode->mode = mode;
+  this->children->add (pNode);
+}
+
+
+/**
+   /brief removes a child from the node
+*/
 void PNode::removeChild (PNode* pNode)
-{}
-
-
+{
+  this->children->remove (pNode);
+}
+
+
+/**
+   \brief sets the parent of this PNode
+*/
 void PNode::setParent (PNode* parent)
-{}
-
+{
+  this->parent = parent;
+}
+
+
+/**
+   \brief updates the absCoordinate/absDirection
+
+   this is used to go through the parent-tree to update all the absolute coordinates
+   and directions. this update should be done by the engine, so you don't have to 
+   worry, normaly...
+*/
+void PNode::update()
+{
+  
+}
+
Index: /orxonox/branches/parenting/src/p_node.h
===================================================================
--- /orxonox/branches/parenting/src/p_node.h	(revision 3247)
+++ /orxonox/branches/parenting/src/p_node.h	(revision 3248)
@@ -24,5 +24,8 @@
 #include "stdincl.h"
 
-typedef enum parentingMode {};
+class PNode; /* forward decleration, so that parentEntry has access to PNode */
+
+typedef enum parentingMode {MOVEMENT = 0, ROTATION, ALL};
+#define DEFAULT_MODE ALL
 
 class PNode {
@@ -32,8 +35,11 @@
   ~PNode ();
 
+  parentingMode mode;
+
   Vector getRelCoor ();
   void setRelCoor (Vector relCoord);
   Vector getAbsCoor ();
   void setAbsCoor (Vector absCoord);
+  void shiftCoor (Vector shift);
 
   Quaternion getRelDir ();
@@ -41,8 +47,11 @@
   Quaternion getAbsDir ();
   void setAbsDir (Quaternion absDir);
+  void shiftDir (Quaternion shift);
 
   void addChild (PNode* pNode);
+  void addChild (PNode* pNode, parentingMode mode);
   void removeChild (PNode* pNode);
   void setParent (PNode* parent);
+  void update ();
 
  private:
