Index: /trunk/src/lib/graphics/render2D/element_2d.cc
===================================================================
--- /trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5402)
+++ /trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5403)
@@ -201,6 +201,9 @@
   if (this->parent != NULL && this->parent->getLayer() > layer)
   {
-    PRINTF(2)("Unable to set this Element2D to layer %s, because it's parent is of higher layer %s\n",
-    Element2D::layer2DToChar(layer), Element2D::layer2DToChar(this->parent->getLayer()));
+    PRINTF(2)("Unable to set %s to layer %s, because it's parent(%s) is of higher layer %s\n",
+              this->getName(),
+              Element2D::layer2DToChar(layer),
+              this->parent->getName(),
+              Element2D::layer2DToChar(this->parent->getLayer()));
     layer = this->parent->getLayer();
   }
@@ -455,5 +458,5 @@
  * use this to add a child to this node.
  */
-void Element2D::addChild2D (Element2D* child, int parentingMode)
+void Element2D::addChild2D (Element2D* child)
 {
   if( likely(child->parent != NULL))
@@ -462,14 +465,28 @@
     child->parent->children->remove(child);
   }
-  if (parentingMode != E2D_PARENT_NONE)
-    child->parentMode = parentingMode;
   child->parent = this;
   if (likely(this != NULL))
   {
-    this->children->add(child);
+    // ELEMENT SORTING TO LAYERS  //
+    unsigned int childCount = this->children->getSize();
+    tIterator<Element2D>* iterator = this->children->getIterator();
+    Element2D* elem = iterator->firstElement();
+    while (elem != NULL)
+    {
+      if (elem->layer < child->layer)
+      {
+        this->children->addAtIteratorPosition(child, iterator);
+        break;
+      }
+      elem = iterator->nextElement();
+    }
+    delete iterator;
+    if (childCount == this->children->getSize())
+      this->children->add(child);
+    ////////////////////////////////
     if (unlikely(this->layer > child->getLayer()))
     {
-      PRINTF(2)("Layer '%s' of Child %s lower than parents layer '%s'. updating\n",
-      Element2D::layer2DToChar(child->getLayer()), Element2D::layer2DToChar(this->layer));
+      PRINTF(2)("Layer '%s' of Child(%s) lower than parents(%s) layer '%s'. updating...\n",
+      Element2D::layer2DToChar(child->getLayer()),child->getName(), this->getName(), Element2D::layer2DToChar(this->layer));
       child->setLayer(this->layer);
     }
@@ -498,9 +515,5 @@
 {
   if (child != NULL)
-  {
     child->remove2D();
-//    this->children->remove(child);
-//    child->parent = NULL;
-  }
 }
 
@@ -517,5 +530,5 @@
   while( pn != NULL)
   {
-    NullElement2D::getInstance()->addChild2D(pn, pn->getParentMode2D());
+    NullElement2D::getInstance()->addChild2D(pn);
     pn = iterator->nextElement();
   }
@@ -953,5 +966,5 @@
  * @param absCoordinate the cordinate of the Parent (normally Vector(0,0,0))
  */
-NullElement2D::NullElement2D () : Element2D(NULL, E2D_LAYER_TOP)
+NullElement2D::NullElement2D () : Element2D(NULL, E2D_LAYER_BELOW_ALL)
 {
   this->setClassID(CL_NULL_ELEMENT_2D, "NullElement2D");
Index: /trunk/src/lib/graphics/render2D/element_2d.h
===================================================================
--- /trunk/src/lib/graphics/render2D/element_2d.h	(revision 5402)
+++ /trunk/src/lib/graphics/render2D/element_2d.h	(revision 5403)
@@ -152,5 +152,5 @@
 
 
-    void addChild2D (Element2D* child, int parentingMode = E2D_PARENT_NONE);
+    void addChild2D (Element2D* child);
     void addChild2D (const char* childName);
     void removeChild2D (Element2D* child);
Index: /trunk/src/lib/util/list.h
===================================================================
--- /trunk/src/lib/util/list.h	(revision 5402)
+++ /trunk/src/lib/util/list.h	(revision 5403)
@@ -37,4 +37,5 @@
     void add(T* entity);
     void addAtBeginning(T* entity); //!< @todo This should be made with an ENUM
+    void addAtIteratorPosition(T* entity, tIterator<T>* itereator);
     void remove(const T* entity);
     void removeFromLast(const T* entity);
@@ -122,4 +123,5 @@
 {
   if( unlikely(entity == NULL)) return;
+
   listElement<T>* el = new listElement<T>;
   el->next = this->first;
@@ -134,4 +136,38 @@
 }
 
+/**
+ * add an entity at an iterators position
+ * @param entity the entity to add
+ * @param iterator the iterator get the Positional from
+ *
+ * this works best with an iterator walking with
+ * firstElement() ; nextStep();
+ * or
+ * lastElement(); prevStep();
+ */
+template<class T>
+    inline void tList<T>::addAtIteratorPosition(T* entity, tIterator<T>* iterator)
+{
+  // rule out unusable
+  if (unlikely(entity == NULL))
+    return;
+  // on any error (or next == NULL) add using default add-function
+  if (unlikely(iterator == NULL || iterator->getList() == NULL) ||
+      iterator->tmpEl == NULL || iterator->tmpEl->next == NULL)
+    return this->add(entity);
+  // on prev == NULL add with addAtBeginning-function
+  if (unlikely(iterator->tmpEl->prev == NULL))
+    return addAtBeginning(entity);
+  else
+  {
+    listElement<T>* el = new listElement<T>;
+    el->next = iterator->tmpEl->next;
+    el->curr = entity;
+    el->prev = iterator->tmpEl->prev;
+
+    el->next->prev = el;
+    el->prev->next = el;
+  }
+}
 
 /**
@@ -370,4 +406,5 @@
 template<class T> class tIterator
 {
+  friend class tList<T>;
   public:
     tIterator(const tList<T>* list);
@@ -380,6 +417,6 @@
     T* seekElement(const T* element);
     T* iteratorElement(const tIterator<T>* iterator);
-    bool compareListPointer(const tList<T>* list);
-
+    bool compareListPointer(const tList<T>* list) const;
+    inline const tList<T>* getList() const { return this->list; };
     /** another way to iterate through the list
      * !! THIS IS NOT MEANT FOR DELETION
@@ -554,5 +591,5 @@
 
 template<class T>
-    bool tIterator<T>::compareListPointer(const tList<T>* list)
+    bool tIterator<T>::compareListPointer(const tList<T>* list) const
 {
   return (this->list == list)?true:false;
