Index: /branches/new_class_id/src/lib/shell/shell_command.h
===================================================================
--- /branches/new_class_id/src/lib/shell/shell_command.h	(revision 9741)
+++ /branches/new_class_id/src/lib/shell/shell_command.h	(revision 9742)
@@ -10,4 +10,5 @@
 
 /// THIS IS USED TO LOAD CONSTANT AND STATIC FUNCTIONS EASILY.
+#include "executor/executor_substring.h"
 #include "executor/functor_member.h"
 #include "executor/functor_const_member.h"
Index: /branches/new_class_id/src/lib/util/Makefile.am
===================================================================
--- /branches/new_class_id/src/lib/util/Makefile.am	(revision 9741)
+++ /branches/new_class_id/src/lib/util/Makefile.am	(revision 9742)
@@ -8,5 +8,6 @@
 libORXexecutor_a_SOURCES = \
 		executor/executor.cc \
-		executor/executor_lua.cc
+		executor/executor_lua.cc \
+		executor/executor_substring.cc
 
 #		executor/executor_functional.cc
@@ -48,9 +49,11 @@
 		executor/executor_xml.h \
 		executor/executor_lua.h \
-		executor/functor_list.h \
+		executor/executor_substring.h \
 		executor/executor_generic.h \
 		executor/executor_member.h \
 		executor/executor_const_member.h \
 		executor/executor_static.h \
+		\
+		executor/functor_list.h \
 		executor/functor_generic.h \
 		executor/functor_member.h \
Index: /branches/new_class_id/src/lib/util/executor/executor_generic.h
===================================================================
--- /branches/new_class_id/src/lib/util/executor/executor_generic.h	(revision 9741)
+++ /branches/new_class_id/src/lib/util/executor/executor_generic.h	(revision 9742)
@@ -26,33 +26,4 @@
 
 #include "executor.h"
-#include "substring.h"
-
-
-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);
-template<> unsigned int fromString<unsigned int>(const std::string& input, unsigned int defaultValue);
-template<> float fromString<float>(const std::string& input, float defaultValue);
-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; };
-template<> bool getDefault<bool>(const MultiType* const defaultValues, unsigned int i);
-template<> int getDefault<int>(const MultiType* const defaultValues, unsigned int i);
-template<> unsigned int getDefault<unsigned int>(const MultiType* const defaultValues, unsigned int i);
-template<> float getDefault<float>(const MultiType* const defaultValues, unsigned int i);
-template<> char getDefault<char>(const MultiType* const defaultValues, unsigned int i);
-template<> const std::string& getDefault<const std::string&>(const MultiType* const defaultValues, unsigned int i);
-
-
 /**
  * @brief this is a Template Class used as an evaluater.
@@ -78,35 +49,11 @@
   ToType operator()(FromType& CallValue, const MultiType* const defaults)
   {
-    return defaultValue; /*(CallValue.size() > index) ?
-           fromString<ToType>(CallValue[index], getDefault<ToType>(defaults, index)) :
-    fromMulti<ToType>(defaults[index]); */
+    return defaultValue;
   }
-  static FromType& defaultValue() { return FromType(); };
-};
-
-/**
- * @brief to remove writing errors, this function is Used.
- * @param sub The SubString to use
- * @param default The default Values.
- */
-template<> class ExecutorEvaluater <const SubString>
-{
-public:
-  /** @brief Executes the Evaluater
-   * @param CallValue the Value that should be converted
-   * @param defaults the default Values.
-   */
-  template <typename ToType, int index>
-  ToType operator()(const SubString& CallValue, const MultiType* const defaults)
-  {
-    return (CallValue.size() > index) ?
-           fromString<ToType>(CallValue[index], getDefault<ToType>(defaults, index)) :
-           fromMulti<ToType>(defaults[index]);
-  }
-  static const SubString& defaultValue() { return SubString::NullSubString; };
-};
-
+  static FromType& defaultValue() { static FromType defaultValue; return defaultValue; };
+};
 #endif /* __EXECUTOR_GENERIC_H_ */
 
+#ifdef __EXECUTOR_FUNCTIONAL_NAME
 
 ///////////
@@ -135,7 +82,7 @@
    * @brief executes the Functional
    * @param object the Object the action should be executed on.
-   * @param sub the SubString to get the Parameters from.
-   */
-  virtual void operator()(BaseObject* object, CallType& sub = Evaluater<CallType>::defaultValue()) const
+   * @param eval the CallType to get the Parameters from.
+   */
+  virtual void operator()(BaseObject* object, CallType& eval = Evaluater<CallType>::defaultValue()) const
   {
     (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)();
@@ -181,10 +128,10 @@
    * @brief executes the Functional
    * @param object the Object the action should be executed on.
-   * @param sub the SubString to get the Parameters from.
-   */
-  virtual void operator()(BaseObject* object, CallType& sub = Evaluater<CallType>::defaultValue()) const
-  {
-    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
-      Evaluater<CallType>().template operator()<type0, 0>(sub, this->defaultValue));
+   * @param eval the CallType to get the Parameters from.
+   */
+  virtual void operator()(BaseObject* object, CallType& eval = Evaluater<CallType>::defaultValue()) const
+  {
+    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
+      Evaluater<CallType>().template operator()<type0, 0>(eval, this->defaultValue));
   };
 
@@ -228,11 +175,11 @@
    * @brief executes the Functional
    * @param object the Object the action should be executed on.
-   * @param sub the SubString to get the Parameters from.
-   */
-  virtual void operator()(BaseObject* object, CallType& sub = Evaluater<CallType>::defaultValue()) const
-  {
-    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
-      Evaluater<CallType>().template operator()<type0, 0>(sub, this->defaultValue),
-      Evaluater<CallType>().template operator()<type1, 1>(sub, this->defaultValue));
+   * @param eval the CallType to get the Parameters from.
+   */
+  virtual void operator()(BaseObject* object, CallType& eval = Evaluater<CallType>::defaultValue()) const
+  {
+    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
+      Evaluater<CallType>().template operator()<type0, 0>(eval, this->defaultValue),
+      Evaluater<CallType>().template operator()<type1, 1>(eval, this->defaultValue));
   };
 
@@ -276,12 +223,12 @@
    * @brief executes the Functional
    * @param object the Object the action should be executed on.
-   * @param sub the SubString to get the Parameters from.
-   */
-  virtual void operator()(BaseObject* object, CallType& sub = Evaluater<CallType>::defaultValue()) const
-  {
-    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
-      Evaluater<CallType>().template operator()<type0, 0>(sub, this->defaultValue),
-      Evaluater<CallType>().template operator()<type1, 1>(sub, this->defaultValue),
-      Evaluater<CallType>().template operator()<type2, 2>(sub, this->defaultValue));
+   * @param eval the CallType to get the Parameters from.
+   */
+  virtual void operator()(BaseObject* object, CallType& eval = Evaluater<CallType>::defaultValue()) const
+  {
+    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
+      Evaluater<CallType>().template operator()<type0, 0>(eval, this->defaultValue),
+      Evaluater<CallType>().template operator()<type1, 1>(eval, this->defaultValue),
+      Evaluater<CallType>().template operator()<type2, 2>(eval, this->defaultValue));
   };
 
@@ -325,13 +272,13 @@
   * @brief executes the Functional
   * @param object the Object the action should be executed on.
-  * @param sub the SubString to get the Parameters from.
-   */
-  virtual void operator()(BaseObject* object, CallType& sub = Evaluater<CallType>::defaultValue()) const
-  {
-    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
-      Evaluater<CallType>().template operator()<type0, 0>(sub, this->defaultValue),
-      Evaluater<CallType>().template operator()<type1, 1>(sub, this->defaultValue),
-      Evaluater<CallType>().template operator()<type2, 2>(sub, this->defaultValue),
-      Evaluater<CallType>().template operator()<type3, 3>(sub, this->defaultValue));
+  * @param eval the CallType to get the Parameters from.
+   */
+  virtual void operator()(BaseObject* object, CallType& eval = Evaluater<CallType>::defaultValue()) const
+  {
+    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
+      Evaluater<CallType>().template operator()<type0, 0>(eval, this->defaultValue),
+      Evaluater<CallType>().template operator()<type1, 1>(eval, this->defaultValue),
+      Evaluater<CallType>().template operator()<type2, 2>(eval, this->defaultValue),
+      Evaluater<CallType>().template operator()<type3, 3>(eval, this->defaultValue));
   };
 
@@ -376,14 +323,14 @@
   * @brief executes the Functional
   * @param object the Object the action should be executed on.
-  * @param sub the SubString to get the Parameters from.
-   */
-  virtual void operator()(BaseObject* object, CallType& sub = Evaluater<CallType>::defaultValue()) const
-  {
-    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
-      Evaluater<CallType>().template operator()<type0, 0>(sub, this->defaultValue),
-      Evaluater<CallType>().template operator()<type1, 1>(sub, this->defaultValue),
-      Evaluater<CallType>().template operator()<type2, 2>(sub, this->defaultValue),
-      Evaluater<CallType>().template operator()<type3, 3>(sub, this->defaultValue),
-      Evaluater<CallType>().template operator()<type4, 4>(sub, this->defaultValue));
+  * @param eval the CallType to get the Parameters from.
+   */
+  virtual void operator()(BaseObject* object, CallType& eval = Evaluater<CallType>::defaultValue()) const
+  {
+    (__EXECUTOR_FUNCTIONAL_FUNCTION_EXEC)(
+      Evaluater<CallType>().template operator()<type0, 0>(eval, this->defaultValue),
+      Evaluater<CallType>().template operator()<type1, 1>(eval, this->defaultValue),
+      Evaluater<CallType>().template operator()<type2, 2>(eval, this->defaultValue),
+      Evaluater<CallType>().template operator()<type3, 3>(eval, this->defaultValue),
+      Evaluater<CallType>().template operator()<type4, 4>(eval, this->defaultValue));
   };
 
@@ -398,3 +345,3 @@
 };
 
-//#endif /* __EXECUTOR_GENERIC_H_ */
+#endif /* __EXECUTOR_FUNCTIONAL_NAME */
Index: /branches/new_class_id/src/lib/util/executor/executor_substring.cc
===================================================================
--- /branches/new_class_id/src/lib/util/executor/executor_substring.cc	(revision 9742)
+++ /branches/new_class_id/src/lib/util/executor/executor_substring.cc	(revision 9742)
@@ -0,0 +1,81 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+#include "executor_substring.h"
+#include "helper_functions.h"
+
+template<> bool fromString<bool>(const std::string& input, bool defaultValue) { return isBool(input, defaultValue); };
+template<> int fromString<int>(const std::string& input, int defaultValue) { return isInt(input, defaultValue); };
+template<> unsigned int fromString<unsigned int>(const std::string& input, unsigned int defaultValue) { return isInt(input, defaultValue); };
+template<> float fromString<float>(const std::string& input, float defaultValue) { return isFloat(input, defaultValue); };
+template<> char fromString<char>(const std::string& input, char defaultValue) { return isInt(input, defaultValue); };
+template<> const std::string& fromString<const std::string&>(const std::string& input, const std::string& defaultValue) { return (input.size() > 0) ? 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.getConstString(); };
+
+
+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(); };
+template<> unsigned int getDefault<unsigned int>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getInt(); };
+template<> float getDefault<float>(const MultiType* const defaultValues, unsigned int i) { return defaultValues[i].getFloat(); };
+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 defaultValues[i].getStoredString(); };
+
+
+
+
+
+
+
+/**
+ * A LITTLE TESTING SUITE FOR THE EXECUTOR.
+ *
+#include "executor/executor_functional.h"
+
+#define EXECUTOR_FUNCTIONAL_USE_STATIC
+#include "executor/executor_functional.h"
+
+class TestClass : public BaseObject
+{
+  public:
+    TestClass() {};
+
+    void printTest() { printf ("TEST\n"); };
+    void printTestInt(int i) { printf ("%d\n", i); };
+    void printTestBool(bool b) { printf("%d\n", (int)b); };
+    void printTwoVals(int b, int i) { printf ("%d %d\n", b, i); };
+    void printStrings(const std::string& name) { printf("String:: '%s'\n", name.c_str()); };
+    static void printStatic() { printf("STATIC\n");};
+};
+
+void TEST()
+{
+  TestClass test;
+  SubString testStrings("1 SCHEISSE, 2, 3", ",", SubString::WhiteSpaces, false);
+  (*createExecutor<TestClass>(&TestClass::printTest))(&test, testStrings);
+  (*createExecutor<TestClass>(&TestClass::printTestInt))(&test, testStrings);
+  (*createExecutor<TestClass>(&TestClass::printTestBool))(&test, testStrings);
+  (*createExecutor<TestClass>(&TestClass::printTwoVals))(&test, testStrings);
+  (*createExecutor<TestClass>(&TestClass::printStatic))(&test, testStrings);
+  (*createExecutor<TestClass>(&TestClass::printStrings))(&test, testStrings);
+
+}
+*/
Index: /branches/new_class_id/src/lib/util/executor/executor_substring.h
===================================================================
--- /branches/new_class_id/src/lib/util/executor/executor_substring.h	(revision 9742)
+++ /branches/new_class_id/src/lib/util/executor/executor_substring.h	(revision 9742)
@@ -0,0 +1,79 @@
+/*!
+ * @file executor_generic.h
+ * Definition of a Generic Executor
+ */
+
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+
+
+#ifndef __EXECUTOR_SUBSTRING_H_
+#define __EXECUTOR_SUBSTRING_H_
+
+
+#include "executor_generic.h"
+#include "substring.h"
+
+
+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);
+template<> unsigned int fromString<unsigned int>(const std::string& input, unsigned int defaultValue);
+template<> float fromString<float>(const std::string& input, float defaultValue);
+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; };
+template<> bool getDefault<bool>(const MultiType* const defaultValues, unsigned int i);
+template<> int getDefault<int>(const MultiType* const defaultValues, unsigned int i);
+template<> unsigned int getDefault<unsigned int>(const MultiType* const defaultValues, unsigned int i);
+template<> float getDefault<float>(const MultiType* const defaultValues, unsigned int i);
+template<> char getDefault<char>(const MultiType* const defaultValues, unsigned int i);
+template<> const std::string& getDefault<const std::string&>(const MultiType* const defaultValues, unsigned int i);
+
+
+/**
+ * @brief to remove writing errors, this function is Used.
+ * @param sub The SubString to use
+ * @param default The default Values.
+ */
+template<> class ExecutorEvaluater <const SubString>
+{
+public:
+  /** @brief Executes the Evaluater
+   * @param CallValue the Value that should be converted
+   * @param defaults the default Values.
+   */
+  template <typename ToType, int index>
+  ToType operator()(const SubString& CallValue, const MultiType* const defaults)
+  {
+    return (CallValue.size() > index) ?
+           fromString<ToType>(CallValue[index], getDefault<ToType>(defaults, index)) :
+           fromMulti<ToType>(defaults[index]);
+  }
+  static const SubString& defaultValue() { return SubString::NullSubString; };
+};
+
+#endif /* __EXECUTOR_SUBSTRING_H_ */
Index: /branches/new_class_id/src/lib/util/loading/load_param.h
===================================================================
--- /branches/new_class_id/src/lib/util/loading/load_param.h	(revision 9741)
+++ /branches/new_class_id/src/lib/util/loading/load_param.h	(revision 9742)
@@ -24,4 +24,5 @@
 #include "base_object.h"
 
+#include "executor/executor_substring.h"
 #include "executor/executor_member.h"
 #include "executor/functor_member.h"
