Index: branches/new_class_id/src/lib/util/executor/executor.h
===================================================================
--- branches/new_class_id/src/lib/util/executor/executor.h	(revision 9715)
+++ branches/new_class_id/src/lib/util/executor/executor.h	(revision 9727)
@@ -18,6 +18,4 @@
   Executor_Objective         = 1,
   Executor_Static            = 2,
-
-  Executor_NoLoadString      = 8,
 } Executor_Type;
 
@@ -36,48 +34,92 @@
  *  Functions with many types (@see functor_list.h)
  */
-class Executor : public BaseObject
+class ExecutorBase : public BaseObject
 {
-  ObjectListDeclaration(Executor);
-  public:
-    virtual ~Executor();
+  ObjectListDeclaration(ExecutorBase);
+public:
+  //    virtual bool operator==(const Executor* executor) const = 0;
 
-    virtual Executor* clone () const = 0;
-//    virtual bool operator==(const Executor* executor) const = 0;
+  /** @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, const MultiType& param5 = MT_NULL,
-                            const MultiType& param6 = 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 objec the Object, @param count how many values, @param values the Values */
+  //     virtual void operator()(BaseObject* object, int& count, void* values) const = 0;
+  /** 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;
 
-    // EXECUTE
-    /** executes a Command. @param objec the Object, @param count how many values, @param values the Values */
-    virtual void operator()(BaseObject* object, int& count, void* values) const = 0;
-    /** 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;
+  // 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; };
+  /** @returns true if the Executor has a return Value. */
+  inline bool hasRetVal() const { return bRetVal; };
 
-    // 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; };
+  static void debug();
 
-    static void debug();
+protected:
+  ExecutorBase(bool hasRetVal = false,
+               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, const MultiType& param5 = MT_NULL,
+               const MultiType& param6 = MT_NULL);
 
-  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, const MultiType& param5 = MT_NULL,
-             const MultiType& param6 = MT_NULL);
+  // SETTING up the EXECUTOR
+  void 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, const MultiType& param5 = MT_NULL,
+                     const MultiType& param6 = MT_NULL);
 
-    void cloning(Executor* executor) const;
+  void cloning(ExecutorBase* 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[7];  //!< Default Values.
+protected:
+  short                       functorType;      //!< The type of Function we've got (either static or objective).
+  unsigned int                paramCount;       //!< the count of parameters.
+  MultiType                   defaultValue[7];  //!< Default Values.
+
+  bool                        bRetVal;          //!< True if the Executor has a return Value.
 };
+
+template <typename CallType> class Executor : public ExecutorBase
+{
+public:
+  virtual Executor<CallType>* clone () const = 0;
+
+  /** executes a Command. @param objec the Object, @param count how many values, @param values the Values */
+  virtual void operator()(BaseObject* object, CallType& values) const = 0;
+
+  /**
+   * @brief set the default values of the executor
+   * @param value0 the first default value
+   * @param value1 the second default value
+   * @param value2 the third default value
+   * @param value3 the fourth default value
+   * @param value4 the fifth default value
+   * @returns itself
+   * @note: THIS FUNCTION WILL BE REPLACED BY A CONFIGURATOR (most probably).
+  */
+  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, const MultiType& value5 = MT_NULL,
+                          const MultiType& value6 = MT_NULL)
+  {
+    this->ExecutorBase::defaultValues(value0, value1, value2, value3, value4, value5, value6);
+    return this;
+  }
+
+
+
+protected:
+  Executor(bool hasRetVal,
+	   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, const MultiType& param5 = MT_NULL,
+           const MultiType& param6 = MT_NULL)
+      : ExecutorBase(hasRetVal, param0, param1, param2, param3, param4, param5, param6)
+  {}
+};
+
+
 
 #include "executor/executor_functional.h"
