Index: trunk/src/lib/shell/shell_command.cc
===================================================================
--- trunk/src/lib/shell/shell_command.cc	(revision 5640)
+++ trunk/src/lib/shell/shell_command.cc	(revision 5641)
@@ -36,5 +36,5 @@
  * @param paramCount the count of parameters this command takes
  */
-ShellCommand::ShellCommand(const char* commandName, const char* className, Executor* executor)
+ShellCommand::ShellCommand(const char* commandName, const char* className, const Executor& executor)
 {
   this->setClassID(CL_SHELL_COMMAND, "ShellCommand");
@@ -54,5 +54,5 @@
   this->defaultValue = new MultiType[paramCount];
 
-  this->executor = executor;
+  this->executor = executor.clone();
 }
 
@@ -69,4 +69,5 @@
     delete this->alias;
   }
+  delete this->executor;
 }
 
@@ -74,5 +75,5 @@
  * registers a new ShellCommand
  */
-ShellCommand* ShellCommand::registerCommand(const char* commandName, const char* className, Executor* executor)
+ShellCommand* ShellCommand::registerCommand(const char* commandName, const char* className, const Executor& executor)
 {
   if (ShellCommand::isRegistered(commandName, className, executor))
@@ -132,5 +133,5 @@
  * This is checked in the registerCommand-function.
  */
-bool ShellCommand::isRegistered(const char* commandName, const char* className, Executor* executor)
+bool ShellCommand::isRegistered(const char* commandName, const char* className, const Executor& executor)
 {
   if (ShellCommandClass::commandClassList == NULL)
Index: trunk/src/lib/shell/shell_command.h
===================================================================
--- trunk/src/lib/shell/shell_command.h	(revision 5640)
+++ trunk/src/lib/shell/shell_command.h	(revision 5641)
@@ -41,5 +41,5 @@
 //        ShellCommand* shell_command_##class##_##command = ShellCommand<class>::registerCommand(#command, #class, &class::function)
 #define SHELL_COMMAND(command, class, function) \
-           ShellCommand* shell_command_##class##_##command = ShellCommand::registerCommand(#command, #class, new ExecutorObjective<class>(&class::function))
+           ShellCommand* shell_command_##class##_##command = ShellCommand::registerCommand(#command, #class, ExecutorObjective<class>(&class::function))
 
 /**
@@ -57,5 +57,5 @@
  */
 #define SHELL_COMMAND_STATIC(command, class, function) \
-           ShellCommand* shell_command_##class##_##command = ShellCommand::registerCommand(#command, #class, new ExecutorStatic<class>(function))
+           ShellCommand* shell_command_##class##_##command = ShellCommand::registerCommand(#command, #class, ExecutorStatic<class>(function))
 
 
@@ -72,5 +72,5 @@
     ShellCommand* defaultValues(unsigned int count, ...);
 
-    static ShellCommand* registerCommand(const char* commandName, const char* className, Executor* executor);
+    static ShellCommand* registerCommand(const char* commandName, const char* className, const Executor& executor);
 
     static void unregisterCommand(const char* commandName, const char* className);
@@ -79,12 +79,11 @@
 
   protected:
-    ShellCommand(const char* commandName, const char* className, Executor* executor);
+    ShellCommand(const char* commandName, const char* className, const Executor& executor);
     ~ShellCommand();
 
-    static bool isRegistered(const char* commandName, const char* className, Executor* executor);
+    static bool isRegistered(const char* commandName, const char* className, const Executor& executor);
     static const char* paramToString(long parameter);
 
   protected:
-    void*                            functionPointer;                      //!< The pointeer to the function of the Class (or static pointer if ClassID == CL_NULL )
     unsigned int                     paramCount;                           //!< the count of parameters.
     unsigned int*                    parameters;                           //!< Parameters the function of this Command takes.
Index: trunk/src/lib/shell/shell_command_class.cc
===================================================================
--- trunk/src/lib/shell/shell_command_class.cc	(revision 5640)
+++ trunk/src/lib/shell/shell_command_class.cc	(revision 5641)
@@ -217,5 +217,5 @@
   {
     ShellCommandClass::commandClassList = new tList<ShellCommandClass>;
-    ShellCommand::registerCommand("debug", "ShellCommand", new ExecutorStatic<ShellCommand>(ShellCommand::debug));
+    ShellCommand::registerCommand("debug", "ShellCommand", ExecutorStatic<ShellCommand>(ShellCommand::debug));
   }
 }
Index: trunk/src/lib/util/executor/executor.cc
===================================================================
--- trunk/src/lib/util/executor/executor.cc	(revision 5640)
+++ trunk/src/lib/util/executor/executor.cc	(revision 5641)
@@ -32,4 +32,10 @@
 // SHELL COMMAND BASE //
 ////////////////////////
+// empty constructor
+Executor::Executor()
+{
+  this->defaultValue = NULL;
+}
+
 /**
  * constructs and registers a new Command
@@ -63,4 +69,18 @@
   delete[] this->defaultValue;
 }
+
+/**
+ * clones this element into executor.
+ */
+void Executor::cloning(Executor* executor) const
+{
+  executor->functorType  = this->functorType;
+  executor->paramCount   = this->paramCount;
+  executor->defaultValue = new MultiType[this->paramCount];
+  for (unsigned int i = 0; i < this->paramCount; i++)
+    executor->defaultValue[i] = this->defaultValue[i];
+}
+
+
 
 /**
Index: trunk/src/lib/util/executor/executor.h
===================================================================
--- trunk/src/lib/util/executor/executor.h	(revision 5640)
+++ trunk/src/lib/util/executor/executor.h	(revision 5641)
@@ -22,5 +22,5 @@
 typedef enum {
   Executor_Objective   = 1,
-  Executor_Static    = 2,
+  Executor_Static      = 2,
 } Executor_Type;
 
@@ -32,4 +32,8 @@
 {
   public:
+    virtual ~Executor();
+
+    virtual Executor* clone () const = 0;
+
     Executor* defaultValues(unsigned int count, ...);
     Executor* defaultValues(unsigned int count, va_list values);
@@ -38,12 +42,14 @@
     virtual void execute (BaseObject* object, const char* parameters) = 0;
 
+    /** @returns the Type of this Function (either static or objective) */
+    inline Executor_Type getType() const { return this->functorType; };
+
     static void debug();
 
   protected:
+    Executor();
     Executor(unsigned int paramCount, ...);
-    ~Executor();
-
-    /** @returns the Type of this Function (either static or objective) */
-    inline Executor_Type getType() { return this->functorType; };
+
+    void cloning(Executor* executor) const;
 
   protected:
@@ -51,6 +57,4 @@
     unsigned int                     paramCount;                           //!< the count of parameters.
     MultiType*                       defaultValue;                         //!< Default Values.
-
-  private:
 };
 
@@ -226,6 +230,15 @@
 template<class T> class ExecutorObjective : public Executor
 {
-
   public:
+    ExecutorObjective() : Executor() { };
+    // COPY constuctor (virtual version)
+    virtual Executor* clone () const
+    {
+      ExecutorObjective<T>* executor = new ExecutorObjective<T>();
+      this->cloning(executor);
+      executor->fp = this->fp;
+      return executor;
+    }
+
 //! FUNCTOR_LIST is the List of CommandConstructors
 #define FUNCTOR_LIST(x) ExecutorConstructor ## x
@@ -279,4 +292,14 @@
 {
   public:
+    ExecutorStatic() : Executor() { };
+    // COPY constuctor
+    virtual Executor* clone () const
+    {
+      ExecutorStatic<T>* executor = new ExecutorStatic<T>();
+      this->cloning(executor);
+      executor->fp = this->fp;
+      return executor;
+    }
+
 //! FUNCTOR_LIST is the List of CommandConstructors
 #define FUNCTOR_LIST(x) ExecutorConstructor ## x
@@ -303,22 +326,3 @@
 };
 
-//! A Class, that handles aliases.
-class ExecutorAlias
-{
-  friend class ExecutorBase;
-  public:
-    /** @returns the Name of the Alias. */
-    const char* getName() const { return this->aliasName; };
-    /** @returns the Command, this Alias is asociated with */
-    ExecutorBase* getCommand() const { return this->command; };
-
-  private:
-    /** @param aliasName the name of the Alias @param command the Command, to associate this alias with */
-    ExecutorAlias(const char* aliasName, ExecutorBase* command) { this->aliasName = aliasName; this->command = command; };
-
-  private:
-    const char*         aliasName;       //!< the name of the Alias
-    ExecutorBase*       command;         //!< a pointer to the command, this alias executes.
-};
-
 #endif /* _EXECUTOR_H */
Index: trunk/src/lib/util/multi_type.cc
===================================================================
--- trunk/src/lib/util/multi_type.cc	(revision 5640)
+++ trunk/src/lib/util/multi_type.cc	(revision 5641)
@@ -101,5 +101,5 @@
   this->value = mt.value;
 
-  if (mt.type == MT_STRING)
+  if (mt.type == MT_STRING && mt.storedString != NULL)
   {
     this->storedString = new char[strlen (mt.storedString)+1];
@@ -107,4 +107,6 @@
     this->value.String = this->storedString;
   }
+  else
+    this->storedString = NULL;
 }
 
@@ -290,6 +292,4 @@
   {
     if (this->type & MT_BOOL) return (this->value.Bool)? "true" : "false";
-    else if (this->type & MT_CHAR) &this->value.Char;
-
     char tmpString[128];
     if (this->storedString != NULL)
@@ -298,6 +298,12 @@
       this->storedString = NULL;
     }
-
-    if (this->type & MT_INT)
+    if (this->type & MT_CHAR)
+    {
+      this->storedString = new char[2];
+      this->storedString[0] = this->value.Char;
+      this->storedString[1] = '\0';
+      return this->storedString;
+    }
+    else if (this->type & MT_INT)
     {
       sprintf(tmpString, "%d", this->value.Int);
Index: trunk/src/orxonox.cc
===================================================================
--- trunk/src/orxonox.cc	(revision 5640)
+++ trunk/src/orxonox.cc	(revision 5641)
@@ -49,4 +49,5 @@
 
 #include "class_list.h"
+#include "shell_command_class.h"
 #include "shell_command.h"
 #include "shell_buffer.h"
