Index: /trunk/src/lib/coord/p_node.cc
===================================================================
--- /trunk/src/lib/coord/p_node.cc	(revision 5371)
+++ /trunk/src/lib/coord/p_node.cc	(revision 5372)
@@ -55,5 +55,6 @@
   this->loadParams(root);
 
-  NullParent::getInstance()->addChild(this);
+  if (this->parent == NULL)
+    NullParent::getInstance()->addChild(this);
 }
 
Index: /trunk/src/lib/gui/gl_gui/glgui_widget.h
===================================================================
--- /trunk/src/lib/gui/gl_gui/glgui_widget.h	(revision 5371)
+++ /trunk/src/lib/gui/gl_gui/glgui_widget.h	(revision 5372)
@@ -39,8 +39,4 @@
     bool                  focusable;        //!< If it can receive focus.
     bool                  clickable;        //!< if it can be clicked upon.
-
-
-
-
 };
 
Index: /trunk/src/lib/shell/shell.cc
===================================================================
--- /trunk/src/lib/shell/shell.cc	(revision 5371)
+++ /trunk/src/lib/shell/shell.cc	(revision 5372)
@@ -25,4 +25,5 @@
 #include "list.h"
 #include "graphics_engine.h"
+#include "material.h"
 #include "event_handler.h"
 #include "debug.h"
@@ -61,4 +62,14 @@
   EventHandler::getInstance()->subscribe(this, ES_SHELL, SDLK_PAGEDOWN);
 
+  // BUFFER
+  this->bufferText = NULL;
+  this->bufferDisplaySize = 10;
+  this->bufferOffset = 0;
+  this->bufferIterator = ShellBuffer::getInstance()->getBuffer()->getIterator();
+
+  // INPUT LINE
+  this->shellInput = new ShellInput;
+
+  this->backgroundMaterial = new Material;
   // Element2D and generals
   this->setAbsCoor2D(3, -400);
@@ -69,15 +80,8 @@
   strcpy(this->fontFile, SHELL_DEFAULT_FONT);
 
-  // BUFFER
-  this->bufferText = NULL;
-  this->bufferDisplaySize = 10;
-  this->bufferOffset = 0;
-  this->bufferIterator = ShellBuffer::getInstance()->getBuffer()->getIterator();
-
-  // INPUT LINE
-  this->shellInput = new ShellInput;
-  //this->commandList = new tList<ShellCommand>;
 
   this->rebuildText();
+  this->setTextColor(SHELL_DEFAULT_TEXT_COLOR);
+  this->setBackgroundColor(SHELL_DEFAULT_BACKGROUND_COLOR);
 
   // register the shell at the ShellBuffer
@@ -100,4 +104,5 @@
   // delete the inputLine
   delete this->shellInput;
+  delete this->backgroundMaterial;
 }
 
@@ -183,6 +188,56 @@
   this->textSize = textSize;
   this->lineSpacing = lineSpacing;
-  this->shellInput->setSize(this->textSize);
-  this->shellInput->setRelCoor2D(5, (this->textSize + this->lineSpacing)*this->bufferDisplaySize + this->textSize);
+  this->resetValues();
+}
+
+/**
+ * sets the color of the Font.
+ * @param r: red
+ * @param g: green
+ * @param b: blue
+ * @param a: alpha-value.
+ */
+void Shell::setTextColor(float r, float g, float b, float a)
+{
+  this->textColor[0] = r;
+  this->textColor[1] = g;
+  this->textColor[2] = b;
+  this->textColor[3] = a;
+
+  this->resetValues();
+}
+
+
+/**
+ * sets the color of the Backgrond.
+ * @param r: red
+ * @param g: green
+ * @param b: blue
+ * @param a: alpha-value.
+ */
+void Shell::setBackgroundColor(float r, float g, float b, float a)
+{
+  this->backgroundMaterial->setDiffuse(r, g, b);
+  this->backgroundColor[0] = r;
+  this->backgroundColor[1] = g;
+  this->backgroundColor[2] = b;
+  this->backgroundColor[3] = a;
+  this->backgroundMaterial->setTransparency(a);
+}
+
+/**
+ * resets the Values of all visible shell's commandos to the Shell's stored values
+ *
+ * this functions synchronizes the stored Data with the visible one.
+ */
+void Shell::resetValues()
+{
+  if (this->shellInput != NULL)
+  {
+    this->shellInput->setSize(this->textSize);
+    this->shellInput->setColor(this->textColor[0], this->textColor[1], this->textColor[2]);
+    this->shellInput->setBlending(this->textColor[3]);
+    this->shellInput->setRelCoor2D(5, (this->textSize + this->lineSpacing)*this->bufferDisplaySize + this->textSize);
+  }
 
   if (this->bufferText != NULL)
@@ -193,5 +248,7 @@
       {
         this->bufferText[i]->setSize(this->textSize);
-        this->bufferText[i]->setRelCoorSoft2D(calculateLinePosition(i));
+        this->bufferText[i]->setColor(this->textColor[0], this->textColor[1], this->textColor[2]);
+        this->bufferText[i]->setBlending(this->textColor[3]);
+        this->bufferText[i]->setRelCoor2D(calculateLinePosition(i));
       }
     }
@@ -209,9 +266,7 @@
 {
   this->shellInput->setFont(this->fontFile, this->textSize);
-  this->shellInput->setColor(1, 0, 0);
   this->shellInput->setAlignment(TEXT_ALIGN_LEFT);
   if (shellInput->getParent() != this)
     this->shellInput->setParent2D(this);
-  this->shellInput->setRelCoor2D(5, (this->textSize + this->lineSpacing)*this->bufferDisplaySize + this->textSize);
 
   this->setBufferDisplaySize(this->bufferDisplaySize);
@@ -239,7 +294,5 @@
   {
     bufferText[i] = new Text(this->fontFile, this->textSize, TEXT_RENDER_DYNAMIC);
-    bufferText[i]->setColor(1, 0, 0);
     bufferText[i]->setAlignment(TEXT_ALIGN_LEFT);
-    bufferText[i]->setRelCoor2D(calculateLinePosition(i));
     bufferText[i]->setText(text);
     bufferText[i]->setParent2D(this);
@@ -391,10 +444,11 @@
   // setting the Blending effects
 
-  glColor4f(0.0f, 0.0f, 0.8f, .4);
-  glEnable(GL_BLEND);
-  glDisable(GL_TEXTURE_2D);
-  glBlendFunc(GL_SRC_ALPHA, GL_ONE);
-
-  glBindTexture(GL_TEXTURE_2D, 0);
+  this->backgroundMaterial->select();
+  glColor4f(*(this->backgroundColor),
+            *(this->backgroundColor+1),
+            *(this->backgroundColor+2),
+            *(this->backgroundColor+3));
+
+
   glBegin(GL_TRIANGLE_STRIP);
 
Index: /trunk/src/lib/shell/shell.h
===================================================================
--- /trunk/src/lib/shell/shell.h	(revision 5371)
+++ /trunk/src/lib/shell/shell.h	(revision 5372)
@@ -4,4 +4,5 @@
  *
  * @todo Buffer Display in different Colors for different debug mode.
+ * @todo choose color of the Font and the background.
  */
 
@@ -14,9 +15,12 @@
 #include <stdarg.h>
 
-#define         SHELL_DEFAULT_FONT      "fonts/dpquake_.ttf"
+#define         SHELL_DEFAULT_FONT              "fonts/dpquake_.ttf"
+#define         SHELL_DEFAULT_TEXT_COLOR        1,0,0,1
+#define         SHELL_DEFAULT_BACKGROUND_COLOR  0,0,.8,.8
 
 // FORWARD DECLARATION
 class Text;
 class ShellInput;
+class Material;
 template<class T> class tIterator;
 
@@ -52,4 +56,8 @@
     void setFont(const char* fontFile);
     void setTextSize(unsigned int textSize, unsigned int lineSpacing = 1);
+    void setTextColor(float r, float g, float b, float a);
+    void setBackgroundColor(float r, float g, float b, float a);
+
+    void resetValues();
     void rebuildText();
 
@@ -86,5 +94,8 @@
     unsigned int             lineSpacing;            //!< The Spacing between lines.
     unsigned int             textSize;               //!< The size of the text.
+    float                    textColor[4];           //!< The text's color [r,g,b,a].
     char*                    fontFile;               //!< The file containing the font.
+    Material*                backgroundMaterial;     //!< A material for the background.
+    float                    backgroundColor[4];     //!< The color of the background [r,g,b,a].
 
     // HANDLING TEXT INPUT
Index: /trunk/src/util/resource_manager.cc
===================================================================
--- /trunk/src/util/resource_manager.cc	(revision 5371)
+++ /trunk/src/util/resource_manager.cc	(revision 5372)
@@ -31,5 +31,4 @@
 #ifndef NO_TEXT
 #include "font.h"
-#include "text.h" //!< @todo this should not be included here. -> make FONT independant of SIZE...
 #endif /* NO_TEXT */
 #ifndef NO_AUDIO
@@ -365,5 +364,5 @@
               tmpResource->ttfSize = *(unsigned int*)param1;
             else
-              tmpResource->ttfSize = TEXT_DEFAULT_SIZE;
+              tmpResource->ttfSize = FONT_DEFAULT_RENDER_SIZE;
 
           if(isFile(fullName))
@@ -621,5 +620,5 @@
               if (param1 == NULL)
                 {
-                  if (enumRes->ttfSize == TEXT_DEFAULT_SIZE)
+                  if (enumRes->ttfSize == FONT_DEFAULT_RENDER_SIZE)
                     match = true;
                 }
