Index: trunk/src/lib/coord/p_node.cc
===================================================================
--- trunk/src/lib/coord/p_node.cc	(revision 5082)
+++ trunk/src/lib/coord/p_node.cc	(revision 5083)
@@ -578,5 +578,5 @@
       {
         /* update the current absCoordinate */
-        this->prevRelDirection = this->relDirection;
+        this->prevRelCoordinate = this->relCoordinate;
         this->absCoordinate = this->parent->getAbsCoor() + parent->getAbsDir().apply(this->relCoordinate);
       }
Index: trunk/src/lib/graphics/render2D/element_2d.cc
===================================================================
--- trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5082)
+++ trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5083)
@@ -235,5 +235,5 @@
 }
 
-void Element2D::shiftCoor (const Vector& shift)
+void Element2D::shiftCoor2D (const Vector& shift)
 {
   this->relCoordinate += shift;
@@ -268,5 +268,5 @@
 }
 
-void Element2D::shiftDir (float shiftDir)
+void Element2D::shiftDir2D (float shiftDir)
 {
   this->relDirection = this->relDirection + shiftDir;
@@ -378,5 +378,97 @@
 void Element2D::update2D (float dt)
 {
-
+  if( likely(this->parent != NULL))
+  {
+      // movement for nodes with smoothMove enabled
+    if (unlikely(this->toCoordinate != NULL))
+    {
+      Vector moveVect = (*this->toCoordinate - this->getRelCoor2D()) *dt*bias;
+
+      if (likely(moveVect.len() >= .001))//PNODE_ITERATION_DELTA))
+      {
+        this->shiftCoor2D(moveVect);
+      }
+      else
+      {
+        delete this->toCoordinate;
+        this->toCoordinate = NULL;
+        PRINTF(5)("SmoothMove of %s finished\n", this->getName());
+      }
+    }
+    if (unlikely(this->toDirection != NULL))
+    {
+      float rotFlot = (*this->toDirection - this->getRelDir2D()) *dt*bias;
+      if (likely(rotFlot >= .001))//PNODE_ITERATION_DELTA))
+      {
+        this->shiftDir2D(rotFlot);
+      }
+      else
+      {
+        delete this->toDirection;
+        this->toDirection = NULL;
+        PRINTF(5)("SmoothRotate of %s finished\n", this->getName());
+      }
+    }
+
+    // MAIN UPDATE /////////////////////////////////////
+    this->lastAbsCoordinate = this->absCoordinate;
+
+    PRINTF(5)("PNode::update - %s - (%f, %f, %f)\n", this->getName(), this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
+
+
+    if( this->parentMode & PNODE_LOCAL_ROTATE && this->bRelDirChanged)
+    {
+      /* update the current absDirection - remember * means rotation around sth.*/
+      this->prevRelCoordinate = this->relCoordinate;
+      this->absDirection = this->relDirection + parent->getAbsDir2D();;
+    }
+
+    if(likely(this->parentMode & PNODE_MOVEMENT))
+    {
+      /* update the current absCoordinate */
+      this->prevRelCoordinate = this->relCoordinate;
+      this->absCoordinate = this->parent->getAbsCoor2D() + this->relCoordinate;
+    }
+    else if( this->parentMode & PNODE_ROTATE_MOVEMENT)
+    {
+      /* update the current absCoordinate */
+      this->prevRelCoordinate = this->relCoordinate;
+      //this->absCoordinate = this->parent->getAbsCoor2D();
+      this->absCoordinate.x = this->parent->getAbsCoor2D().x + (this->relCoordinate.x*cos(this->parent->getAbsDir2D()) - this->relCoordinate.y * sin(this->parent->getAbsDir2D()));
+      this->absCoordinate.y = this->parent->getAbsCoor2D().y + (this->relCoordinate.x*sin(this->parent->getAbsDir2D()) + this->relCoordinate.y * cos(this->parent->getAbsDir2D()));
+
+    }
+    /////////////////////////////////////////////////
+  }
+  else
+  {
+    PRINTF(4)("NullParent::update - (%f, %f, %f)\n", this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
+    if (this->bRelCoorChanged)
+      this->absCoordinate = this->relCoordinate;
+    if (this->bRelDirChanged)
+      this->absDirection = this->getAbsDir2D() * this->relDirection;
+  }
+
+  if(this->children->getSize() > 0)
+  {
+    tIterator<Element2D>* iterator = this->children->getIterator();
+    Element2D* pn = iterator->nextElement();
+    while( pn != NULL)
+    {
+      /* if this node has changed, make sure, that all children are updated also */
+      if( likely(this->bRelCoorChanged))
+        pn->parentCoorChanged ();
+      if( likely(this->bRelDirChanged))
+        pn->parentDirChanged ();
+
+      pn->update2D(dt);
+          //pn = this->children->nextElement();
+      pn = iterator->nextElement();
+    }
+    delete iterator;
+  }
+  this->velocity = (this->absCoordinate - this->lastAbsCoordinate) / dt;
+  this->bRelCoorChanged = false;
+  this->bRelDirChanged = false;
 }
 
Index: trunk/src/lib/graphics/render2D/element_2d.h
===================================================================
--- trunk/src/lib/graphics/render2D/element_2d.h	(revision 5082)
+++ trunk/src/lib/graphics/render2D/element_2d.h	(revision 5083)
@@ -110,5 +110,5 @@
     /** @returns the absolute position */
     inline const Vector& getAbsCoor2D () const { return this->absCoordinate; };
-    void shiftCoor (const Vector& shift);
+    void shiftCoor2D (const Vector& shift);
 
     void setRelDir2D (float relDir);
@@ -119,5 +119,5 @@
     /** @returns the absolute Direction */
     inline float getAbsDir2D () const { return this->absDirection; };
-    void shiftDir (float shiftDir);
+    void shiftDir2D (float shiftDir);
 
     /** @returns the Speed of the Node */
Index: trunk/src/util/shell.cc
===================================================================
--- trunk/src/util/shell.cc	(revision 5082)
+++ trunk/src/util/shell.cc	(revision 5083)
@@ -42,5 +42,5 @@
   this->bufferText = NULL;
   this->setBufferSize(100);
-  this->setBufferDisplaySize(8);
+  this->setBufferDisplaySize(10);
 
   this->inputLineText = TextEngine::getInstance()->createText("fonts/earth.ttf", 10, TEXT_DYNAMIC, 255, 0, 0);
