Index: /trunk/src/lib/coord/p_node.cc
===================================================================
--- /trunk/src/lib/coord/p_node.cc	(revision 5117)
+++ /trunk/src/lib/coord/p_node.cc	(revision 5118)
@@ -598,7 +598,13 @@
       PRINTF(4)("NullParent::update - (%f, %f, %f)\n", this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
       if (this->bRelCoorChanged)
+      {
+        this->prevRelCoordinate = this->relCoordinate;
         this->absCoordinate = this->relCoordinate;
+      }
       if (this->bRelDirChanged)
+      {
+        this->prevRelDirection = this->relDirection;
         this->absDirection = this->getAbsDir () * this->relDirection;
+      }
     }
 
Index: /trunk/src/lib/graphics/render2D/element_2d.cc
===================================================================
--- /trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5117)
+++ /trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5118)
@@ -618,5 +618,5 @@
 
 
-    if( this->parentMode & PNODE_LOCAL_ROTATE && this->bRelDirChanged)
+    if( this->parentMode & E2D_PARENT_LOCAL_ROTATE && this->bRelDirChanged)
     {
       /* update the current absDirection - remember * means rotation around sth.*/
@@ -677,7 +677,13 @@
     PRINTF(5)("Element2D::update - (%f, %f, %f)\n", this->absCoordinate.x, this->absCoordinate.y, this->absCoordinate.z);
     if (this->bRelCoorChanged)
+    {
+      this->prevRelCoordinate = this->relCoordinate;
       this->absCoordinate = this->relCoordinate;
+    }
     if (this->bRelDirChanged)
+    {
+      this->prevRelDirection = this->relDirection;
       this->absDirection = this->getAbsDir2D() * this->relDirection;
+    }
   }
 
Index: /trunk/src/lib/util/list.h
===================================================================
--- /trunk/src/lib/util/list.h	(revision 5117)
+++ /trunk/src/lib/util/list.h	(revision 5118)
@@ -333,5 +333,7 @@
 
     T* firstElement();
+    T* lastElement();
     T* nextElement();
+    T* prevElement();
     T* seekElement(T* element);
     T* iteratorElement(const tIterator<T>* iterator);
@@ -375,5 +377,4 @@
     inline tIterator<T>::~tIterator ()
 {
-  this->currentEl = NULL;
 }
 
@@ -382,8 +383,18 @@
 {
   this->currentEl = this->list->first;
-  if (this->currentEl == NULL)
-    return NULL;
-  else
+  if (this->currentEl != NULL)
     return this->currentEl->curr;
+  else
+    return NULL;
+}
+
+template<class T>
+    inline T* tIterator<T>::lastElement ()
+{
+  this->currentEl = this->list->last;
+  if (this->currentEl != NULL)
+    return this->currentEl->curr;
+  else
+    return NULL;
 }
 
@@ -405,4 +416,22 @@
     return NULL;
 }
+
+/**
+ *  use it to iterate backwards through the list
+ * @returns next list element
+ */
+template<class T>
+    inline T* tIterator<T>::prevElement ()
+{
+  if( this->currentEl == NULL)
+    return NULL;
+
+  this->currentEl = this->currentEl->prev;
+  if (this->currentEl != NULL)
+    return this->currentEl->curr;
+  else
+    return NULL;
+}
+
 
 /**
Index: /trunk/src/util/shell.cc
===================================================================
--- /trunk/src/util/shell.cc	(revision 5117)
+++ /trunk/src/util/shell.cc	(revision 5118)
@@ -45,4 +45,5 @@
   this->bActive = false;
   this->buffer = new tList<char>;
+  this->bufferIterator = this->buffer->getIterator();
 
   this->textSize = 15;
@@ -53,5 +54,4 @@
   this->setBufferSize(100);
   this->bufferDisplaySize = 10;
-  this->setBufferDisplaySize(10);
   this->setAbsCoor2D(3, -400);
   this->delayed = 0;
@@ -90,12 +90,11 @@
 
   // delete all the Chars in the Buffers
-  tIterator<char>* charIterator = this->buffer->getIterator();
-  char* charElem = charIterator->firstElement();
+  char* charElem = this->bufferIterator->firstElement();
   while (charElem != NULL)
   {
     delete charElem;
-    charElem = charIterator->nextElement();
-  }
-  delete charIterator;
+    charElem = this->bufferIterator->nextElement();
+  }
+  delete this->bufferIterator;
 
 //  if (this->completionList != NULL)
@@ -114,4 +113,8 @@
   EventHandler::getInstance()->setState(ES_SHELL);
   this->setRelCoorSoft2D(0, 0, 1, 5);
+
+  this->bufferIterator->lastElement();
+  for (int i = 0; i < this->bufferDisplaySize; i++)
+    this->bufferText[i]->setText(this->bufferIterator->prevElement());
 }
 
@@ -124,4 +127,5 @@
   EventHandler::getInstance()->setState(ES_GAME);
   this->setRelCoorSoft2D(0, -400, 1, 5);
+
 }
 
@@ -249,25 +253,37 @@
    }
 
-   if (this->bActive && likely(bufferText != NULL))
+   if (this->bActive)
    {
-     Text* lastText = this->bufferText[this->bufferDisplaySize-1];
-     Vector firstCoord = this->bufferText[0]->getRelCoorSoft2D();
-
-     Text* swapText;
-     Text* moveText = this->bufferText[0];
-     this->bufferText[0]->setRelCoorSoft2D(this->bufferText[1]->getRelCoorSoft2D(), 5);
-     for (unsigned int i = 1; i < this->bufferDisplaySize; i++)
-     {
-       if ( i < this->bufferDisplaySize-1)
-         this->bufferText[i]->setRelCoorSoft2D(this->bufferText[i+1]->getRelCoorSoft2D(),5);
-       swapText = this->bufferText[i];
-       this->bufferText[i] = moveText;
-       moveText = swapText;
-     }
-     lastText->setRelCoor2D(firstCoord);
-     this->bufferText[0] = lastText;
-
-     this->bufferText[0]->setText(newLine);
+     this->printToDisplayBuffer(newLine);
    }
+}
+
+/**
+ * prints out some text to the input-buffers
+ * @param text the text to output.
+ */
+void Shell::printToDisplayBuffer(const char* text)
+{
+  if(likely(bufferText != NULL))
+  {
+    Text* lastText = this->bufferText[this->bufferDisplaySize-1];
+    Vector firstCoord = this->bufferText[0]->getRelCoorSoft2D();
+
+    Text* swapText;
+    Text* moveText = this->bufferText[0];
+    this->bufferText[0]->setRelCoorSoft2D(this->bufferText[1]->getRelCoorSoft2D(), 5);
+    for (unsigned int i = 1; i < this->bufferDisplaySize; i++)
+    {
+      if ( i < this->bufferDisplaySize-1)
+        this->bufferText[i]->setRelCoorSoft2D(this->bufferText[i+1]->getRelCoorSoft2D(),5);
+      swapText = this->bufferText[i];
+      this  ->bufferText[i] = moveText;
+      moveText = swapText;
+    }
+    lastText->setRelCoor2D(firstCoord);
+    this->bufferText[0] = lastText;
+
+    this->bufferText[0]->setText(text);
+  }
 }
 
Index: /trunk/src/util/shell.h
===================================================================
--- /trunk/src/util/shell.h	(revision 5117)
+++ /trunk/src/util/shell.h	(revision 5118)
@@ -15,4 +15,5 @@
 class Text;
 template<class T> class tList;
+template<class T> class tIterator;
 
 //! A class that is able to redirect all output to a openGL-Shell, and that one can use to input some commands
@@ -48,4 +49,5 @@
     static bool addBufferLineStatic(const char* line, ...);
     void addBufferLine(const char* line, va_list arg);
+    void printToDisplayBuffer(const char* text);
     void moveBuffer(int lineCount);
     const char* getBufferLine(unsigned int lineNumber);
@@ -96,4 +98,5 @@
 
     tList<char>*           buffer;                 //!< A list of stored char-arrays(strings) to store the history
+    tIterator<char>*       bufferIterator;         //!< An iterator for the Shells main buffer.
 
     Text**                 bufferText;             //!< A list of stored bufferTexts for the display of the buffer
