Index: trunk/src/lib/shell/shell_command.cc
===================================================================
--- trunk/src/lib/shell/shell_command.cc	(revision 7406)
+++ trunk/src/lib/shell/shell_command.cc	(revision 7407)
@@ -46,4 +46,6 @@
     this->executor->setName(commandName);
 
+    for (unsigned int i = 0; i < this->executor->getParamCount(); i++)
+      this->completors.push_back(new CompletorDefault(&this->executor->getDefaultValue(i)));
     this->alias = NULL;
 
@@ -62,4 +64,9 @@
     if (this->alias != NULL)
       delete this->alias;
+    while (!this->completors.empty())
+    {
+      delete this->completors.back();
+      this->completors.pop_back();
+    }
     delete this->executor;
   }
Index: trunk/src/lib/shell/shell_command.h
===================================================================
--- trunk/src/lib/shell/shell_command.h	(revision 7406)
+++ trunk/src/lib/shell/shell_command.h	(revision 7407)
@@ -10,9 +10,7 @@
 
 #include "executor/executor.h"
-#include <stdarg.h>
+#include "shell_completion_plugin.h"
 
 #define     SHELL_COMMAND_MAX_SIZE      //!< The maximum size of a Shell Command
-
-
 
 namespace OrxShell
@@ -21,4 +19,5 @@
   class ShellCommandClass;
   class ShellCommandAlias;
+  class CompletorPlugin;
 
   /**
@@ -75,4 +74,7 @@
     static bool exists(const std::string& commandName, const std::string& className);
 
+    unsigned int getParamCount() const { return this->executor->getParamCount(); }
+    const CompletorPlugin* const getCompletorPlugin(unsigned int i) const { return this->completors[i]; };
+
     static void debug();
 
@@ -88,4 +90,5 @@
 
     std::string                      description;           //!< A description for this commnand. (initially ""). Assigned with (create)->describe("blablabla");
+    std::vector<CompletorPlugin*>    completors;            //!< Completors for the Parameters
     Executor*                        executor;              //!< The Executor, that really executes the Function.
   };
Index: trunk/src/lib/shell/shell_command_class.cc
===================================================================
--- trunk/src/lib/shell/shell_command_class.cc	(revision 7406)
+++ trunk/src/lib/shell/shell_command_class.cc	(revision 7407)
@@ -29,5 +29,5 @@
 
   /**
-   * creates a new ShellCommandClass
+   * @brief creates a new ShellCommandClass
    * @param className the Name of the command-class to create
    */
Index: trunk/src/lib/shell/shell_completion_plugin.cc
===================================================================
--- trunk/src/lib/shell/shell_completion_plugin.cc	(revision 7406)
+++ trunk/src/lib/shell/shell_completion_plugin.cc	(revision 7407)
@@ -27,5 +27,23 @@
 namespace OrxShell
 {
-  void CompletorStringArray::addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin)
+  CompletorDefault::CompletorDefault(const MultiType* value)
+  :_value(value)
+  { }
+
+  void CompletorDefault::addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin) const
+  {
+    PRINT(0)("%s", MultiType::MultiTypeToString(this->_value->getType()).c_str());
+  }
+
+  CompletorPlugin* CompletorDefault::clone() const
+  {
+    return new CompletorDefault(this->_value);
+  }
+
+
+
+
+
+  void CompletorStringArray::addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin) const
   {
     unsigned int inputLen = completionBegin.size();
@@ -35,4 +53,8 @@
   }
 
+  CompletorPlugin* CompletorStringArray::clone() const
+  {
+    return new CompletorStringArray(this->_stringArray, this->_size);
+  }
 
 
@@ -42,5 +64,5 @@
   }
 
-  void CompletorList::addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin)
+  void CompletorList::addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin) const
   {
     unsigned int inputLen = completionBegin.size();
@@ -51,4 +73,8 @@
   }
 
+  CompletorPlugin* CompletorList::clone() const
+  {
+    return new CompletorList(this->_list);
+  }
 
 
@@ -60,5 +86,5 @@
 
 
-  void CompletorFileSystem::addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin)
+  void CompletorFileSystem::addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin) const
   {
     if (completionBegin.empty()) // if we do not yet have the beginning of the line, start with the chosen startDir.
@@ -68,4 +94,9 @@
     }
   }
+  CompletorPlugin* CompletorFileSystem::clone() const
+  {
+    return new CompletorFileSystem(this->_fileExtension, this->_startDir, this->_subDir);
+  }
+
 
 }
Index: trunk/src/lib/shell/shell_completion_plugin.h
===================================================================
--- trunk/src/lib/shell/shell_completion_plugin.h	(revision 7406)
+++ trunk/src/lib/shell/shell_completion_plugin.h	(revision 7407)
@@ -10,41 +10,56 @@
 #include <vector>
 #include <string>
+#include "multi_type.h"
 
 namespace OrxShell
 {
   //! The Base of All Completors
-  class Completor
+  class CompletorPlugin
   {
-    public:
-      virtual void addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin) = 0;
-      virtual ~Completor() { };
-    protected:
-      Completor();
+  public:
+    virtual void addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin) const = 0;
+    virtual ~CompletorPlugin() { };
+
+    virtual CompletorPlugin* clone() const = 0;
+  protected:
+    CompletorPlugin() {};
+  };
+
+  class CompletorDefault : public CompletorPlugin
+  {
+  public:
+    CompletorDefault(const MultiType* value);
+    virtual void addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin) const;
+
+    virtual CompletorPlugin* clone() const;
+  private:
+    const MultiType*    _value;
   };
 
 
+  //! Completor that completes static Arrays of Strings.
+  class CompletorStringArray : public CompletorPlugin
+  {
+  public:
+    CompletorStringArray(const std::string* stringArray, unsigned int size)
+        : _stringArray(stringArray), _size(size) {};
+    virtual void addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin) const;
 
-
-  //! Completor that completes static Arrays of Strings.
-  class CompletorStringArray : public Completor
-  {
-    public:
-      CompletorStringArray(const std::string* stringArray, unsigned int size)
-          : _stringArray(stringArray), _size(size) {};
-      virtual void addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin);
-
-    private:
-      const std::string*   _stringArray;
-      unsigned int         _size;
+    virtual CompletorPlugin* clone() const;
+  private:
+    const std::string*   _stringArray;
+    unsigned int         _size;
   };
 
 
-  class CompletorList : public Completor
+  class CompletorList : public CompletorPlugin
   {
-    public:
-      CompletorList(const std::list<std::string>* list);
-      virtual void addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin);
-    private:
-      const std::list<std::string>* _list;
+  public:
+    CompletorList(const std::list<std::string>* list);
+    virtual void addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin) const;
+    virtual CompletorPlugin* clone() const;
+
+  private:
+    const std::list<std::string>* _list;
   };
 
@@ -52,25 +67,25 @@
 
   //! Completor that completes FileSystem Entries.
-  class CompletorFileSystem : public Completor
+  class CompletorFileSystem : public CompletorPlugin
   {
-
-    public:
-      // Where to search if the completionString is empty.
-      typedef enum
-      {
-        StartAtRoot,
-        StartAtHome,
-        StartAtDataDir,
+  public:
+    // Where to search if the completionString is empty.
+    typedef enum
+    {
+      StartAtRoot,
+      StartAtHome,
+      StartAtDataDir,
     } StartDirectory;
 
-      CompletorFileSystem(const std::string& fileExtension = "",
-                          StartDirectory startDir = StartAtDataDir,
-                          const std::string& subDir = "");
-      virtual void addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin);
+    CompletorFileSystem(const std::string& fileExtension = "",
+                        StartDirectory startDir = StartAtDataDir,
+                        const std::string& subDir = "");
+    virtual void addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin) const;
+    virtual CompletorPlugin* clone() const;
 
-    private:
-      std::string             _fileExtension;
-      std::string             _subDir;
-      StartDirectory          _startDir;
+  private:
+    std::string             _fileExtension;
+    std::string             _subDir;
+    StartDirectory          _startDir;
   };
 
@@ -79,10 +94,11 @@
 
   //! A Templated Completor
-  template<typename CLASS> class CompletorTList : public Completor
+  template<typename CLASS> class CompletorTList : public CompletorPlugin
   {
-    public:
-      CompletorTList(const std::list<CLASS*>& completionList);
-      virtual void addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin)
-      {};
+  public:
+    CompletorTList(const std::list<CLASS*>& completionList);
+    virtual void addToCompleteList(std::vector<std::string>& completionList, const std::string& completionBegin)
+    {};
+    virtual CompletorPlugin* clone() const;
   };
 
