Index: orxonox/trunk/src/lib/graphics/render2D/element_2d.cc
===================================================================
--- orxonox/trunk/src/lib/graphics/render2D/element_2d.cc	(revision 4839)
+++ orxonox/trunk/src/lib/graphics/render2D/element_2d.cc	(revision 4840)
@@ -17,4 +17,5 @@
 
 #include "element_2d.h"
+#include "render_2d.h"
 
 using namespace std;
@@ -29,4 +30,5 @@
    this->setClassID(CL_ELEMENT_2D, "Element2D");
 
+   Render2D::getInstance()->registerElement2D(this);
 }
 
@@ -37,3 +39,4 @@
 {
   // delete what has to be deleted here
+  Render2D::getInstance()->unregisterElement2D(this);
 }
Index: orxonox/trunk/src/lib/graphics/render2D/element_2d.h
===================================================================
--- orxonox/trunk/src/lib/graphics/render2D/element_2d.h	(revision 4839)
+++ orxonox/trunk/src/lib/graphics/render2D/element_2d.h	(revision 4840)
@@ -18,5 +18,5 @@
   E2D_BOTTOM,                          //!< Will be rendered on the bottom Layer
   E2D_BELOW_ALL                        //!< Will be rendered below the 3D-scene. @todo make this work.
-}E2DDepth;
+} E2DLayer;
 
 //! A class for ...
@@ -28,8 +28,14 @@
 
 
+  void setPosition(int xCoord, int yCoord);
+  void setLayer(E2DLayer layer);
+
+
+  virtual void draw() const = NULL;
+
  private:
-   bool               bDraw;
+   bool               visible;
    int                position2D[2];    //!< X-coord, Y-Coord
-   E2DDepth           depth;
+   E2DLayer           layer;
 
 };
Index: orxonox/trunk/src/lib/graphics/render2D/render_2d.cc
===================================================================
--- orxonox/trunk/src/lib/graphics/render2D/render_2d.cc	(revision 4839)
+++ orxonox/trunk/src/lib/graphics/render2D/render_2d.cc	(revision 4840)
@@ -18,4 +18,9 @@
 #include "render_2d.h"
 
+#include "graphics_engine.h"
+#include "class_list.h"
+#include "list.h"
+#include "element_2d.h"
+
 using namespace std;
 
@@ -30,4 +35,5 @@
    this->setName("Render2D");
 
+   this->element2DList = new tList<Element2D>();
 }
 
@@ -38,8 +44,29 @@
 
 /**
-   @brief standard deconstructor
+ * standard deconstructor
  */
 Render2D::~Render2D ()
 {
+  delete this->element2DList;
+
   Render2D::singletonRef = NULL;
 }
+
+
+/**
+ * registers a 2D-element to the 2D-Renderer
+ * @param element2D the element to registers
+ */
+void Render2D::registerElement2D(Element2D* element2D)
+{
+  this->element2DList->add(element2D);
+}
+
+/**
+ * unregisters a 2D-element from the 2D-Renderer
+ * @param element2D The element to unregister
+ */
+void Render2D::unregisterElement2D(Element2D* element2D)
+{
+  this->element2DList->remove(element2D);
+}
Index: orxonox/trunk/src/lib/graphics/render2D/render_2d.h
===================================================================
--- orxonox/trunk/src/lib/graphics/render2D/render_2d.h	(revision 4839)
+++ orxonox/trunk/src/lib/graphics/render2D/render_2d.h	(revision 4840)
@@ -10,4 +10,6 @@
 
 // FORWARD DEFINITION
+template <class T> class tList;
+class Element2D;
 
 //! A default singleton class.
@@ -15,11 +17,19 @@
 
  public:
-  virtual ~Render2D(void);
+  virtual ~Render2D();
   /** @returns a Pointer to the only object of this Class */
-  inline static Render2D* getInstance(void) { if (!singletonRef) singletonRef = new Render2D();  return singletonRef; };
+  inline static Render2D* getInstance() { if (!singletonRef) singletonRef = new Render2D();  return singletonRef; };
+
+
+  void draw() const;
+
+  void registerElement2D(Element2D* element2D);
+  void unregisterElement2D(Element2D* element2D);
 
  private:
-  Render2D(void);
-  static Render2D* singletonRef;
+  Render2D();
+  static Render2D*               singletonRef;           //!< Reference to this class.
+
+  tList<Element2D>*              element2DList;          //!< List of all valid 2D-elements.
 };
 
Index: orxonox/trunk/src/lib/lang/class_list.cc
===================================================================
--- orxonox/trunk/src/lib/lang/class_list.cc	(revision 4839)
+++ orxonox/trunk/src/lib/lang/class_list.cc	(revision 4840)
@@ -107,4 +107,22 @@
     tmp = tmp->next;
   }
+}
+
+tList<BaseObject>* ClassList::getList(long classID)
+{
+  if(unlikely(ClassList::first == NULL))
+    return NULL;
+  else
+  {
+    ClassList* tmpCL = ClassList::first;
+    while (likely(tmpCL != NULL))
+    {
+      if (unlikely(tmpCL->classID == classID))
+        return tmpCL->objectList;
+      tmpCL = tmpCL->next;
+    }
+  }
+  return NULL;
+
 }
 
Index: orxonox/trunk/src/lib/lang/class_list.h
===================================================================
--- orxonox/trunk/src/lib/lang/class_list.h	(revision 4839)
+++ orxonox/trunk/src/lib/lang/class_list.h	(revision 4840)
@@ -35,9 +35,10 @@
 
     // STATIC FUNCTIONS
-    static void         addToClassList(BaseObject* objectPointer, const long& classID, const char* className);
-    static void         removeFromClassList(BaseObject* objectPointer);
+    static void               addToClassList(BaseObject* objectPointer, const long& classID, const char* className);
+    static void               removeFromClassList(BaseObject* objectPointer);
 
-    static BaseObject*  getObject(const char* name, long classID = CL_NULL);
-    static bool         exists(BaseObject* object, long classID = CL_NULL);
+    static tList<BaseObject>* getList(long classID = CL_NULL);
+    static BaseObject*        getObject(const char* name, long classID = CL_NULL);
+    static bool               exists(BaseObject* object, long classID = CL_NULL);
 
     static void debug(unsigned int debugLevel = 0);
