Index: branches/gui/src/lib/graphics/importer/material.h
===================================================================
--- branches/gui/src/lib/graphics/importer/material.h	(revision 7875)
+++ branches/gui/src/lib/graphics/importer/material.h	(revision 7876)
@@ -51,4 +51,5 @@
     void setTransparency (char* trans);
 
+    void getDiffuseColor(float& r, float& g, float& b) const { r = diffuse[0], g = diffuse[1], b = diffuse[2]; }
 
     // MAPPING //
Index: branches/gui/src/lib/graphics/render2D/element_2d.cc
===================================================================
--- branches/gui/src/lib/graphics/render2D/element_2d.cc	(revision 7875)
+++ branches/gui/src/lib/graphics/render2D/element_2d.cc	(revision 7876)
@@ -449,5 +449,4 @@
   this->relCoordinate += shift;
   this->bRelCoorChanged = true;
-
 }
 
Index: branches/gui/src/lib/gui/gl_gui/glgui.h
===================================================================
--- branches/gui/src/lib/gui/gl_gui/glgui.h	(revision 7875)
+++ branches/gui/src/lib/gui/gl_gui/glgui.h	(revision 7876)
@@ -14,4 +14,5 @@
 #include "glgui_colorselector.h"
 #include "glgui_pushbutton.h"
+#include "glgui_cursor.h"
 
 namespace OrxGui
Index: branches/gui/src/lib/gui/gl_gui/glgui_cursor.cc
===================================================================
--- branches/gui/src/lib/gui/gl_gui/glgui_cursor.cc	(revision 7875)
+++ branches/gui/src/lib/gui/gl_gui/glgui_cursor.cc	(revision 7876)
@@ -17,4 +17,5 @@
 
 #include "glgui_cursor.h"
+#include "color.h"
 
 namespace OrxGui
@@ -28,16 +29,21 @@
     this->init();
 
+    this->subscribeEvent(ES_MENU,  EV_MOUSE_MOTION);
+
+
   }
 
 
   /**
-   * standard deconstructor
-  */
+   * @brief standard deconstructor
+   */
   GLGuiCursor::~GLGuiCursor()
-  {
-  }
+  {}
+
+  float GLGuiCursor::_mouseSensitivity = 1.0;
+
 
   /**
-   * initializes the GUI-element
+   * @brief initializes the GUI-element
    */
   void GLGuiCursor::init()
@@ -45,11 +51,57 @@
     this->setClassID(CL_GLGUI_CURSOR, "GLGuiCursor");
 
+    this->backMaterial().setDiffuse(1.0,0.0,0.0);
+    this->setSize2D(10, 20);
+    this->setAbsCoor2D(100, 100);
+    this->setLayer(E2D_LAYER_ABOVE_ALL);
+
+  }
+
+  void GLGuiCursor::tick(float dt)
+  {
+    Vector color;
+    this->backMaterial().getDiffuseColor(color.x, color.y, color.z);
+    color =  Color::HSVtoRGB(Color::RGBtoHSV(color)+Vector(80.0*dt,0.0,.0));
+    this->backMaterial().setDiffuse(color.x, color.y, color.z);
+
+    if (this->movement != Vector2D())
+    {
+/*      if (this->getAbsCoor2D().x < 0.0 )
+        movement.x = -this->getAbsCoor2D().x;
+      if (this->getAbsCoor2D().x > 200.0)
+        movement.x = (200.0-this->getAbsCoor2D().x);
+      if (this->getAbsCoor2D().y < 0.0 )
+        movement.x = -this->getAbsCoor2D().y;
+      if (this->getAbsCoor2D().y > 200.0)
+        movement.x = (200.0-this->getAbsCoor2D().y);*/
+
+
+
+      //this->shiftCoor2D(movement);
+      this->setAbsCoor2D(newPos);
+      movement = Vector2D();
+    }
   }
 
   /**
-   * draws the GLGuiCursor
+   * @brief draws the GLGuiCursor
    */
-  void GLGuiCursor::draw()
+  void GLGuiCursor::draw() const
   {
+    this->startDraw();
+    GLGuiWidget::draw();
+    this->endDraw();
+  }
+
+  void GLGuiCursor::process(const Event& event)
+  {
+    switch (event.type)
+    {
+      case EV_MOUSE_MOTION:
+        newPos = Vector2D(event.x, event.y);
+        movement += Vector2D(event.xRel * _mouseSensitivity, event.yRel * _mouseSensitivity);
+        break;
+
+    }
   }
 }
Index: branches/gui/src/lib/gui/gl_gui/glgui_cursor.h
===================================================================
--- branches/gui/src/lib/gui/gl_gui/glgui_cursor.h	(revision 7875)
+++ branches/gui/src/lib/gui/gl_gui/glgui_cursor.h	(revision 7876)
@@ -10,4 +10,5 @@
 #include "glgui_widget.h"
 #include "event_listener.h"
+#include "vector2D.h"
 
 namespace OrxGui
@@ -26,9 +27,20 @@
     virtual ~GLGuiCursor();
 
+    static void setMouseSensitivity(float mouseSensitivity);
+    static float mouseSensitivity() { return GLGuiCursor::_mouseSensitivity; };
+
     void init();
+    const Vector2D& position() const { return Element2D::getAbsCoor2D(); }
 
-    virtual void draw();
 
+    virtual void tick(float dt);
+    virtual void draw() const;
+    virtual void process(const Event& event);
   private:
+
+    Vector2D      newPos;
+    Vector2D      movement;
+
+    static float _mouseSensitivity;
 
   };
Index: branches/gui/src/lib/gui/gl_gui/glgui_widget.cc
===================================================================
--- branches/gui/src/lib/gui/gl_gui/glgui_widget.cc	(revision 7875)
+++ branches/gui/src/lib/gui/gl_gui/glgui_widget.cc	(revision 7876)
@@ -52,5 +52,4 @@
     this->clickable = true;
     this->setVisibility(GLGUI_WIDGET_DEFAULT_VISIBLE);
-    //  this->setParent2D((Element2D*)NULL);
 
     this->backMat.setDiffuse(1.0, 1.0, 1.0);
Index: branches/gui/src/lib/math/vector2D.h
===================================================================
--- branches/gui/src/lib/math/vector2D.h	(revision 7875)
+++ branches/gui/src/lib/math/vector2D.h	(revision 7876)
@@ -40,5 +40,7 @@
 
   /** @param v: the Vecor to compare with this one @returns true, if the Vecors are the same, false otherwise */
-  inline bool operator== (const Vector2D& v) const { return (this->x==v.x && this->y==v.y)?true:false; };
+  inline bool operator== (const Vector2D& v) const { return (this->x==v.x && this->y==v.y); };
+  /** @param v: the Vector to negative-compare with this one @returns true if the two vectors are different */
+  inline bool operator!= (const Vector2D& v) const { return (this->x!=v.x && this->y!=v.y); };
   /** @param index The index of the "array" @returns the x/y coordinate */
   inline float operator[] (float index) const { return ( index == 0)? this->x : this->y; }
Index: branches/gui/src/story_entities/simple_game_menu.cc
===================================================================
--- branches/gui/src/story_entities/simple_game_menu.cc	(revision 7875)
+++ branches/gui/src/story_entities/simple_game_menu.cc	(revision 7876)
@@ -66,4 +66,7 @@
   pb->show();
   pb->setAbsCoor2D(50, 50);
+
+  OrxGui::GLGuiCursor* cursor = new OrxGui::GLGuiCursor();
+  cursor->show();
 
   if (root != NULL)
