Index: orxonox/trunk/src/lib/graphics/render2D/element_2d.cc
===================================================================
--- orxonox/trunk/src/lib/graphics/render2D/element_2d.cc	(revision 4846)
+++ orxonox/trunk/src/lib/graphics/render2D/element_2d.cc	(revision 4847)
@@ -31,7 +31,5 @@
 Element2D::Element2D ()
 {
-   this->setClassID(CL_ELEMENT_2D, "Element2D");
-
-   Render2D::getInstance()->registerElement2D(this);
+  this->init();
 }
 
@@ -46,30 +44,49 @@
 
 
+void Element2D::init()
+{
+  this->setClassID(CL_ELEMENT_2D, "Element2D");
+
+  Render2D::getInstance()->registerElement2D(this);
+
+}
+
 /**
  * this sets the position of the Element on the screen.
+ * Use this in the your tick function, if you want the element to be automatically positioned.
  */
 void Element2D::positioning()
 {
   // setting the Position of this ELEM2D.
-  Vector pos;
   if (this->bindNode)
   {
-    GLdouble x = this->bindNode->getAbsCoor().x;
-    GLdouble y = this->bindNode->getAbsCoor().y;
-    GLdouble z = this->bindNode->getAbsCoor().z;
     GLdouble projectPos[3];
-    gluProject(x, y, z, GraphicsEngine::modMat, GraphicsEngine::projMat, GraphicsEngine::viewPort, projectPos, projectPos+1, projectPos+2);
-    pos.x = projectPos[0] + this->position2D[0];
-    pos.y = GraphicsEngine::getInstance()->getResolutionY() - projectPos[1] + this->position2D[1];
-    pos.z = projectPos[2];
+    gluProject(this->bindNode->getAbsCoor().x,
+               this->bindNode->getAbsCoor().y,
+               this->bindNode->getAbsCoor().z,
+               GraphicsEngine::modMat,
+               GraphicsEngine::projMat,
+               GraphicsEngine::viewPort,
+               projectPos,
+               projectPos+1,
+               projectPos+2);
+    absPos2D.x = projectPos[0] + this->relPos2D[0];
+    absPos2D.y = GraphicsEngine::getInstance()->getResolutionY() - projectPos[1] + this->relPos2D[1];
+    absPos2D.depth = projectPos[2];
   }
   else
   {
-    pos.x = this->position2D[0];
-    pos.y = this->position2D[1];
-    pos.z = 0;
+    absPos2D.x = this->relPos2D[0];
+    absPos2D.y = this->relPos2D[1];
+    absPos2D.depth = 0;
   }
-
-  glPushMatrix();
 }
 
+/**
+ * ticks the 2d-Element
+ * @param dt the time elapsed since the last tick
+ */
+void Element2D::tick(float dt)
+{
+  this->positioning();
+}
Index: orxonox/trunk/src/lib/graphics/render2D/element_2d.h
===================================================================
--- orxonox/trunk/src/lib/graphics/render2D/element_2d.h	(revision 4846)
+++ orxonox/trunk/src/lib/graphics/render2D/element_2d.h	(revision 4847)
@@ -24,4 +24,5 @@
 typedef enum
 {
+  ELEM2D_ALIGN_NONE,
   ELEM2D_ALIGN_LEFT,
   ELEM2D_ALIGN_RIGHT,
@@ -30,4 +31,12 @@
 } ELEM2D_ALIGNMENT;
 
+//! A Struct defining the Position of an Element in 2D-space
+struct Position2D
+{
+  float       x;                 //!< The x-coordinate.
+  float       y;                 //!< The y-coordinate.
+  float       depth;             //!< The distance from the viewing plane.
+
+};
 
 //! A class for ...
@@ -38,19 +47,29 @@
   virtual ~Element2D();
 
-
   void setPosition(int xCoord, int yCoord);
   void setLayer(E2DLayer layer);
+  /** @param visible true if the Element should be visible false otherwise (will not be rendered) */
+  inline void setVisibility(bool visible) { this->visible = visible; };
+  /** @param bindNode the Node this 2D-element should follow. if NULL the Element will not follow anything */
+  inline void setBindNode(const PNode* bindNode) { this->bindNode = bindNode; };
 
+  /** @returns the visibility state */
+  inline bool isVisible() { return this->visible; };
 
   void positioning();
+  virtual void tick(float dt);
   virtual void draw() const = NULL;
 
+  private:
+    void init();
+
  private:
-   bool               visible;
-   int                position2D[2];    //!< X-coord, Y-Coord
-   E2DLayer           layer;
+   bool                    visible;
+   int                     relPos2D[2];      //!< X-coord, Y-Coord (relative to the Coordinates of the alignment if given.)
+   Position2D              absPos2D;         //!< The absolute position of the 2D-Element.
+   E2DLayer                layer;
 
-   ELEM2D_ALIGNMENT   alignment;
-   PNode*             bindNode;         //!< a node over which to display this 2D-element
+   ELEM2D_ALIGNMENT        alignment;        //!< How the Element is aligned around its Position
+   const PNode*            bindNode;         //!< a node over which to display this 2D-element
 };
 
Index: orxonox/trunk/src/lib/graphics/render2D/render_2d.cc
===================================================================
--- orxonox/trunk/src/lib/graphics/render2D/render_2d.cc	(revision 4846)
+++ orxonox/trunk/src/lib/graphics/render2D/render_2d.cc	(revision 4847)
@@ -71,2 +71,16 @@
   this->element2DList->remove(element2D);
 }
+
+
+void Render2D::draw() const
+{
+  tIterator<Element2D>* iterator = this->element2DList->getIterator();
+  Element2D* elem = iterator->nextElement();
+  while (elem != NULL)
+  {
+    if (elem->isVisible())
+      elem->draw();
+    elem = iterator->nextElement();
+  }
+  delete iterator;
+}
