Index: trunk/src/lib/graphics/render2D/element_2d.cc
===================================================================
--- trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5378)
+++ trunk/src/lib/graphics/render2D/element_2d.cc	(revision 5382)
@@ -555,5 +555,5 @@
  * @param bias the speed to iterate to this new Positions
  */
-void Element2D::softReparent2D(Element2D* parentNode, float bias)
+void Element2D::setParentSoft2D(Element2D* parentNode, float bias)
 {
   if (this->parent == parentNode)
@@ -578,10 +578,12 @@
   parentNode->addChild2D(this);
 
-  if (this->parentMode & PNODE_ROTATE_MOVEMENT)
+  if (this->parentMode & PNODE_ROTATE_MOVEMENT) //! @todo implement this.
     ;//this->setRelCoor(this->parent->getAbsDir().inverse().apply(tmpV - this->parent->getAbsCoor()));
   else
-    this->setRelCoor2D(tmpV - parentNode->getAbsCoor2D());
-
-  this->setRelDir2D(tmpQ - parentNode->getAbsDir2D());
+    this->relCoordinate = (tmpV - parentNode->getAbsCoor2D());
+  this->bRelCoorChanged = true;
+
+  this->relDirection = (tmpQ - parentNode->getAbsDir2D());
+  this->bRelDirChanged = true;
 }
 
@@ -591,9 +593,9 @@
  * @param bias the speed to iterate to this new Positions
  */
-void Element2D::softReparent2D(const char* parentName, float bias)
+void Element2D::setParentSoft2D(const char* parentName, float bias)
 {
   Element2D* parentNode = dynamic_cast<Element2D*>(ClassList::getObject(parentName, CL_ELEMENT_2D));
   if (parentNode != NULL)
-    this->softReparent2D(parentNode, bias);
+    this->setParentSoft2D(parentNode, bias);
 }
 
@@ -852,5 +854,4 @@
 
 
-
 ///////////////////
 // NullElement2D //
Index: trunk/src/lib/graphics/render2D/element_2d.h
===================================================================
--- trunk/src/lib/graphics/render2D/element_2d.h	(revision 5378)
+++ trunk/src/lib/graphics/render2D/element_2d.h	(revision 5382)
@@ -155,6 +155,6 @@
     Element2D* getParent () const { return this->parent; };
 
-    void softReparent2D(Element2D* parentNode, float bias = 1.0);
-    void softReparent2D(const char* parentName, float bias = 1.0);
+    void setParentSoft2D(Element2D* parentNode, float bias = 1.0);
+    void setParentSoft2D(const char* parentName, float bias = 1.0);
 
     /** @param parentMode sets the parentingMode of this Node */
@@ -207,10 +207,9 @@
     Vector                  lastAbsCoordinate;  //!< this is used for speedcalculation, it stores the last coordinate
     float                   prevRelDirection;   //!< The last Relative Direciton from the last update-Cycle.
-//  float                   lastAbsDirection;
 
     Vector                  velocity;           //!< Saves the velocity.
 
-    Vector*                 toCoordinate;       //!< a position to which to iterate. (This is used in conjunction with softReparent.and set*CoorSoft)
-    float*                  toDirection;        //!< a direction to which to iterate. (This is used in conjunction with softReparent and set*DirSoft)
+    Vector*                 toCoordinate;       //!< a position to which to iterate. (This is used in conjunction with setParentSoft.and set*CoorSoft)
+    float*                  toDirection;        //!< a direction to which to iterate. (This is used in conjunction with setParentSoft and set*DirSoft)
     float                   bias;               //!< how fast to iterate to the given position (default is 1)
 
Index: trunk/src/lib/graphics/render2D/render_2d.cc
===================================================================
--- trunk/src/lib/graphics/render2D/render_2d.cc	(revision 5378)
+++ trunk/src/lib/graphics/render2D/render_2d.cc	(revision 5382)
@@ -66,6 +66,8 @@
 void Render2D::registerElement2D(Element2D* element2D)
 {
-  this->element2DList[(int)log2(E2D_DEFAULT_LAYER)]->add(element2D);
+  if (likely(element2D != NULL))
+    this->element2DList[(int)log2(E2D_DEFAULT_LAYER)]->add(element2D);
 }
+
 
 /**
@@ -88,4 +90,9 @@
 void Render2D::moveToLayer(Element2D* element2D, E2D_LAYER to)
 {
+  if (element2D == NULL)
+    return;
+
+  if (unlikely(pow(2, E2D_LAYER_COUNT ) > to))
+    to = E2D_DEFAULT_LAYER;
   if (element2D->getLayer() != to)
   {
