Index: trunk/src/lib/graphics/graphics_engine.cc
===================================================================
--- trunk/src/lib/graphics/graphics_engine.cc	(revision 7871)
+++ trunk/src/lib/graphics/graphics_engine.cc	(revision 7919)
@@ -286,4 +286,7 @@
   SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);	//Use at least 16 bits for the depth buffer
   SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);  //Enable double buffering
+
+  glEnable(GL_CULL_FACE);
+  glCullFace(GL_FRONT);
 }
 
@@ -576,4 +579,6 @@
 void GraphicsEngine::drawBackgroundElements() const
 {
+  GraphicsEngine::storeMatrices();
+
   Render2D::getInstance()->draw(E2D_LAYER_BELOW_ALL, E2D_LAYER_BELOW_ALL);
 }
Index: trunk/src/lib/graphics/importer/material.cc
===================================================================
--- trunk/src/lib/graphics/importer/material.cc	(revision 7871)
+++ trunk/src/lib/graphics/importer/material.cc	(revision 7919)
@@ -108,6 +108,15 @@
       return true;
 
-
-  // setting diffuse color
+  if (likely(Material::selectedMaterial != NULL))
+  {
+    for(unsigned int i = 0; i < Material::selectedMaterial->textures.size(); ++i)
+    {
+        glActiveTexture(Material::glTextureArbs[i]);
+        //glBindTexture(GL_TEXTURE_2D, 0);
+        glDisable(GL_TEXTURE_2D);
+    }
+  }
+
+    // setting diffuse color
   glColor4f (diffuse[0], diffuse[1], diffuse[2], this->transparency);
   // setting ambient color
@@ -118,5 +127,4 @@
   glMaterialf(GL_FRONT, GL_SHININESS, this->shininess);
 
-
   // setting the transparency
   if (this->transparency < 1.0 ||       /* This allows alpha blending of 2D textures with the scene */
@@ -138,13 +146,4 @@
     glShadeModel(GL_SMOOTH);
 
-  if (likely(Material::selectedMaterial != NULL))
-  {
-    for(unsigned int i = 0; i < Material::selectedMaterial->textures.size(); ++i)
-    {
-        glActiveTexture(Material::glTextureArbs[i]);
-        glBindTexture(GL_TEXTURE_2D, 0);
-        glDisable(GL_TEXTURE_2D);
-    }
-  }
 
   for(unsigned int i = 0; i < this->textures.size(); ++i)
@@ -159,15 +158,4 @@
   }
   Material::selectedMaterial = this;
-
-  /*  if (this->diffuseTexture != NULL)
-      {
-        glEnable(GL_TEXTURE_2D);
-        glBindTexture(GL_TEXTURE_2D, this->diffuseTexture->getTexture());
-      }
-    else
-      {
-        glDisable(GL_TEXTURE_2D);
-        glBindTexture(GL_TEXTURE_2D, 0);
-      }*/
 }
 
Index: trunk/src/lib/graphics/importer/material.h
===================================================================
--- trunk/src/lib/graphics/importer/material.h	(revision 7871)
+++ trunk/src/lib/graphics/importer/material.h	(revision 7919)
@@ -16,6 +16,4 @@
 
 #include <vector>
-#include "SDL_image.h"
-
 #include "texture.h"
 
@@ -51,4 +49,5 @@
     void setTransparency (char* trans);
 
+    void getDiffuseColor(float& r, float& g, float& b) const { r = diffuse[0], g = diffuse[1], b = diffuse[2]; }
 
     // MAPPING //
Index: trunk/src/lib/graphics/render2D/element_2d.cc
===================================================================
--- trunk/src/lib/graphics/render2D/element_2d.cc	(revision 7871)
+++ trunk/src/lib/graphics/render2D/element_2d.cc	(revision 7919)
@@ -62,6 +62,7 @@
   this->toCoordinate = NULL;
   this->toDirection = NULL;
+
+  this->size = Vector2D(0,0);
   this->toSize = NULL;
-  this->setSize2D(1, 1);
 
 
@@ -448,5 +449,4 @@
   this->relCoordinate += shift;
   this->bRelCoorChanged = true;
-
 }
 
@@ -847,9 +847,8 @@
     if (unlikely(this->toSize != NULL))
     {
-      Vector2D shiftSize = (*this->toSize - Vector2D(this->sizeX, this->sizeY)) *fabsf(dt)*bias;
+      Vector2D shiftSize = (*this->toSize - this->size) *fabsf(dt)*bias;
       if (likely((shiftSize).len() >= .001))//PNODE_ITERATION_DELTA))
       {
-        this->sizeX += shiftSize.x;
-        this->sizeY += shiftSize.y;
+        this->size += shiftSize;
       }
       else
@@ -1109,5 +1108,4 @@
   if (level == 0)
     glPopAttrib();
-
 }
 
Index: trunk/src/lib/graphics/render2D/element_2d.h
===================================================================
--- trunk/src/lib/graphics/render2D/element_2d.h	(revision 7871)
+++ trunk/src/lib/graphics/render2D/element_2d.h	(revision 7919)
@@ -125,10 +125,12 @@
     inline const PNode* getBindNode() const { return this->bindNode; };
 
-    inline void setSize2D(float x, float y) { this->sizeX = x, this->sizeY = y; };
+    inline void setSize2D(float x, float y) { this->size = Vector2D(x, y); };
+    inline void setSize2D(const Vector2D& size) { this->size = size; };
+    inline const Vector2D& getSize2D() const { return this->size; };
     void setSizeSoft2D(float x, float y, float bias = 1.0);
-    inline void setSizeX2D(float x) { this->sizeX = x; };
-    inline void setSizeY2D(float y) { this->sizeY = y; };
-    inline float getSizeX2D() const { return this->sizeX; };
-    inline float getSizeY2D() const { return this->sizeY; };
+    inline void setSizeX2D(float x) { this->size.x = x; };
+    inline void setSizeY2D(float y) { this->size.y = y; };
+    inline float getSizeX2D() const { return this->size.x; };
+    inline float getSizeY2D() const { return this->size.y; };
 
   public:
@@ -238,6 +240,5 @@
   private:
     const PNode*            bindNode;           //!< a node over which to display this 2D-element
-    float                   sizeX;              //!< The size of the rendered item in x-direction
-    float                   sizeY;              //!< The size of the rendered Item in y-direction
+    Vector2D                size;               //!< The size of the rendered item
     Vector2D*               toSize;             //!< The Size to iterate to.
 
Index: trunk/src/lib/graphics/text_engine/multi_line_text.cc
===================================================================
--- trunk/src/lib/graphics/text_engine/multi_line_text.cc	(revision 7871)
+++ trunk/src/lib/graphics/text_engine/multi_line_text.cc	(revision 7919)
@@ -64,4 +64,5 @@
     return;
   glPushMatrix();
+  glPushAttrib(GL_ENABLE_BIT);
   // transform for alignment.
   // TODO make the Stuff with the alignment
@@ -117,4 +118,5 @@
   }
   glEnd();
+  glPopAttrib();
   glPopMatrix();
 }
Index: trunk/src/lib/graphics/text_engine/text.cc
===================================================================
--- trunk/src/lib/graphics/text_engine/text.cc	(revision 7871)
+++ trunk/src/lib/graphics/text_engine/text.cc	(revision 7919)
@@ -36,4 +36,5 @@
   this->font = NULL;
   this->size = textSize;
+  this->setSizeY2D(size);
   this->blending = TEXT_DEFAULT_BLENDING;
   this->color = TEXT_DEFAULT_COLOR;
@@ -127,4 +128,14 @@
 
 /**
+ * @brief appends one Character to the String.
+ */
+void Text::appendCharacter(char character)
+{
+  this->text += character;
+  this->setupTextWidth();
+}
+
+
+/**
  * @brief append some text to the already existing Text.
  * @param appendText The text to append to this Text.
@@ -135,4 +146,20 @@
   return this->text;
 }
+
+/**
+ * @brief removes char characters from the Text.
+ *
+ * @note this function checks, if the count can be removed, and if so does it.
+ * Otherwise the maximum count of characters will be removed.
+ */
+void Text::removeCharacters(unsigned int chars)
+{
+  if (text.size() > chars)
+    this->text.resize(this->text.size()-chars);
+  else if (!text.empty())
+    text.clear();
+  this->setupTextWidth();
+}
+
 
 /**
@@ -188,4 +215,5 @@
     return;
   glPushMatrix();
+  glPushAttrib(GL_ENABLE_BIT);
   // transform for alignment.
   if (this->getAlignment() == TEXT_ALIGN_RIGHT)
@@ -229,4 +257,5 @@
   }
   glEnd();
+  glPopAttrib();
   glPopMatrix();
 }
@@ -242,5 +271,5 @@
     if(this->font->getGlyphArray()[this->text[i]] != NULL)
       width += this->font->getGlyphArray()[this->text[i]]->advance;
-  this->setSizeX2D(width *this->getSize());
+  this->setSizeX2D(width * this->getSize());
 }
 
Index: trunk/src/lib/graphics/text_engine/text.h
===================================================================
--- trunk/src/lib/graphics/text_engine/text.h	(revision 7871)
+++ trunk/src/lib/graphics/text_engine/text.h	(revision 7919)
@@ -37,5 +37,7 @@
     void setText(const std::string& text);
     void append(const std::string& appendText);
+    void appendCharacter(char character);
     const std::string& operator<<(const std::string& appendText);
+    void removeCharacters(unsigned int chars);
 
     /// SETUP
