Index: trunk/src/lib/event/command_chain.cc
===================================================================
--- trunk/src/lib/event/command_chain.cc	(revision 5655)
+++ trunk/src/lib/event/command_chain.cc	(revision 5656)
@@ -430,5 +430,5 @@
   unsigned int fktPos = 1;                //< the position of the function (needed for finding it)
 //  long completeType = SHELLC_NONE;      //< the Type we'd like to complete.
-  SubString inputSplits(executionString, true);
+  SubString inputSplits(executionString, " \n\t,");
 
   if (inputSplits.getCount() == 0)
Index: trunk/src/lib/event/command_chain.h
===================================================================
--- trunk/src/lib/event/command_chain.h	(revision 5655)
+++ trunk/src/lib/event/command_chain.h	(revision 5656)
@@ -360,5 +360,5 @@
     virtual void executeCommand (BaseObject* object, const char* parameters)
     {
-      SubString sub(parameters, true);
+      SubString sub(parameters, " \n\t,");
 //! FUNCTOR_LIST is the List of Executive Functions
 #define FUNCTOR_LIST(x) CommandChainExecute ## x
Index: trunk/src/lib/graphics/graphics_engine.cc
===================================================================
--- trunk/src/lib/graphics/graphics_engine.cc	(revision 5655)
+++ trunk/src/lib/graphics/graphics_engine.cc	(revision 5656)
@@ -259,5 +259,5 @@
 
   if (this->hwExtensions == NULL && extensions != NULL)
-    this->hwExtensions = new SubString((char*)glGetString(GL_EXTENSIONS), true);
+    this->hwExtensions = new SubString((char*)glGetString(GL_EXTENSIONS), " \n\t,");
 
   PRINT(4)("Running on : %s %s %s\n", vendor, renderer, version);
Index: trunk/src/lib/shell/shell_command.cc
===================================================================
--- trunk/src/lib/shell/shell_command.cc	(revision 5655)
+++ trunk/src/lib/shell/shell_command.cc	(revision 5656)
@@ -170,5 +170,5 @@
   unsigned int fktPos = 1;                //< the position of the function (needed for finding it)
 //  long completeType = SHELLC_NONE;      //< the Type we'd like to complete.
-  SubString inputSplits(executionString, true);
+  SubString inputSplits(executionString, " \t\n,");
 
   if (inputSplits.getCount() == 0)
Index: trunk/src/lib/shell/shell_completion.cc
===================================================================
--- trunk/src/lib/shell/shell_completion.cc	(revision 5655)
+++ trunk/src/lib/shell/shell_completion.cc	(revision 5656)
@@ -95,5 +95,5 @@
   else
     completionLine = this->input->getInput() + strspn(this->input->getInput(), " \t\n");
-  SubString inputSplits(completionLine, true);
+  SubString inputSplits(completionLine, " \t\n,");
 
   // What String will be completed
Index: trunk/src/lib/util/executor/executor.h
===================================================================
--- trunk/src/lib/util/executor/executor.h	(revision 5655)
+++ trunk/src/lib/util/executor/executor.h	(revision 5656)
@@ -38,6 +38,6 @@
     virtual Executor* clone () const = 0;
 
+    Executor* defaultValues(unsigned int count, va_list values);
     Executor* defaultValues(unsigned int count, ...);
-    Executor* defaultValues(unsigned int count, va_list values);
 
     /** executes a Command @param object the object to apply this to @param parameters the parameters the command takes */
@@ -56,4 +56,6 @@
 
     void cloning(Executor* executor) const;
+
+//    const SubString& getSubString(const char* string) const { return SubString(string); };
 
   protected:
@@ -261,5 +263,5 @@
     virtual void execute (BaseObject* object, const char* parameters)
     {
-      SubString sub(parameters, ',');  /// FIXME ///
+      SubString sub(parameters, " \n\t,", '\\');
 //! FUNCTOR_LIST is the List of Executive Functions
 #define FUNCTOR_LIST(x) ExecutorExecute ## x
@@ -323,5 +325,5 @@
     virtual void execute (BaseObject* object, const char* parameters)
     {
-  SubString sub(parameters, true);
+  SubString sub(parameters, " \n\t,");
 //! FUNCTOR_LIST is the List of Executive Functions
 #define FUNCTOR_LIST(x) ExecutorExecute ## x
Index: trunk/src/lib/util/substring.cc
===================================================================
--- trunk/src/lib/util/substring.cc	(revision 5655)
+++ trunk/src/lib/util/substring.cc	(revision 5656)
@@ -123,4 +123,5 @@
   assert (this->strings != NULL && this->offsets != NULL);
 
+
   // split the String into substrings
   int l = 0;
@@ -154,4 +155,74 @@
 }
 
+SubString::SubString(const char* string, const char* splitters, char escapeChar)
+{
+  this->splittersCount = 0;
+  if (string == NULL || splitters == NULL)
+  {
+    this->strings = NULL;
+    this->offsets = NULL;
+    return;
+  }
+
+  // chop the input to the beginning of something usefull
+  if (strlen(string) > 0)
+    string = string + strspn(string, splitters);
+
+  // count the Splitters
+  bool lastWasSplitter = false;
+  for(unsigned int i = 0; i < strlen(string); i++)
+  {
+
+    if( strchr(splitters, string[i] ))
+      lastWasSplitter = true;
+    else
+    {
+      if (lastWasSplitter)
+      {
+        this->splittersCount ++;
+        lastWasSplitter = false;
+      }
+    }
+  }
+  this->splittersCount += 1;
+
+  // allocate memory
+  this->strings = new char*[this->splittersCount];
+  this->offsets = new unsigned int[this->splittersCount];
+  assert (this->strings != NULL && this->offsets != NULL);
+
+
+  // split the String into substrings
+  int l = 0;
+  unsigned int i = 0;
+  if( this->splittersCount > 1)
+  {
+    const char* offset = string;
+    const char* end = offset + strcspn(offset, splitters);
+    for (i = 0; i < this->splittersCount; i++)
+    {
+      assert( i < this->splittersCount);
+      l = end - offset;
+      this->strings[i] = new char[l + 1];
+      assert( strings[i] != NULL);
+      strncpy( strings[i], offset, l);
+      strings[i][l] = '\0';
+      this->offsets[i] = offset - string;
+      end += strspn(end, splitters);
+      offset = end;
+      end = offset + strcspn(offset, splitters);
+    }
+  }
+  else
+  {
+    unsigned int length = strcspn(string, splitters);
+    this->strings[0] = new char[length+1];
+    strncpy(this->strings[0], string, length);
+    this->strings[0][length] = '\0';
+    offsets[0] = 0;
+  }
+}
+
+
 /**
  *  removes the object from memory
Index: trunk/src/lib/util/substring.h
===================================================================
--- trunk/src/lib/util/substring.h	(revision 5655)
+++ trunk/src/lib/util/substring.h	(revision 5656)
@@ -13,4 +13,5 @@
   SubString(const char* string, char splitter = ',');
   SubString(const char* string, bool whiteSpaces);
+  SubString(const char* string, const char* splitters, char escapeChar ='\\');
   ~SubString();
 
