Index: trunk/src/lib/graphics/render2D/element_2d.cc
===================================================================
--- trunk/src/lib/graphics/render2D/element_2d.cc	(revision 7840)
+++ trunk/src/lib/graphics/render2D/element_2d.cc	(revision 7843)
@@ -21,5 +21,9 @@
 #include <algorithm>
 
+// ONLY IF PNODE ENABLED //
+#include "state.h"
 #include "p_node.h"
+#include "camera.h"
+///////////////////////////
 
 #include "graphics_engine.h"
@@ -45,4 +49,5 @@
 
   this->setVisibility(true);
+  this->bCurrentlyVisible = true;
   this->activate2D();
   this->setAlignment(E2D_ALIGN_NONE);
@@ -240,4 +245,14 @@
 
 
+/**
+ * @brief sets a node, this 2D-Element should be shown upon
+ * @param bindNode the Node of the Node. (if NULL it will be unset).
+ */
+void Element2D::setBindNode(const PNode* bindNode)
+{
+  this->bindNode = bindNode;
+  if (bindNode == NULL)
+    this->bCurrentlyVisible = true;
+}
 
 /**
@@ -863,4 +878,12 @@
     else if (unlikely(this->bindNode != NULL))
     {
+      if (State::getCamera()->distance(this->bindNode) < 0)
+        this->bCurrentlyVisible = false;
+      else
+      {
+        this->bCurrentlyVisible = true;
+        printf("OK \n");
+      }
+
       GLdouble projectPos[3] = {0.0, 0.0, 0.0};
       gluProject(this->bindNode->getAbsCoor().x,
@@ -1011,5 +1034,5 @@
 void Element2D::draw2D(E2D_LAYER from, E2D_LAYER to) const
 {
-  if (this->bVisible)
+  if (this->bVisible && this->bCurrentlyVisible)
     this->draw();
   if (this->children.size() > 0)
Index: trunk/src/lib/graphics/render2D/element_2d.h
===================================================================
--- trunk/src/lib/graphics/render2D/element_2d.h	(revision 7840)
+++ trunk/src/lib/graphics/render2D/element_2d.h	(revision 7843)
@@ -116,10 +116,10 @@
     inline void setVisibility(bool visible) { this->bVisible = visible; };
     /** @returns the visibility state */
-    inline bool isVisible() const { return this->bVisible; };
+    inline bool isVisible() const { return (this->bVisible && this->bCurrentlyVisible);  };
 
 
     // POSITIONAL (E2D-specials) //
     /** @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; };
+    void setBindNode(const PNode* bindNode);
     void setBindNode(const std::string& bindNode);
     inline const PNode* getBindNode() const { return this->bindNode; };
@@ -244,6 +244,7 @@
     E2D_ALIGNMENT           alignment;          //!< How the Element is aligned around its Position
 
-    bool                    bVisible;            //!< If the given Element2D is visible.
-    bool                    bActive;             //!< If the given Element2D is active.
+    bool                    bVisible;           //!< If the given Element2D is visible.
+    bool                    bCurrentlyVisible;  //!< Evaluated in the TICK process, to see if the Element is Currently visible.
+    bool                    bActive;            //!< If the given Element2D is active.
     E2D_LAYER               layer;              //!< What layer this Element2D is on.
 
Index: trunk/src/lib/graphics/render2D/image_plane.cc
===================================================================
--- trunk/src/lib/graphics/render2D/image_plane.cc	(revision 7840)
+++ trunk/src/lib/graphics/render2D/image_plane.cc	(revision 7843)
@@ -21,7 +21,5 @@
 
 #include "graphics_engine.h"
-#include "material.h"
 #include "glincl.h"
-#include "state.h"
 #include "p_node.h"
 
@@ -50,6 +48,4 @@
 ImagePlane::~ImagePlane ()
 {
-  if (this->material)
-    delete this->material;
 }
 
@@ -67,5 +63,4 @@
 
   //this->setBindNode(this);
-  this->material = new Material();
   this->setTexture("pictures/error_texture.png");
 }
@@ -78,5 +73,5 @@
 void ImagePlane::loadParams(const TiXmlElement* root)
 {
-  LoadParam(root, "texture", this->material, Material, setDiffuseMap)
+  LoadParam(root, "texture", &this->material, Material, setDiffuseMap)
       .describe("the texture-file to load onto the ImagePlane");
 
@@ -102,5 +97,5 @@
 void ImagePlane::setTexture(const std::string& textureFile)
 {
-  this->material->setDiffuseMap(textureFile);
+  this->material.setDiffuseMap(textureFile);
 }
 
@@ -149,11 +144,8 @@
 void ImagePlane::draw() const
 {
-  if( !this->isVisible())
-    return;
-
   glPushMatrix();
 
   glTranslatef(this->getAbsCoor2D().x, this->getAbsCoor2D().y, 0);
-  this->material->select();
+  this->material.select();
 
   glBegin(GL_TRIANGLE_STRIP);
Index: trunk/src/lib/graphics/render2D/image_plane.h
===================================================================
--- trunk/src/lib/graphics/render2D/image_plane.h	(revision 7840)
+++ trunk/src/lib/graphics/render2D/image_plane.h	(revision 7843)
@@ -11,9 +11,6 @@
 
 #include "vector.h"
+#include "material.h"
 
-
-
-class Material;
-class TiXmlElement;
 
 //! A class that enables the
@@ -37,5 +34,5 @@
 
   private:
-    Material*        material;             //!< a material for the ImagePlane
+    Material         material;             //!< a material for the ImagePlane
     float            rotationSpeed;        //!< Speed of the Rotation.
 
