Index: trunk/src/lib/gui/gl_gui/Makefile.am
===================================================================
--- trunk/src/lib/gui/gl_gui/Makefile.am	(revision 7840)
+++ trunk/src/lib/gui/gl_gui/Makefile.am	(revision 7855)
@@ -11,4 +11,5 @@
 libORXglgui_a_SOURCES = glmenu/glmenu_imagescreen.cc \
                         glgui_handler.cc \
+                        signal_connector.cc \
                         glgui_mainwidget.cc \
                         glgui_widget.cc \
@@ -23,4 +24,5 @@
 
 noinst_HEADERS= glmenu/glmenu_imagescreen.h \
+		signal_connector.h \
 		glgui.h \
 		glgui_handler.h \
Index: trunk/src/lib/gui/gl_gui/glgui.h
===================================================================
--- trunk/src/lib/gui/gl_gui/glgui.h	(revision 7840)
+++ trunk/src/lib/gui/gl_gui/glgui.h	(revision 7855)
@@ -8,6 +8,13 @@
 #include "glgui_widget.h"
 
+#include "glgui_bar.h"
+#include "glgui_box.h"
+#include "glgui_button.h"
+#include "glgui_checkbutton.h"
+#include "glgui_colorselector.h"
+
 namespace OrxGui
 {
+
 
 };
Index: trunk/src/lib/gui/gl_gui/glgui_widget.cc
===================================================================
--- trunk/src/lib/gui/gl_gui/glgui_widget.cc	(revision 7840)
+++ trunk/src/lib/gui/gl_gui/glgui_widget.cc	(revision 7855)
@@ -58,5 +58,5 @@
     this->frontModel = 0;
 
-    this->widgetSignals.resize(GLGuiSignalCount, NULL);
+    this->widgetSignals.resize(SignalCount, SignalConnector());
   }
 
@@ -64,6 +64,6 @@
   bool GLGuiWidget::focusOverWidget(float x, float y)
   {
-    if (this->getAbsCoor2D().x < x && this->getAbsCoor2D().x+ this->getSizeX2D() > x &&
-        this->getAbsCoor2D().y < y && this->getAbsCoor2D().y+ this->getSizeX2D() > y)
+    if (this->getAbsCoor2D().x < x && this->getAbsCoor2D().x + this->getSizeX2D() > x &&
+        this->getAbsCoor2D().y < y && this->getAbsCoor2D().y + this->getSizeY2D() > y)
       return true;
     else
@@ -76,13 +76,13 @@
    * @param signal the name of the Signal
    */
-  void GLGuiWidget::connectSignal(GLGuiSignalType signalType, BaseObject*, const Executor* signal)
+  void GLGuiWidget::connectSignal(SignalType signalType, BaseObject* object, const Executor* signal)
   {
-    if (signalType >= GLGuiSignalCount)
+    if (signalType >= this->widgetSignals.size())
       return;
 
-    if (this->widgetSignals[signalType] != NULL)
-      PRINTF(2)("Already connected a Signal to '%s::%s' type %s... overwriting\n", this->getClassName(), this->getName(), "TEST");
+//    if (this->widgetSignals[signalType] != NULL)
+//      PRINTF(2)("Already connected a Signal to '%s::%s' type %s... overwriting\n", this->getClassName(), this->getName(), "TEST");
 
-    //this->widgetSignals[signalType] = ;
+    this->widgetSignals[signalType] = SignalConnector(object, signal);
   }
 
@@ -91,10 +91,10 @@
    * @param signalType the type of Signal to remove.
    */
-  void GLGuiWidget::disconnectSignal(GLGuiSignalType signalType)
+  void GLGuiWidget::disconnectSignal(SignalType signalType)
   {
-    if (signalType > GLGuiSignalCount)
+    if (signalType >= this->widgetSignals.size())
       return;
 
-    this->widgetSignals[signalType] = NULL;
+    this->widgetSignals[signalType] = SignalConnector();
   }
 
Index: trunk/src/lib/gui/gl_gui/glgui_widget.h
===================================================================
--- trunk/src/lib/gui/gl_gui/glgui_widget.h	(revision 7840)
+++ trunk/src/lib/gui/gl_gui/glgui_widget.h	(revision 7855)
@@ -22,14 +22,15 @@
   typedef enum
   {
-    GLGuiSignal_click     = 0,
-    GLGuiSignal_release,
-    GLGuiSignal_rollOn,
-    GLGuiSignal_rollOff,
-    GLGuiSignal_open,
-    GLGuiSignal_close,
-    GLGuiSignal_destroy,
+    Signal_click     = 0,
+    Signal_release,
+    Signal_rollOn,
+    Signal_rollOff,
+    Signal_open,
+    Signal_close,
+    Signal_destroy,
 
-    GLGuiSignalCount,
-  } GLGuiSignalType;
+    SignalCount,
+  } SignalType;
+
 
   //! if the Element should be visible by default.
@@ -51,14 +52,16 @@
     void hide();
 
-    void connectSignal(GLGuiSignalType signalType, BaseObject* obj, const Executor* signal);
-    void disconnectSignal(GLGuiSignalType signalType);
+    void connectSignal(SignalType signalType, BaseObject* obj, const Executor* signal);
+    void disconnectSignal(SignalType signalType);
     bool focusOverWidget(float x, float y);
 
     // if something was clickt on the GUI-widget.
-    virtual void click(const Event& event) {};
-    virtual void release(const Event& event) {};
+    virtual void clicked(const Event& event) {};
+    virtual void released(const Event& event) {};
 
-    virtual void receiveFocus() {};
-    virtual void removeFocus() {};
+    virtual void receivedFocus() {};
+    virtual void removedFocus() {};
+
+    virtual void destroyed() {};
 
     virtual void update() {};
@@ -75,4 +78,7 @@
     void init();
 
+
+
+
   protected:
     Material               backMat;
@@ -83,5 +89,5 @@
 
   private:
-    std::vector<SignalConnector*> widgetSignals;
+    std::vector<SignalConnector> widgetSignals;
 
     bool                   focusable;        //!< If this widget can receive focus.
Index: trunk/src/lib/gui/gl_gui/signal_connector.cc
===================================================================
--- trunk/src/lib/gui/gl_gui/signal_connector.cc	(revision 7840)
+++ trunk/src/lib/gui/gl_gui/signal_connector.cc	(revision 7855)
@@ -21,6 +21,39 @@
 {
 
+  SignalConnector::SignalConnector( )
+  {
+    this->object = NULL;
+    this->exec = NULL;
+  }
+
   SignalConnector::SignalConnector(BaseObject* object, const Executor* executor)
-      : object(object), exec(exec)
-  {};
+  {
+    this->object = object;
+    this->exec = executor;
+  };
+
+  SignalConnector::SignalConnector(const SignalConnector& signalConnector)
+  {
+    this->object = signalConnector.object;
+    this->exec = (signalConnector.exec == NULL) ? NULL : signalConnector.exec->clone();
+  }
+
+  SignalConnector::~SignalConnector()
+  {
+    delete exec;
+  }
+
+  SignalConnector& SignalConnector::operator=(const SignalConnector& signalConnector)
+  {
+    delete this->exec;
+    this->object = signalConnector.object;
+    this->exec = (signalConnector.exec == NULL) ? NULL : signalConnector.exec->clone();
+  }
+
+  void SignalConnector::operator()(const std::string& parameters) const
+  {
+    if (exec != NULL && object != NULL)
+      (*this->exec)(this->object, parameters);
+  }
+
 }
Index: trunk/src/lib/gui/gl_gui/signal_connector.h
===================================================================
--- trunk/src/lib/gui/gl_gui/signal_connector.h	(revision 7840)
+++ trunk/src/lib/gui/gl_gui/signal_connector.h	(revision 7855)
@@ -1,5 +1,5 @@
 /*!
  * @file signal_connector.h
- * @brief Definition of ...
+ * @brief Definition of a SignalConnector class
 */
 
@@ -11,17 +11,24 @@
 namespace OrxGui
 {
-  //! A class for ...
+  //! A class for Conncting Signals to Objects, inside of the GUI
   class SignalConnector
   {
   public:
+    SignalConnector();
     SignalConnector(BaseObject* object, const Executor* exec);
     SignalConnector(const SignalConnector& signalConnector);
-    ~SignalConnector() { delete exec; }
+    ~SignalConnector();
 
     SignalConnector& operator=(const SignalConnector& signalConnector);
 
+    void operator()(const std::string& parameters) const;
+    void execute(const std::string& parameters) const { (*this)(parameters); };
+
+    bool isClean() const { return (this->object == NULL || this->exec == NULL); }
+
+
   private:
-    const Executor*     exec;
-    BaseObject*         object;
+    BaseObject*          object;         //!< The object to call.
+    const Executor*      exec;           //!< The Executor, that will be called, on object.
   };
 }
