Index: trunk/src/lib/shell/shell.cc
===================================================================
--- trunk/src/lib/shell/shell.cc	(revision 7339)
+++ trunk/src/lib/shell/shell.cc	(revision 7340)
@@ -148,5 +148,5 @@
 
 /**
- * deactiveates the Shell.
+ * @brief deactiveates the Shell.
  */
 void Shell::deactivate()
@@ -175,5 +175,5 @@
 
 /**
- * sets the File to load the fonts from
+ * @brief sets the File to load the fonts from
  * @param fontFile the file to load the font from
  *
@@ -192,5 +192,5 @@
 
 /**
- * sets the size of the text and spacing
+ * @brief sets the size of the text and spacing
  * @param textSize the size of the Text in Pixels
  * @param lineSpacing the size of the Spacing between two lines in pixels
Index: trunk/src/lib/shell/shell_command.cc
===================================================================
--- trunk/src/lib/shell/shell_command.cc	(revision 7339)
+++ trunk/src/lib/shell/shell_command.cc	(revision 7340)
@@ -44,5 +44,5 @@
   this->executor->setName(commandName);
 
-//  this->classID = classID;
+  //  this->classID = classID;
   this->shellClass = ShellCommandClass::getCommandClass(className); //ClassList::IDToString(classID);
   if (this->shellClass != NULL)
@@ -83,28 +83,28 @@
 {
   /// FIXME
-/*  if (ShellCommandClass::commandClassList == NULL)
-    ShellCommandClass::initCommandClassList();
-
- const ShellCommandClass* checkClass = ShellCommandClass::isRegistered(className);
-
- if (checkClass != NULL)
-  {
-    std::list<ShellCommand*>::iterator elem;
-    for (elem = checkClass->commandList.begin(); elem != checkClass->commandList.end(); elem++)
-    {
-      if (!strcmp(commandName, (*elem)->getName()))
-      {
-        delete (*elem);
-        checkClass->commandList.remove(*elem);
-        break;
-      }
-    }
-
-    if (checkClass->commandList->size() == 0)
-    {
-      ShellCommandClass::commandClassList->remove(checkClass);
-      delete checkClass;
-    }
-  }*/
+  /*  if (ShellCommandClass::commandClassList == NULL)
+      ShellCommandClass::initCommandClassList();
+
+   const ShellCommandClass* checkClass = ShellCommandClass::isRegistered(className);
+
+   if (checkClass != NULL)
+    {
+      std::list<ShellCommand*>::iterator elem;
+      for (elem = checkClass->commandList.begin(); elem != checkClass->commandList.end(); elem++)
+      {
+        if (!strcmp(commandName, (*elem)->getName()))
+        {
+          delete (*elem);
+          checkClass->commandList.remove(*elem);
+          break;
+        }
+      }
+
+      if (checkClass->commandList->size() == 0)
+      {
+        ShellCommandClass::commandClassList->remove(checkClass);
+        delete checkClass;
+      }
+    }*/
 }
 
@@ -138,5 +138,5 @@
       }
     }
-   return false;
+    return false;
   }
   else
@@ -161,10 +161,13 @@
   BaseObject* objectPointer = NULL;            //< a pointer to th Object to Execute the command on
   bool emptyComplete = false;                  //< if the completion input is empty string. e.g ""
-  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, " \t\n,");
-
-  if (inputSplits.size() == 0)
-    return false;
+  //  long completeType = SHELLC_NONE;           //< the Type we'd like to complete.
+  SubString inputSplits(executionString, SubString::WhiteSpacesWithComma);
+
+
+  // if we do not have any input return
+  if (inputSplits.empty())
+    return false;
+
+  // if we only have one input (!MUST BE AN ALIAS)
   if (inputSplits.size() >= 1)
   {
@@ -181,16 +184,12 @@
           if (objectList != NULL)
           {
-            if (inputSplits.size() > 1)
-            {
-
-              (*(*alias)->getCommand()->executor)(objectList->front(), inputSplits.getSubSet(1).join()); /// TODO CHECK IF OK
-            }
-            else
-              (*(*alias)->getCommand()->executor)(objectList->front(), "");
-           return true;
+            (*(*alias)->getCommand()->executor)(objectList->front(), inputSplits.getSubSet(1).join()); /// TODO CHECK IF OK
+            return true;
           }
-        }
-      }
-    }
+          /// TODO CHECK FOR STATIC functions.
+        }
+      }
+    }
+
     // looking for a Matching Class
     if (likely(ShellCommandClass::commandClassList != NULL))
@@ -199,5 +198,5 @@
       for (commandClassIT = ShellCommandClass::commandClassList->begin(); commandClassIT != ShellCommandClass::commandClassList->end(); commandClassIT++)
       {
-        if ((*commandClassIT)->getName() && inputSplits.getString(0) == (*commandClassIT)->getName())
+        if ((*commandClassIT)->getName() && inputSplits[0] == (*commandClassIT)->getName())
         {
           //elemCL->getName();
@@ -210,6 +209,9 @@
     }
 
+    // Second Agument. (either Object, or Function)
     if (commandClass != NULL && inputSplits.size() >= 2)
     {
+      int fktPos = 1; // The position of the Function (either at pos 1, or 2)
+      // If we have an ObjectList.
       if (objectList != NULL)
       {
@@ -218,5 +220,5 @@
         for (object = objectList->begin(); object != objectList->end(); object++)
         {
-          if ((*object)->getName() != NULL && inputSplits.getString(1) == (*object)->getName() )
+          if ((*object)->getName() != NULL && inputSplits[1] == (*object)->getName())
           {
             objectPointer = (*object);
@@ -224,10 +226,11 @@
             break;
           }
-         }
-
-      //
+        }
+
+        // if we did not find an Object with matching name, take the first.
         if (objectPointer == NULL)
           objectPointer = objectList->front();
       }
+
       // match a function.
       if (commandClass != NULL && (fktPos == 1 || (fktPos == 2 && inputSplits.size() >= 3)))
@@ -236,13 +239,13 @@
         for (cmdIT = commandClass->commandList.begin(); cmdIT != commandClass->commandList.end(); cmdIT++)
         {
-          if (inputSplits.getString(fktPos) == (*cmdIT)->getName())
+          if (inputSplits[fktPos] == (*cmdIT)->getName())
           {
             if (objectPointer == NULL && (*cmdIT)->executor->getType() & Executor_Objective)
               return false;
-            if (inputSplits.size() > fktPos+1)
-              (*(*cmdIT)->executor)(objectPointer, inputSplits.getSubSet(2).join()); /// TODO CHECK IF OK
             else
-              (*(*cmdIT)->executor)(objectPointer, "");
-            return true;
+            {
+              (*(*cmdIT)->executor)(objectPointer, inputSplits.getSubSet(fktPos+1).join()); /// TODO CHECK IF OK
+              return true;
+            }
           }
         }
@@ -250,4 +253,5 @@
     }
   }
+  return false;
 }
 
@@ -260,9 +264,9 @@
   if (this == NULL)
     return NULL;
- else
- {
-   this->description = description;
-   return this;
- }
+  else
+  {
+    this->description = description;
+    return this;
+  }
 }
 
@@ -302,6 +306,6 @@
  */
 ShellCommand* ShellCommand::defaultValues(const MultiType& value0, const MultiType& value1,
-                                          const MultiType& value2, const MultiType& value3,
-                                          const MultiType& value4)
+    const MultiType& value2, const MultiType& value3,
+    const MultiType& value4)
 {
   if (this == NULL || this->executor == NULL)
Index: trunk/src/lib/util/substring.h
===================================================================
--- trunk/src/lib/util/substring.h	(revision 7339)
+++ trunk/src/lib/util/substring.h	(revision 7340)
@@ -55,7 +55,12 @@
 
   // retrieve Information from within
+  /** @returns true if the SubString is empty */
+  inline bool empty() const { return this->strings.empty(); };
+  /** @returns the count of Strings stored in this substring */
   inline unsigned int size() const { return this->strings.size(); };
-const std::string& getString(unsigned int i) const { return (i < this->strings.size()) ? this->strings[i] : emptyString; };
-  const std::string& operator[](unsigned int i) const { return this->getString(i); };
+  /** @param i the i'th String @returns the i'th string from the subset of Strings */
+  const std::string& operator[](unsigned int i) const { return (i < this->strings.size()) ? this->strings[i] : emptyString;return this->getString(i); };
+  /** @param i the i'th String @returns the i'th string from the subset of Strings */
+  const std::string& getString(unsigned int i) const { return (*this)[i]; };
 
   // the almighty algorithm.
