Index: /branches/gui/src/lib/gui/gl_gui/glgui_button.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_button.cc	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_button.cc	(revision 7985)
@@ -67,4 +67,15 @@
   }
 
+
+
+  void GLGuiButton::clicking(const Vector2D& pos)
+  {
+    emit(clicked());
+  }
+  void GLGuiButton::releasing(const Vector2D& pos)
+  {
+    emit(released());
+  }
+
   /**
    * @brief draws the GLGuiButton
Index: /branches/gui/src/lib/gui/gl_gui/glgui_button.h
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_button.h	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_button.h	(revision 7985)
@@ -32,12 +32,19 @@
   {
 
-  public:
-    GLGuiButton(const std::string& label);
-    virtual ~GLGuiButton();
+    public:
+      GLGuiButton(const std::string& label);
+      virtual ~GLGuiButton();
 
-    const std::string& getLabel() const { return this->label.getText(); };
-    void setLabel(const std::string& label);
+      const std::string& getLabel() const { return this->label.getText(); };
+      void setLabel(const std::string& label);
 
-    virtual void draw() const;
+      virtual void draw() const;
+
+      DeclareSignal0(released);
+      DeclareSignal0(clicked);
+
+    protected:
+      virtual void clicking(const Vector2D& pos);
+      virtual void releasing(const Vector2D& pos);
 
     private:
@@ -46,10 +53,10 @@
 
 
-  protected:
+    protected:
 
-    Text                 label;
+      Text                 label;
 
-  private:
-    ButtonState          state;
+    private:
+      ButtonState          state;
   };
 }
Index: /branches/gui/src/lib/gui/gl_gui/glgui_checkbutton.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_checkbutton.cc	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_checkbutton.cc	(revision 7985)
@@ -68,8 +68,8 @@
 
 
-  void GLGuiCheckButton::released(const Vector2D& pos)
+  void GLGuiCheckButton::releasing(const Vector2D& pos)
   {
     printf("%s released\n", this->getLabel().c_str());
-    GLGuiWidget::released(pos);
+    GLGuiButton::releasing(pos);
     this->toggleActiveState();
   }
Index: /branches/gui/src/lib/gui/gl_gui/glgui_checkbutton.h
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_checkbutton.h	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_checkbutton.h	(revision 7985)
@@ -26,5 +26,4 @@
     virtual ~GLGuiCheckButton();
 
-    virtual void released(const Vector2D& pos);
 
     bool    isActive() { return this->bActive; };
@@ -37,4 +36,5 @@
   protected:
     virtual void resize();
+    virtual void releasing(const Vector2D& pos);
 
   private:
Index: /branches/gui/src/lib/gui/gl_gui/glgui_cursor.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_cursor.cc	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_cursor.cc	(revision 7985)
@@ -91,5 +91,5 @@
       movement = Vector2D();
     }
-    this->setAbsCoor2D(newPos);
+    this->setAbsCoorSoft2D(newPos, 10);
   }
 
Index: /branches/gui/src/lib/gui/gl_gui/glgui_pushbutton.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_pushbutton.cc	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_pushbutton.cc	(revision 7985)
@@ -74,15 +74,15 @@
   }
 
-  void GLGuiPushButton::clicked(const Vector2D& pos)
+  void GLGuiPushButton::clicking(const Vector2D& pos)
   {
     printf("%s clicked\n", this->getLabel().c_str());
-    GLGuiWidget::clicked(pos);
+    GLGuiButton::clicking(pos);
   }
 
 
-  void GLGuiPushButton::released(const Vector2D& pos)
+  void GLGuiPushButton::releasing(const Vector2D& pos)
   {
     printf("%s released\n", this->getLabel().c_str());
-    GLGuiWidget::released(pos);
+    GLGuiButton::releasing(pos);
   }
 
Index: /branches/gui/src/lib/gui/gl_gui/glgui_pushbutton.h
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_pushbutton.h	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_pushbutton.h	(revision 7985)
@@ -27,8 +27,4 @@
 
 
-    virtual void receivedFocus();
-    virtual void removedFocus();
-    virtual void clicked(const Vector2D& pos);
-    virtual void released(const Vector2D& pos);
 
 
@@ -37,4 +33,9 @@
   protected:
     virtual void resize();
+    virtual void clicking(const Vector2D& pos);
+    virtual void releasing(const Vector2D& pos);
+    virtual void receivedFocus();
+    virtual void removedFocus();
+
 
 
Index: /branches/gui/src/lib/gui/gl_gui/glgui_slider.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_slider.cc	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_slider.cc	(revision 7985)
@@ -164,7 +164,7 @@
    * @param pos the position the Click occured (from the topleft corner out)
    */
-  void GLGuiSlider::clicked(const Vector2D& pos)
-  {
-    GLGuiWidget::clicked(pos);
+  void GLGuiSlider::clicking(const Vector2D& pos)
+  {
+    GLGuiWidget::clicking(pos);
 
     float sliderPosition = this->sliderPosition();
@@ -178,7 +178,7 @@
   }
 
-  void GLGuiSlider::released(const Vector2D& pos)
-  {
-    GLGuiWidget::released(pos);
+  void GLGuiSlider::releasing(const Vector2D& pos)
+  {
+    GLGuiWidget::releasing(pos);
     this->grabbed = false;
   }
Index: /branches/gui/src/lib/gui/gl_gui/glgui_slider.h
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_slider.h	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_slider.h	(revision 7985)
@@ -51,11 +51,11 @@
     virtual void draw() const;
 
-    DeclareSignal(valueChanged, (float));
+    DeclareSignal1(valueChanged, float);
 
   protected:
     virtual void resize();
 
-    virtual void clicked(const Vector2D& pos);
-    virtual void released(const Vector2D& pos);
+    virtual void clicking(const Vector2D& pos);
+    virtual void releasing(const Vector2D& pos);
     virtual void removedFocus();
 
Index: /branches/gui/src/lib/gui/gl_gui/glgui_widget.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_widget.cc	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_widget.cc	(revision 7985)
@@ -126,5 +126,5 @@
     this->_pushed = true;
 
-    this->clicked(pos);
+    this->clicking(pos);
   }
 
@@ -135,5 +135,5 @@
       this->widgetSignals[Signal_release]("none");
 
-      this->released(pos);
+      this->releasing(pos);
       this->_pushed = false;
     }
@@ -141,5 +141,5 @@
 
 
-  void GLGuiWidget::clicked(const Vector2D& pos)
+  void GLGuiWidget::clicking(const Vector2D& pos)
   {
     this->frontMaterial().setDiffuse(0, 0, 1);
@@ -147,5 +147,5 @@
   }
 
-  void GLGuiWidget::released(const Vector2D& pos)
+  void GLGuiWidget::releasing(const Vector2D& pos)
   {
     this->frontMaterial().setDiffuse(0,1,0);
Index: /branches/gui/src/lib/gui/gl_gui/glgui_widget.h
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/glgui_widget.h	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/glgui_widget.h	(revision 7985)
@@ -127,6 +127,6 @@
 
     // if something was clickt on the GUI-widget.
-    virtual void clicked(const Vector2D& pos);
-    virtual void released(const Vector2D& pos);
+    virtual void clicking(const Vector2D& pos);
+    virtual void releasing(const Vector2D& pos);
     virtual void receivedFocus();
     virtual void removedFocus();
Index: /branches/gui/src/lib/gui/gl_gui/signal_connector.cc
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/signal_connector.cc	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/signal_connector.cc	(revision 7985)
@@ -51,8 +51,15 @@
   }
 
-  void SignalConnector::operator()(const std::string& parameters) const
+
+  void SignalConnector::operator()() const
+  {
+    if (this->isValid())
+      (*this->exec)(this->object, 0, NULL);
+  }
+
+  void SignalConnector::operator()(const MultiType& value0) const
   {
     if (exec != NULL && object != NULL)
-      (*this->exec)(this->object, parameters);
+      (*this->exec)(this->object, 1, &value0);
   }
 
Index: /branches/gui/src/lib/gui/gl_gui/signal_connector.h
===================================================================
--- /branches/gui/src/lib/gui/gl_gui/signal_connector.h	(revision 7984)
+++ /branches/gui/src/lib/gui/gl_gui/signal_connector.h	(revision 7985)
@@ -11,21 +11,44 @@
 namespace OrxGui
 {
+
+  //////////////// TO BE IGNORED BY YOU /////
+#define DeclareSignalBegin(SignalName) \
+  public: \
+   void signal_ ## connect ## SignalName(const SignalConnector& connector) { \
+     SignalName ## connected.push_back(connector); \
+}\
+   Signal& getSignalVector_##SignalName () { return this->SignalName ## connected; }; \
+  private:
+
+#define DeclareSignalEnd(SignalName) \
+  Signal SignalName ## connected
+/////////////////////////////////////////////
+
+
   /**
    * @brief declares a new Signal.
    * @param SignalName the Name of the Signal.
-   * @param params the Parameters to be taken
    */
-#define DeclareSignal(SignalName, params) \
-  public: \
-   void signal_ ## connect ## SignalName(const SignalConnector& connector) { \
-     SignalName ## connected.push_back(connector); \
+#define DeclareSignal0(SignalName) \
+  DeclareSignalBegin(SignalName) \
+   void  SignalName () { \
+     for (unsigned int i = 0; i < SignalName ## connected .size(); i++) \
+       SignalName ## connected[i] (); \
    }\
-   Signal& getSignalVector_##SignalName () { return this->SignalName ## connected; }; \
-  private: \
-   void  SignalName params { \
+     DeclareSignalEnd(SignalName)
+
+
+  /**
+ * @brief declares a new Signal.
+ * @param SignalName the Name of the Signal.
+   */
+#define DeclareSignal1(SignalName, param0) \
+  DeclareSignalBegin(SignalName) \
+   void  SignalName (param0 val0) { \
      for (unsigned int i = 0; i < SignalName ## connected .size(); i++) \
-       SignalName ## connected[i] ("TEST"); \
-   }\
-   Signal SignalName ## connected
+       SignalName ## connected[i] (val0); \
+    }\
+    DeclareSignalEnd(SignalName)
+
 
    /**
@@ -60,7 +83,8 @@
     SignalConnector& operator=(const SignalConnector& signalConnector);
 
-    void operator()(const std::string& parameters) const;
-    void execute(const std::string& parameters) const { (*this)(parameters); };
+    void operator()() const;
+    void operator()(const MultiType& value0) const;
 
+    bool isValid() const { return (this->object && this->exec); };
     bool isClean() const { return (this->object == NULL || this->exec == NULL); }
 
Index: /branches/gui/src/lib/util/executor/executor.h
===================================================================
--- /branches/gui/src/lib/util/executor/executor.h	(revision 7984)
+++ /branches/gui/src/lib/util/executor/executor.h	(revision 7985)
@@ -38,41 +38,44 @@
 class Executor : public BaseObject
 {
-public:
-  virtual ~Executor();
+  public:
+    virtual ~Executor();
 
-  virtual Executor* clone () const = 0;
+    virtual Executor* clone () const = 0;
 
-  // SETTING up the EXECUTOR
-  Executor* defaultValues(const MultiType& value0 = MT_NULL, const MultiType& value1 = MT_NULL,
-                          const MultiType& value2 = MT_NULL, const MultiType& value3 = MT_NULL,
-                          const MultiType& value4 = MT_NULL);
-  /** @param i the i'th defaultValue, @returns reference to the MultiType */
-  inline MultiType& getDefaultValue(unsigned int i) { return defaultValue[i]; };
+    // SETTING up the EXECUTOR
+    Executor* defaultValues(const MultiType& value0 = MT_NULL, const MultiType& value1 = MT_NULL,
+                            const MultiType& value2 = MT_NULL, const MultiType& value3 = MT_NULL,
+                            const MultiType& value4 = MT_NULL);
+    /** @param i the i'th defaultValue, @returns reference to the MultiType */
+    inline MultiType& getDefaultValue(unsigned int i) { return defaultValue[i]; };
 
-  // EXECUTE
-  /** executes a Command @param object the object to apply this to @param parameters the parameters the command takes */
-  virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const = 0;
-  /** executes a Command @param object the object to apply this to @param parameters the parameters the command takes @brief here for your convenience*/
-  void execute (BaseObject* object, const std::string& parameters = "") const { (*this)(object, parameters); };
+    // EXECUTE
+    virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const = 0;
 
-  // RETRIEVE INFORMATION
-  /** @returns the Type of this Function (either static or objective) */
-  inline long getType() const { return this->functorType; };
-  /** @returns the Count of Parameters this Executor takes */
-  inline unsigned int getParamCount() const { return this->paramCount; };
+    /** executes a Command @param object the object to apply this to @param parameters the parameters the command takes */
+    virtual void operator()(BaseObject* object, const SubString& sub = SubString()) const = 0;
+    /** executes a Command @param object the object to apply this to @param parameters the parameters the command takes @brief here for your convenience*/
+    void execute (BaseObject* object, const std::string& parameters = "") const { (*this)(object, parameters); };
 
-  static void debug();
 
-protected:
-  Executor(const MultiType& param0 = MT_NULL, const MultiType& param1 = MT_NULL,
-           const MultiType& param2 = MT_NULL, const MultiType& param3 = MT_NULL,
-           const MultiType& param4 = MT_NULL);
+    // RETRIEVE INFORMATION
+    /** @returns the Type of this Function (either static or objective) */
+    inline long getType() const { return this->functorType; };
+    /** @returns the Count of Parameters this Executor takes */
+    inline unsigned int getParamCount() const { return this->paramCount; };
 
-  void cloning(Executor* executor) const;
+    static void debug();
 
-protected:
-  short                       functorType;      //!< The type of Function we've got (either static or objective).
-  unsigned int                paramCount;       //!< the count of parameters.
-  MultiType                   defaultValue[5];  //!< Default Values.
+  protected:
+    Executor(const MultiType& param0 = MT_NULL, const MultiType& param1 = MT_NULL,
+             const MultiType& param2 = MT_NULL, const MultiType& param3 = MT_NULL,
+             const MultiType& param4 = MT_NULL);
+
+    void cloning(Executor* executor) const;
+
+  protected:
+    short                       functorType;      //!< The type of Function we've got (either static or objective).
+    unsigned int                paramCount;       //!< the count of parameters.
+    MultiType                   defaultValue[5];  //!< Default Values.
 };
 
Index: /branches/gui/src/lib/util/executor/executor_functional.cc
===================================================================
--- /branches/gui/src/lib/util/executor/executor_functional.cc	(revision 7984)
+++ /branches/gui/src/lib/util/executor/executor_functional.cc	(revision 7985)
@@ -34,4 +34,13 @@
 template<> const std::string& fromString<const std::string&>(const std::string& input, const std::string& defaultValue) { return ExecutorFunctional_returningString_from = isString(input, defaultValue); };
 
+
+template<> bool fromMulti<bool>(const MultiType& multi) { return multi.getBool(); };
+template<> int fromMulti<int>(const MultiType& multi) { return multi.getInt(); }
+template<> unsigned int fromMulti<unsigned int>(const MultiType& multi) { return multi.getInt(); };
+template<> float fromMulti<float>(const MultiType& multi) { return multi.getFloat(); };
+template<> char fromMulti<char>(const MultiType& multi) { return multi.getChar(); };
+template<> const std::string& fromMulti<const std::string&>(const MultiType& multi) { return multi.getString(); };
+
+
 template<> bool getDefault<bool>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getBool(); };
 template<> int getDefault<int>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getInt(); };
@@ -40,4 +49,6 @@
 template<> char getDefault<char>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getChar(); };
 template<> const std::string& getDefault<const std::string&>(const MultiType* const defaultValues, unsigned int i) { return ExecutorFunctional_returningString_default = defaultValues[i].getString(); };
+
+
 
 
Index: /branches/gui/src/lib/util/executor/executor_functional.h
===================================================================
--- /branches/gui/src/lib/util/executor/executor_functional.h	(revision 7984)
+++ /branches/gui/src/lib/util/executor/executor_functional.h	(revision 7985)
@@ -33,5 +33,5 @@
 template<> MT_Type ExecutorParamType<const std::string&>();
 
-template<typename type> type fromString(const std::string& input, type defaultValue) {return defaultValue; };
+template<typename type> type fromString(const std::string& input, type defaultValue) { return defaultValue; };
 template<> bool fromString<bool>(const std::string& input, bool defaultValue);
 template<> int fromString<int>(const std::string& input, int defaultValue);
@@ -40,4 +40,13 @@
 template<> char fromString<char>(const std::string& input, char defaultValue);
 template<> const std::string& fromString<const std::string&>(const std::string& input, const std::string& defaultValue);
+
+template<typename type> type fromMulti(const MultiType& multi) { /* return defaultValue; */ };
+template<> bool fromMulti<bool>(const MultiType& multi);
+template<> int fromMulti<int>(const MultiType& multi);
+template<> unsigned int fromMulti<unsigned int>(const MultiType& multi);
+template<> float fromMulti<float>(const MultiType& multi);
+template<> char fromMulti<char>(const MultiType& multi);
+template<> const std::string& fromMulti<const std::string&>(const MultiType& multi);
+
 
 template<typename type> type getDefault(const MultiType* const defaultValues, unsigned int i) { return (type)0; };
@@ -81,4 +90,7 @@
 #endif /* EXECUTOR_FUNCTIONAL_USE_STATIC */
 
+///////////
+//// 0 ////
+///////////
 //! @brief ExecutorClass, that can execute Functions without any parameters.
 template<class T> class __EXECUTOR_FUNCTIONAL_NAME(0) : public Executor
@@ -110,4 +122,9 @@
   };
 
+  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
+  {
+    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)();
+  }
+
   /**
    * @brief copies the Executor
@@ -120,4 +137,9 @@
 };
 
+
+
+///////////
+//// 1 ////
+///////////
 //! @brief ExecutorClass, that can execute Functions with one parameter.
 template<class T, typename type0> class __EXECUTOR_FUNCTIONAL_NAME(1) : public Executor
@@ -138,4 +160,16 @@
     this->functionPointer = functionPointer;
   };
+
+  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
+  {
+    switch(count)
+    {
+      case 0:
+        return (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(fromMulti<type0>(this->defaultValue[0]));
+      default:
+       return (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(fromMulti<type0>(values[0]));
+    }
+  }
+
 
   /**
@@ -166,4 +200,7 @@
 };
 
+///////////
+//// 2 ////
+///////////
 //! @brief ExecutorClass, that can execute Functions with two parameters.
 template<class T, typename type0, typename type1> class __EXECUTOR_FUNCTIONAL_NAME(2) : public Executor
@@ -197,4 +234,8 @@
   };
 
+  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
+  {
+  }
+
   /**
    * @brief copies the Executor
@@ -208,4 +249,7 @@
 
 
+///////////
+//// 3 ////
+///////////
 //! @brief ExecutorClass, that can execute Functions with three parameters.
 template<class T, typename type0, typename type1, typename type2> class __EXECUTOR_FUNCTIONAL_NAME(3) : public Executor
@@ -240,4 +284,8 @@
   };
 
+  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
+  {
+  }
+
   /**
    * @brief copies the Executor
@@ -252,4 +300,7 @@
 
 
+///////////
+//// 4 ////
+///////////
 //! @brief ExecutorClass, that can execute Functions with four parameters.
 template<class T, typename type0, typename type1, typename type2, typename type3> class __EXECUTOR_FUNCTIONAL_NAME(4) : public Executor
@@ -285,4 +336,8 @@
   };
 
+  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
+  {
+  }
+
   /**
    * @brief copies the Executor
@@ -295,4 +350,9 @@
 };
 
+
+
+///////////
+//// 5 ////
+///////////
 //! @brief ExecutorClass, that can execute Functions with five parameters.
 template<class T, typename type0, typename type1, typename type2, typename type3, typename type4> class __EXECUTOR_FUNCTIONAL_NAME(5) : public Executor
@@ -329,4 +389,8 @@
   };
 
+  virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
+  {
+  }
+
   /**
    * @brief copies the Executor
Index: /branches/gui/src/lib/util/executor/executor_specials.h
===================================================================
--- /branches/gui/src/lib/util/executor/executor_specials.h	(revision 7984)
+++ /branches/gui/src/lib/util/executor/executor_specials.h	(revision 7985)
@@ -67,4 +67,9 @@
     }
 
+    virtual void operator()(BaseObject* object, unsigned int count, const MultiType* values) const
+    {
+
+    }
+
   private:
     /**
Index: /branches/gui/src/story_entities/simple_game_menu.cc
===================================================================
--- /branches/gui/src/story_entities/simple_game_menu.cc	(revision 7984)
+++ /branches/gui/src/story_entities/simple_game_menu.cc	(revision 7985)
@@ -67,5 +67,6 @@
   ///(this is as modular as it is possible).
   OrxGui::GLGuiPushButton* pb = new OrxGui::GLGuiPushButton("PUSH ME");
-  pb->connectSignal(OrxGui::Signal_release, this, createExecutor<SimpleGameMenu>(&SimpleGameMenu::enterGui));
+  //pb->connectSignal(OrxGui::Signal_release, this, createExecutor<SimpleGameMenu>(&SimpleGameMenu::enterGui));
+  pb->connect(SIGNAL(pb, released), this, SLOT(SimpleGameMenu, enterGui));
   pb->show();
   pb->setAbsCoor2D(50, 50);
Index: /branches/gui/src/story_entities/simple_game_menu.h
===================================================================
--- /branches/gui/src/story_entities/simple_game_menu.h	(revision 7984)
+++ /branches/gui/src/story_entities/simple_game_menu.h	(revision 7985)
@@ -69,5 +69,5 @@
     void quitMenu();
 
-    void TEST(float val) { printf("TEST %f\n", val); }
+    void TEST(int val) { printf("TEST %d\n", val); }
 
   protected:
