Index: trunk/src/lib/util/executor/executor.cc
===================================================================
--- trunk/src/lib/util/executor/executor.cc	(revision 7198)
+++ trunk/src/lib/util/executor/executor.cc	(revision 7199)
@@ -45,5 +45,4 @@
   this->setClassID(CL_EXECUTOR, "Executor");
 
-
   // What Parameters have we got
   this->defaultValue[0] = param0;
@@ -53,4 +52,5 @@
   this->defaultValue[4] = param4;
 
+  this->paramCount = 0;
   for (unsigned int i = 0; i < FUNCTOR_MAX_ARGUMENTS; i++)
   {
@@ -61,5 +61,4 @@
     }
   }
-  assert (paramCount <= FUNCTOR_MAX_ARGUMENTS);
 }
 
@@ -109,14 +108,5 @@
   {
     if (*value[i] != MT_NULL)
-    {
-      if (this->defaultValue[i].getType() == value[i]->getType())
-      {
-        this->defaultValue[i] = *value[i];
-      }
-      else
-      {
-        PRINTF(1)("Unable to set this Value, as it is not of type %s\n", MultiType::MultiTypeToString(this->defaultValue[i].getType()));
-      }
-    }
+        this->defaultValue[i].setValueOf(*value[i]);
   }
   return this;
Index: trunk/src/lib/util/executor/executor.h
===================================================================
--- trunk/src/lib/util/executor/executor.h	(revision 7198)
+++ trunk/src/lib/util/executor/executor.h	(revision 7199)
@@ -13,6 +13,4 @@
 #include "substring.h"
 #include "functor_list.h" //< MUST BE INCLUDED HERE AT LEAST ONCE.
-
-#include <stdarg.h>
 
 //! an enumerator for the definition of the Type.
@@ -89,5 +87,5 @@
 #define   l_FLOAT_DEFGRAB(i)        this->defaultValue[i].getFloat()
 //! where to chek for default STRING values
-#define   l_STRING_DEFGRAB(i)       this->defaultValue[i].getString()
+#define   l_CSTRING_DEFGRAB(i)      this->defaultValue[i].getCString()
 
 //////////////////////////
Index: trunk/src/lib/util/executor/functor_list.h
===================================================================
--- trunk/src/lib/util/executor/functor_list.h	(revision 7198)
+++ trunk/src/lib/util/executor/functor_list.h	(revision 7199)
@@ -21,5 +21,5 @@
    l_SHORT:     short
    l_FLOAT:     float
-   l_STRING:    const char*
+   l_CSTRING:    const char*
    l_XML_ELEM:  TiXmlElement*
  */
@@ -60,5 +60,5 @@
 // #define l_SHORT_FUNC       atoi                 //!< The function to parse a SHORT
 // #define l_SHORT_NAME       "short"              //!< The name of a SHORT
-//#define l_SHORT_PARAM       ParameterShort       //!< the type of the parameter SHORT
+// #define l_SHORT_PARAM      ParameterShort       //!< the type of the parameter SHORT
 // #define l_SHORT_DEFAULT    0                    //!< a default Value for a SHORT
 
@@ -74,5 +74,11 @@
 //#define l_VECTOR_DEFAULT   Vector(0,0,0)        //!< Default value for a VECTOR
 
-#define l_STRING_TYPE      const char*          //!< The type of a STRING
+#define l_CSTRING_TYPE     const char*          //!< The type of a STRING
+#define l_CSTRING_FUNC     isString             //!< The function to parse a STRING
+#define l_CSTRING_NAME     "string"             //!< The name of a STRING
+#define l_CSTRING_PARAM    MT_STRING            //!< the type of the parameter STRING
+#define l_CSTRING_DEFAULT  ""                   //!< a default Value for an STRING
+
+#define l_STRING_TYPE      const std::string&   //!< The type of a STRING
 #define l_STRING_FUNC      isString             //!< The function to parse a STRING
 #define l_STRING_NAME      "string"             //!< The name of a STRING
@@ -93,11 +99,11 @@
   FUNCTOR_LIST(0)();
   //! makes functions with one string
-  FUNCTOR_LIST(1)(l_STRING);
+  FUNCTOR_LIST(1)(l_CSTRING);
   //! makes functions with two strings
-  FUNCTOR_LIST(2)(l_STRING, l_STRING);
+  FUNCTOR_LIST(2)(l_CSTRING, l_CSTRING);
   //! makes functions with three strings
-  FUNCTOR_LIST(3)(l_STRING, l_STRING, l_STRING);
+  FUNCTOR_LIST(3)(l_CSTRING, l_CSTRING, l_CSTRING);
   //! makes functions with four strings
-  FUNCTOR_LIST(4)(l_STRING, l_STRING, l_STRING, l_STRING);
+  FUNCTOR_LIST(4)(l_CSTRING, l_CSTRING, l_CSTRING, l_CSTRING);
 
   //! makes functions with one bool
@@ -135,9 +141,9 @@
 
   //! mixed values:
-  FUNCTOR_LIST(2)(l_STRING, l_FLOAT);
+  FUNCTOR_LIST(2)(l_CSTRING, l_FLOAT);
   FUNCTOR_LIST(2)(l_UINT, l_LONG);
-  FUNCTOR_LIST(2)(l_STRING, l_UINT);
+  FUNCTOR_LIST(2)(l_CSTRING, l_UINT);
 
-  FUNCTOR_LIST(3)(l_STRING, l_FLOAT, l_UINT);
+  FUNCTOR_LIST(3)(l_CSTRING, l_FLOAT, l_UINT);
 
 
Index: trunk/src/lib/util/loading/resource_manager.cc
===================================================================
--- trunk/src/lib/util/loading/resource_manager.cc	(revision 7198)
+++ trunk/src/lib/util/loading/resource_manager.cc	(revision 7199)
@@ -451,5 +451,5 @@
         tmpResource->param[0] = param0;
         tmpResource->param[1] = param1;
-        tmpResource->pointer = new MD2Data(fullName, tmpResource->param[0].getString(), tmpResource->param[1].getFloat());
+        tmpResource->pointer = new MD2Data(fullName, tmpResource->param[0].getCString(), tmpResource->param[1].getFloat());
       }
       break;
@@ -520,5 +520,5 @@
         {
           MultiType param = param0; /// HACK
-          char* secFullName = ResourceManager::getFullName(param.getString());
+          char* secFullName = ResourceManager::getFullName(param.getCString());
           if (ResourceManager::isFile(secFullName))
           {
@@ -747,7 +747,7 @@
   int len = strlen(ResourceManager::ResourceTypeToChar(this->resourceList[i]->type));
   len += strlen(this->resourceList[i]->name);
-  if (this->resourceList[i]->param[0].getString()) len += strlen(this->resourceList[i]->param[0].getString()) +1;
-  if (this->resourceList[i]->param[1].getString()) len += strlen(this->resourceList[i]->param[1].getString()) +1;
-  if (this->resourceList[i]->param[2].getString()) len += strlen(this->resourceList[i]->param[2].getString()) +1;
+  if (this->resourceList[i]->param[0].getCString()) len += strlen(this->resourceList[i]->param[0].getCString()) +1;
+  if (this->resourceList[i]->param[1].getCString()) len += strlen(this->resourceList[i]->param[1].getCString()) +1;
+  if (this->resourceList[i]->param[2].getCString()) len += strlen(this->resourceList[i]->param[2].getCString()) +1;
   len += 10;
   char* tmp = new char[len];
@@ -756,18 +756,18 @@
   strcat(tmp,",");
   strcat (tmp, this->resourceList[i]->name);
-  if (this->resourceList[i]->param[0].getString() && this->resourceList[i]->param[0].getString() != '\0')
+  if (this->resourceList[i]->param[0].getCString() && this->resourceList[i]->param[0].getCString() != '\0')
   {
     strcat(tmp,",");
-    strcat( tmp, this->resourceList[i]->param[0].getString());
-  }
-  if (this->resourceList[i]->param[1].getString() && this->resourceList[i]->param[1].getString() != '\0')
+    strcat( tmp, this->resourceList[i]->param[0].getCString());
+  }
+  if (this->resourceList[i]->param[1].getCString() && this->resourceList[i]->param[1].getCString() != '\0')
   {
     strcat(tmp,",");
-    strcat( tmp, this->resourceList[i]->param[1].getString());
-  }
-  if (this->resourceList[i]->param[2].getString() && this->resourceList[i]->param[2].getString() != '\0')
+    strcat( tmp, this->resourceList[i]->param[1].getCString());
+  }
+  if (this->resourceList[i]->param[2].getCString() && this->resourceList[i]->param[2].getCString() != '\0')
   {
     strcat(tmp,",");
-    strcat( tmp, this->resourceList[i]->param[2].getString());
+    strcat( tmp, this->resourceList[i]->param[2].getCString());
   }
   return tmp;
Index: trunk/src/lib/util/multi_type.cc
===================================================================
--- trunk/src/lib/util/multi_type.cc	(revision 7198)
+++ trunk/src/lib/util/multi_type.cc	(revision 7199)
@@ -23,4 +23,5 @@
 #include <string.h>
 #include <stdio.h>
+#include <sstream>
 
 #ifdef DEBUG
@@ -31,5 +32,5 @@
 
 /**
- * creates a multiType without any stored value at all.
+ * @brief creates a multiType without any stored value at all.
  */
 MultiType::MultiType(MT_Type type)
@@ -39,5 +40,5 @@
 }
 /**
- * creates a multiType out of a boolean
+ * @brief creates a multiType out of a boolean
  * @param value the Value of this MulitType
  */
@@ -49,5 +50,5 @@
 
 /**
- * creates a multiType out of an integer
+ * @brief creates a multiType out of an integer
  * @param value the Value of this MulitType
  */
@@ -59,5 +60,5 @@
 
 /**
- * creates a multiType out of a float (double)
+ * @brief creates a multiType out of a float (double)
  * @param value the Value of this MulitType
  */
@@ -69,5 +70,5 @@
 
 /**
- * creates a multiType out of a char
+ * @brief creates a multiType out of a char
  * @param value the Value of this MulitType
  */
@@ -79,5 +80,5 @@
 
 /**
- * creates a multiType out of a String
+ * @brief creates a multiType out of a C-String
  * @param value the Value of this MulitType
  */
@@ -88,23 +89,32 @@
 }
 
+/**
+ * @brief creates a multiType out of a String
+ * @param value the Value of this MulitType
+ */
+MultiType::MultiType(const std::string& value)
+{
+  this->init();
+  this->setString(value);
+}
+
+/**
+ * @brief constructs a new MultiType from another one (copy)
+ */
 MultiType::MultiType(const MultiType& multiType)
 {
-  this->init();
   *this = multiType;
 }
 
 /**
- * standard deconstructor
+ * @brief standard deconstructor
 */
 MultiType::~MultiType ()
-{
-  if (this->storedString != NULL)
-    delete[] this->storedString;
-}
-
-/**
- * copy Constructor
+{ }
+
+/**
+ * @brief copy operator
  * @param mt: the entity to copy
- * @returns a Copy of itself. (strings inside are copied as well)
+ * @returns A Copy of itself. (strings inside are copied as well)
  */
 MultiType& MultiType::operator= (const MultiType& mt)
@@ -112,10 +122,6 @@
   this->type = mt.type;
   this->value = mt.value;
-  if (mt.type == MT_STRING && mt.storedString != NULL)
-  {
-    this->setString(mt.storedString);
-  }
-  else
-    this->storedString = NULL;
+  this->storedString = mt.storedString;
+
   return *this;
 }
@@ -148,51 +154,67 @@
       return (this->value.Float == mt.value.Float);
     case MT_STRING:
-      if (this->value.String != NULL && mt.value.String != NULL)
-        return (!strcmp(this->value.String, mt.value.String));
-      else
-        return (this->value.String == NULL && mt.value.String == NULL);
-  }
-}
-
-/**
- * @brief checks if the internal value matches the boolean value.
- * @param value to check against this one
- * @returns true on match. false otherwise
+      return (this->storedString == mt.storedString);
+  }
+}
+
+
+/**
+ * @brief initializes the MultiType
+ */
+void MultiType::init()
+{
+  this->type = MT_NULL;
+  this->value.Float = 0.0f;
+}
+
+
+/**
+ * @brief sets the type of this MultiType and resets to the default value
+ * @param type the new Type
+ */
+void MultiType::setType(MT_Type type)
+{
+  if (this->type == type)
+    return;
+
+  switch (type)
+  {
+    case MT_BOOL:
+      this->setBool(this->getBool());
+      break;
+    case MT_INT:
+      this->setInt(this->getInt());
+      break;
+    case MT_FLOAT:
+      this->setFloat(this->getFloat());
+      break;
+    case MT_CHAR:
+      this->setChar(this->getChar());
+      break;
+    case MT_STRING:
+      this->setString(this->getString());
+      break;
+  }
+}
+
+/**
+ * @brief sets the Value of mt without changing the type of this MultiType
+ * @param mt: the MultiType to get the value from
  *
- * Two MultiType match if and only if
- *  1. the stored values match the given Value
- */
-bool MultiType::operator==(const char* value) const
-{
-  if (this->value.String != NULL && value != NULL)
-    return (!strcmp(this->value.String, value));
-  else
-    return (this->value.String == NULL && value == NULL);
-}
-
-
-/**
- * initializes the MultiType
- */
-void MultiType::init()
-{
-  this->type = MT_NULL;
-  this->storedString = NULL;
-  this->value.Float = 0.0f;
-}
-
-
-/**
- * sets the type of this MultiType and resets to the default value
- * @param type the new Type
- */
-void MultiType::setType(MT_Type type)
-{
-  if (this->type != type)
-    this->type = type;
-}
-
-/**
- * sets a new Value to the MultiType
+ * This is a pure Value copy. The current type will be preserved.
+ *
+ * @TODO speedup
+ */
+void MultiType::setValueOf(const MultiType& mt)
+{
+  MT_Type prevType = this->type;
+
+  *this = mt;
+  this->setType(prevType);
+}
+
+
+/**
+ * @brief sets a new Value to the MultiType
  * @param value the new Value as a bool
  */
@@ -204,5 +226,5 @@
 
 /**
- * sets a new Value to the MultiType
+ * @brief sets a new Value to the MultiType
  * @param value the new Value as an int
  */
@@ -214,5 +236,5 @@
 
 /**
- * sets a new Value to the MultiType
+ * @brief sets a new Value to the MultiType
  * @param value the new Value as a float
  */
@@ -224,5 +246,5 @@
 
 /**
- * sets a new Value to the MultiType
+ * @brief sets a new Value to the MultiType
  * @param value the new Value as a char
  */
@@ -234,33 +256,17 @@
 
 /**
- * sets a new Value to the MultiType
+ * @brief sets a new Value to the MultiType
  * @param value the new Value as a String
  */
-void MultiType::setString(const char* value)
+void MultiType::setString(const std::string& value)
 {
   this->type = MT_STRING;
-
-  if (this->storedString != NULL)
-    delete[] this->storedString;
-
-  if (value == NULL)
-  {
-    this->storedString = new char[1];
-    this->storedString[0] = '\0';
-    this->value.String = this->storedString;
-    return;
-  }
-  else
-  {
-    this->storedString = new char[strlen(value)+1];
-    strcpy(storedString, value);
-    this->value.String = this->storedString;
-  }
-}
-
-
-
-
-
+  this->storedString = value;
+}
+
+
+/**************************
+*** RETRIEVAL FUNCTIONS ***
+**************************/
 /**
  * @returns the Value of this MultiType as a int
@@ -275,5 +281,7 @@
   else if (this->type & MT_FLOAT) return (this->value.Float == 0.0f)? false : true;
   else if (this->type & MT_CHAR) return (this->value.Char == '\0')? false : true;
-  else if (this->type & MT_STRING && this->value.String != NULL) return (!strncmp(this->value.String, "true", 4) || !strncmp(this->value.String, "TRUE", 4) || !strncmp(this->value.String, "1", 1))? true : false; //! @TODO make this better.
+  else if (this->type & MT_STRING) return (this->storedString == "true" ||
+                                            this->storedString == "TRUE" ||
+                                            this->storedString != "0"); //! @TODO make this better...
 
   return false;
@@ -291,16 +299,17 @@
   else if (this->type & MT_FLOAT) return (int) this->value.Float;
   else if (this->type & MT_CHAR) return (int) this->value.Char;
-  else if (this->type & MT_STRING && this->value.String != NULL) {
+  else if (this->type & MT_STRING)
+  {
     char* endPtr = NULL;
-    int result = strtol(this->value.String, &endPtr, 10);
-    if ( endPtr >= this->value.String && endPtr < this->value.String + strlen(this->value.String))
+    int result = strtol(this->storedString.c_str(), &endPtr, 10);
+    if ( endPtr >= this->storedString.c_str() && endPtr < this->storedString.c_str() + strlen(this->storedString.c_str()))
       return 0;
     else
       return result;
   }
-
   return 0;
 }
 
+
 /**
  * @returns the Value of this MultiType as a float
@@ -308,5 +317,5 @@
 float MultiType::getFloat() const
 {
- // default case:
+  // default case:
   if (this->type & MT_FLOAT)
     return this->value.Float;
@@ -314,13 +323,13 @@
   else if (this->type & MT_INT) return (float) this->value.Int;
   else if (this->type & MT_CHAR) return (float) this->value.Char;
-  else if (this->type & MT_STRING && this->value.String != NULL) {
+  else if (this->type & MT_STRING)
+  {
     char* endPtr = NULL;
-    double result = strtod(this->value.String, &endPtr);
-    if ( endPtr >= this->value.String && endPtr < this->value.String + strlen(this->value.String))
+    double result = strtod(this->storedString.c_str(), &endPtr);
+    if ( endPtr >= this->storedString.c_str() && endPtr < this->storedString.c_str() + strlen(this->storedString.c_str()))
       return 0.0f;
     else
       return result;
   }
-
   return 0.0f;
 }
@@ -332,5 +341,5 @@
 char MultiType::getChar() const
 {
- // default case:
+  // default case:
   if (this->type & MT_INT)
     return this->value.Int;
@@ -338,56 +347,62 @@
   else if (this->type & MT_INT) return (int) this->value.Int;
   else if (this->type & MT_FLOAT) return (char) this->value.Float;
-  else if (this->type & MT_STRING && this->value.String != NULL) return *this->value.String;
+  else if (this->type & MT_STRING) return this->storedString[0];
 
   return '\0';
 }
 
+
 /**
  * @returns the Value of this MultiType as a String
  */
-const char* MultiType::getString()
-{
- // default case:
+std::string MultiType::getString() const
+{
+  // default case:
   if (this->type & MT_STRING)
-    return (this->value.String != NULL)? this->value.String : "";
+    return this->storedString;
   else
   {
     if (this->type & MT_BOOL) return (this->value.Bool)? "true" : "false";
-    char tmpString[128];
-    if (this->storedString != NULL)
-    {
-      delete[] this->storedString;
-      this->storedString = NULL;
-    }
+
     if (this->type & MT_CHAR)
     {
-      this->storedString = new char[2];
-      this->storedString[0] = this->value.Char;
-      this->storedString[1] = '\0';
-      return this->storedString;
+      char tmpString[2];
+      tmpString[0] = this->value.Char;
+      tmpString[1] = '\0';
+      return tmpString;
     }
     else if (this->type & MT_INT)
     {
+      char tmpString[32];
       sprintf(tmpString, "%d", this->value.Int);
-      this->storedString = new char[strlen(tmpString)+1];
-      strcpy (this->storedString, tmpString);
-      return this->storedString;
+      return tmpString;
     }
-    if (this->type & MT_FLOAT)
+    else if (this->type & MT_FLOAT)
     {
+      char tmpString[64];
       sprintf(tmpString, "%f", this->value.Float);
-      this->storedString = new char[strlen (tmpString)+1];
-      strcpy (this->storedString, tmpString);
-      return this->storedString;
+      return tmpString;
     }
   }
-
   return "";
 }
 
 /**
- * prints out some nice debug output
- */
-void MultiType::debug()
+ * @returns a formated c-string of the held value
+ */
+const char* MultiType::getCString()
+{
+  if (this->type & MT_STRING) return this->storedString.c_str();
+  else
+  {
+    this->storedString = this->getString();
+    return this->storedString.c_str();
+  }
+}
+
+/**
+ * @brief prints out some nice debug output
+ */
+void MultiType::debug() const
 {
 #ifdef DEBUG
@@ -396,18 +411,17 @@
   printf
 #endif
-      ("MultiType of Type '%s' :: Values: BOOL: '%d', INT: '%d', FLOAT: '%f', CHAR: '%c', STRING '%s'\n",
-         MultiType::MultiTypeToString(this->type),
-         this->getBool(),
-         this->getInt(),
-         this->getFloat(),
-         this->getChar(),
-         this->getString()
-      );
-
-
-}
-
-/**
- * Resets the MultiType to default values.
+  ("MultiType of Type '%s' :: Values: BOOL: '%d', INT: '%d', FLOAT: '%f', CHAR: '%c', STRING '%s'\n",
+   MultiType::MultiTypeToString(this->type),
+   this->getBool(),
+   this->getInt(),
+   this->getFloat(),
+   this->getChar(),
+   this->getString().c_str()
+  );
+}
+
+
+/**
+ * @brief Resets the MultiType to default values.
  */
 void MultiType::reset()
@@ -438,5 +452,5 @@
 
 /**
- * converts a MT_Type into a String
+ * @brief converts a MT_Type into a String
  * @param type: the MT_Type
  * @returns: the Type as a constant String (do not delete)
@@ -446,21 +460,21 @@
   switch ( type )
   {
-   default:
-    return "NONE";
-   case MT_BOOL:
-    return "bool";
-   case MT_INT:
-    return "int";
-   case MT_FLOAT:
-    return "float";
-   case MT_CHAR:
-    return "char";
-   case MT_STRING:
-    return "string";
-  }
-}
-
-/**
- * converts a String into a MT_Type
+    default:
+      return "NONE";
+    case MT_BOOL:
+      return "bool";
+    case MT_INT:
+      return "int";
+    case MT_FLOAT:
+      return "float";
+    case MT_CHAR:
+      return "char";
+    case MT_STRING:
+      return "string";
+  }
+}
+
+/**
+ * @brief converts a String into a MT_Type
  * @param type: the Type as a String
  * @returns: the Type as MT_Type
Index: trunk/src/lib/util/multi_type.h
===================================================================
--- trunk/src/lib/util/multi_type.h	(revision 7198)
+++ trunk/src/lib/util/multi_type.h	(revision 7199)
@@ -1,9 +1,11 @@
 /*!
  * @file multi_type.h
- * @brief Definition of ...
+ * @brief Definition of a MultiType, that is able to hold one Value of many types.
  */
 
 #ifndef _MULTI_TYPE_H
 #define _MULTI_TYPE_H
+
+#include <string>
 
 // FORWARD DECLARATION
@@ -38,4 +40,5 @@
     MultiType(char value);
     MultiType(const char* value);
+    MultiType(const std::string& value);
     MultiType(const MultiType& multiType);
     virtual ~MultiType();
@@ -47,4 +50,5 @@
     MultiType& operator=(char value) { this->setChar(value); return *this; };
     MultiType& operator=(const char* value) { this->setString(value); return *this; };
+    MultiType& operator=(const std::string& value) { this->setString(value); return *this; };
 
     bool operator==(const MultiType& mt) const;
@@ -53,5 +57,5 @@
     bool operator==(float value) const { return (this->getFloat() ==  value); };
     bool operator==(char value) const { return (this->getChar() == value); };
-    bool operator==(const char* value) const;
+    bool operator==(const std::string& value) const { return (this->getString() == value); };
     bool operator==(MT_Type type) const { return (this->type == type); }
     bool operator!=(MT_Type type) const { return (this->type != type); }
@@ -63,5 +67,5 @@
     void setFloat(float value);
     void setChar(char value);
-    void setString(const char* value);
+    void setString(const std::string& value);
 
     // for your convenience.
@@ -71,4 +75,6 @@
     inline void setValue(char value) { this->setChar(value); };
     inline void setValue(const char* value) { this->setString(value); };
+    inline void setValue(const std::string& value) { this->setString(value); };
+    void setValueOf(const MultiType& mt);
 
     /** @returns the Type of the Value stored in this MultiType */
@@ -81,9 +87,10 @@
     float getFloat() const;
     char getChar() const;
-    const char* getString();
+    const char* getCString();
+    std::string getString() const;
 
     void reset();
 
-    void debug();
+    void debug() const;
 
     static const char* MultiTypeToString(MT_Type type);
@@ -101,11 +108,10 @@
       float             Float;
       char              Char;
-      char*             String;
-
+//      std::string*      String;
     }                   value;
 
     MT_Type             type;
 
-    char*               storedString;
+    std::string         storedString;
 };
 
