Index: /branches/gui/src/lib/gui/gl_gui/glgui_button.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_button.cc	(revision 7881)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_button.cc	(revision 7882)
@@ -51,4 +51,6 @@
   {
     this->setClassID(CL_GLGUI_BUTTON, "GLGuiButton");
+    this->setFocusable(true);
+    this->setClickable(true);
 
     this->label.setParent2D(this);
Index: /branches/gui/src/lib/gui/gl_gui/glgui_handler.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_handler.cc	(revision 7881)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_handler.cc	(revision 7882)
@@ -107,5 +107,8 @@
       {
         GLGuiWidget* widget = dynamic_cast<GLGuiWidget*>(*it);
-        if (widget->isVisible() && widget->focusOverWidget(this->cursor->getAbsCoor2D().x, this->cursor->getAbsCoor2D().y))
+
+        if (widget->isVisible() &&
+            widget->focusable() &&
+            widget->focusOverWidget(this->cursor))
         {
           // receiving Focus
@@ -113,8 +116,10 @@
           {
             widget->giveFocus();
-            printf("%s\n", widget->getClassName());
           }
+          return ;
         }
       }
+      if (GLGuiWidget::focused() != NULL)
+        GLGuiWidget::focused()->breakFocus();
     }
   }
Index: /branches/gui/src/lib/gui/gl_gui/glgui_widget.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_widget.cc	(revision 7881)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_widget.cc	(revision 7882)
@@ -17,4 +17,6 @@
 
 #include "glgui_widget.h"
+
+#include "glgui_cursor.h"
 
 #include "material.h"
@@ -53,6 +55,6 @@
     this->setClassID(CL_GLGUI_WIDGET, "GLGuiWidget");
 
-    this->focusable = true;
-    this->clickable = true;
+    this->_focusable = false;
+    this->_clickable = false;
     this->setVisibility(GLGUI_WIDGET_DEFAULT_VISIBLE);
 
@@ -65,12 +67,15 @@
 
 
-  bool GLGuiWidget::focusOverWidget(float x, float y) const
+  bool GLGuiWidget::focusOverWidget(const Vector2D& position) const
   {
-    if (this->getAbsCoor2D().x < x && this->getAbsCoor2D().x + this->getSizeX2D() > x &&
-        this->getAbsCoor2D().y < y && this->getAbsCoor2D().y + this->getSizeY2D() > y)
-      return true;
-    else
-      return false;
+    return (this->getAbsCoor2D().x < position.x && this->getAbsCoor2D().x + this->getSizeX2D() > position.x &&
+        this->getAbsCoor2D().y < position.y && this->getAbsCoor2D().y + this->getSizeY2D() > position.y);
   }
+
+  bool GLGuiWidget::focusOverWidget(const GLGuiCursor* const cursor) const
+  {
+    return this->focusOverWidget(cursor->getAbsCoor2D());
+  }
+
 
   /**
Index: /branches/gui/src/lib/gui/gl_gui/glgui_widget.h
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_widget.h	(revision 7881)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_widget.h	(revision 7882)
@@ -19,5 +19,4 @@
 namespace OrxGui
 {
-
   typedef enum
   {
@@ -34,4 +33,6 @@
 
 
+  class GLGuiCursor;
+
   //! if the Element should be visible by default.
 #define GLGUI_WIDGET_DEFAULT_VISIBLE       false
@@ -43,4 +44,5 @@
   class GLGuiWidget : public Element2D
   {
+
   private:
 
@@ -52,9 +54,29 @@
     void hide();
 
-    void giveFocus() { GLGuiWidget::_focused = this; this->receivedFocus(); };
-
+    /// INTERCONNECTIVITY
     void connectSignal(SignalType signalType, BaseObject* obj, const Executor* signal);
     void disconnectSignal(SignalType signalType);
-    bool focusOverWidget(float x, float y) const;
+
+
+    /// FOCUS
+    /** @brief gives focus to this widget */
+    void giveFocus() { GLGuiWidget::_focused = this; this->receivedFocus(); };
+    void breakFocus() { GLGuiWidget::_focused = NULL; this->removedFocus(); };
+    /** @returns true if the widget is focusable */
+    bool focusable() const { return this->_focusable; };
+    /** @param focusable sets if the Widget should be focusable */
+    void setFocusable(bool focusable = true) { this->_focusable = focusable; };
+    /** @returns true if the position is inside of the Widget. @param position the position to check */
+    bool focusOverWidget(const Vector2D& position) const;
+    /** @brief overloaded function, that returns true if the cursor is on top of the Widget */
+    bool focusOverWidget(const OrxGui::GLGuiCursor* const cursor) const;
+
+    /** @returns the currently focused Widget (NULL if none is selected) */
+    static GLGuiWidget* focused() { return GLGuiWidget::_focused; };
+
+
+    /// CLICK
+    bool clickable() const { return this->_clickable; };
+    void setClickable(bool clickable = true) { this->_clickable = clickable; };
 
 
@@ -62,4 +84,6 @@
     virtual void draw() const;
 
+
+    /// MATERIAL (looks)
     Material& backMaterial() { return this->backMat; };
     const Material& backMaterial() const { return this->backMat; };
@@ -70,5 +94,4 @@
 
 
-    static const GLGuiWidget* const focused() { return GLGuiWidget::_focused; };
 
 
@@ -91,6 +114,4 @@
 
 
-
-
   protected:
     Material                       backMat;
@@ -103,6 +124,6 @@
     std::vector<SignalConnector>   widgetSignals;
 
-    bool                           focusable;        //!< If this widget can receive focus.
-    bool                           clickable;        //!< if this widget can be clicked upon.
+    bool                           _focusable;        //!< If this widget can receive focus.
+    bool                           _clickable;        //!< if this widget can be clicked upon.
 
     static GLGuiWidget*            _focused;
