Index: /orxonox/trunk/src/defs/include_paths.am
===================================================================
--- /orxonox/trunk/src/defs/include_paths.am	(revision 4848)
+++ /orxonox/trunk/src/defs/include_paths.am	(revision 4849)
@@ -10,4 +10,5 @@
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/graphics/importer
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/graphics/spatial_separation
+AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/graphics/render2D
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/particles
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/gui
Index: /orxonox/trunk/src/lib/graphics/graphics_engine.cc
===================================================================
--- /orxonox/trunk/src/lib/graphics/graphics_engine.cc	(revision 4848)
+++ /orxonox/trunk/src/lib/graphics/graphics_engine.cc	(revision 4849)
@@ -20,4 +20,5 @@
 #include "event_handler.h"
 
+#include "render_2d.h"
 #include "debug.h"
 #include "text_engine.h"
@@ -58,4 +59,7 @@
 {
   // delete what has to be deleted here
+
+  delete Render2D::getInstance();
+  GraphicsEngine::singletonRef = NULL;
 }
 
@@ -148,8 +152,5 @@
   glEnable(GL_DEPTH_TEST);
 
-
-  // subscribe the resolutionChanged-event
-  //EventHandler::getInstance()->subscribe(this, ES_GAME, EV_VIDEO_RESIZE);
-  //! @todo eventSystem craps up the Starting of orxonox -> see why.
+  Render2D::getInstance();
 
   this->isInit = true;
@@ -402,11 +403,11 @@
  * @param dt the time passed
 */
-void GraphicsEngine::tick(float dt)
+  void GraphicsEngine::tick(float dt)
 {
   if( unlikely(this->bDisplayFPS))
-    {
-      this->currentFPS = 1.0/dt;
-      if( unlikely(this->currentFPS > this->maxFPS)) this->maxFPS = this->currentFPS;
-      if( unlikely(this->currentFPS < this->minFPS)) this->minFPS = this->currentFPS;
+  {
+    this->currentFPS = 1.0/dt;
+    if( unlikely(this->currentFPS > this->maxFPS)) this->maxFPS = this->currentFPS;
+    if( unlikely(this->currentFPS < this->minFPS)) this->minFPS = this->currentFPS;
 
 #ifndef NO_TEXT
@@ -421,5 +422,16 @@
       this->geTextMinFPS->setText(tmpChar3);
 #endif /* NO_TEXT */
-    }
+
+
+  }
+  Render2D::getInstance()->tick(dt);
+
+}
+
+
+void GraphicsEngine::draw() const
+{
+  Render2D::getInstance()->draw();
+
 }
 
Index: /orxonox/trunk/src/lib/graphics/graphics_engine.h
===================================================================
--- /orxonox/trunk/src/lib/graphics/graphics_engine.h	(revision 4848)
+++ /orxonox/trunk/src/lib/graphics/graphics_engine.h	(revision 4849)
@@ -63,4 +63,5 @@
 
     void tick(float dt);
+    void draw() const;
     void displayFPS(bool display);
 
Index: /orxonox/trunk/src/lib/graphics/render2D/element_2d.h
===================================================================
--- /orxonox/trunk/src/lib/graphics/render2D/element_2d.h	(revision 4848)
+++ /orxonox/trunk/src/lib/graphics/render2D/element_2d.h	(revision 4849)
@@ -43,5 +43,5 @@
 
 //! A class for ...
-class Element2D : public BaseObject {
+class Element2D : virtual public BaseObject {
 
  public:
Index: /orxonox/trunk/src/lib/graphics/render2D/render_2d.cc
===================================================================
--- /orxonox/trunk/src/lib/graphics/render2D/render_2d.cc	(revision 4848)
+++ /orxonox/trunk/src/lib/graphics/render2D/render_2d.cc	(revision 4849)
@@ -77,4 +77,20 @@
 
 
+void Render2D::tick(float dt)
+{
+  tIterator<Element2D>* iterator = this->element2DList->getIterator();
+  Element2D* elem = iterator->nextElement();
+  while (elem != NULL)
+  {
+    elem->tick(dt);
+    elem = iterator->nextElement();
+  }
+  delete iterator;
+
+}
+
+/**
+ * renders all the Elements of the Render2D-engine
+ */
 void Render2D::draw() const
 {
Index: /orxonox/trunk/src/lib/graphics/render2D/render_2d.h
===================================================================
--- /orxonox/trunk/src/lib/graphics/render2D/render_2d.h	(revision 4848)
+++ /orxonox/trunk/src/lib/graphics/render2D/render_2d.h	(revision 4849)
@@ -21,5 +21,5 @@
   inline static Render2D* getInstance() { if (!singletonRef) singletonRef = new Render2D();  return singletonRef; };
 
-
+  void tick(float dt);
   void draw() const;
 
Index: /orxonox/trunk/src/story_entities/world.cc
===================================================================
--- /orxonox/trunk/src/story_entities/world.cc	(revision 4848)
+++ /orxonox/trunk/src/story_entities/world.cc	(revision 4849)
@@ -849,5 +849,5 @@
   ParticleEngine::getInstance()->draw();
 
-
+  GraphicsEngine::getInstance()->draw();
   TextEngine::getInstance()->draw();
   LightManager::getInstance()->draw(); // must be at the end of the drawing procedure, otherwise Light cannot be handled as PNodes //
Index: /orxonox/trunk/src/world_entities/weapons/crosshair.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/crosshair.cc	(revision 4848)
+++ /orxonox/trunk/src/world_entities/weapons/crosshair.cc	(revision 4849)
@@ -180,5 +180,5 @@
  * draws the crosshair
  */
-void Crosshair::draw()
+void Crosshair::draw() const
 {
   GraphicsEngine::storeMatrices();
Index: /orxonox/trunk/src/world_entities/weapons/crosshair.h
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/crosshair.h	(revision 4848)
+++ /orxonox/trunk/src/world_entities/weapons/crosshair.h	(revision 4849)
@@ -8,7 +8,10 @@
 #define _CROSSHAIR_H
 
+#include "p_node.h"
+#include "element_2d.h"
 #include "event_listener.h"
-#include "p_node.h"
+
 #include "vector.h"
+
 
 // FORWARD DEFINITION
@@ -18,5 +21,5 @@
 
 //! A class that enables the
-class Crosshair : public PNode, public EventListener {
+class Crosshair : public PNode, public Element2D, public EventListener {
 
  public:
@@ -33,6 +36,6 @@
 
   virtual void process(const Event &event);
-  void tick(float dt);
-  void draw();
+  virtual void tick(float dt);
+  virtual void draw() const;
 
  private:
Index: /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc
===================================================================
--- /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc	(revision 4848)
+++ /orxonox/trunk/src/world_entities/weapons/weapon_manager.cc	(revision 4849)
@@ -243,5 +243,4 @@
   }
 
-  crosshair->tick(dt);
   crosshair->setRotationSpeed(5);
 }
@@ -260,5 +259,4 @@
       w->draw();
   }
-  crosshair->draw();
 }
 
