Index: code/branches/core2/src/orxonox/core/CommandExecutor.cc
===================================================================
--- code/branches/core2/src/orxonox/core/CommandExecutor.cc	(revision 952)
+++ code/branches/core2/src/orxonox/core/CommandExecutor.cc	(revision 953)
@@ -45,4 +45,67 @@
     ConsoleCommandShortcutGeneric(keyword3, createExecutor((FunctorStatic*)0, "bind", AccessLevel::User));
 
+
+    ///////////////////////
+    // CommandEvaluation //
+    ///////////////////////
+    KeybindMode CommandEvaluation::getKeybindMode()
+    {
+        if (this->state_ == CS_Shortcut_Params || this->state_ == CS_Shortcut_Finished)
+        {
+//            if (this->shortcut_ != 0)
+//                return this->shortcut_->getKeybindMode();
+        }
+        else if (this->state_ == CS_Function_Params || this->state_ == CS_Function_Finished)
+        {
+//            if (this->function_ != 0)
+//                return this->function_->getKeybindMode();
+        }
+        else if (this->state_ == CS_ConfigValueType || this->state_ == CS_ConfigValueFinished)
+        {
+//            return KeybindMode::onPress;
+        }
+        else if (this->state_ == CS_KeybindCommand || this->state_ == CS_KeybindFinished)
+        {
+//            return KeybindMode::onPress;
+        }
+        else
+        {
+//            return KeybindMode::onPress;
+        }
+    }
+
+    void CommandEvaluation::setAdditionalParameter(const std::string& param)
+    {
+        this->additionalParameter_ = param;
+    }
+
+    bool CommandEvaluation::isValid() const
+    {
+        if (this->state_ == CS_Shortcut_Params || this->state_ == CS_Shortcut_Finished)
+        {
+            return (this->shortcut_ != 0);
+        }
+        else if (this->state_ == CS_Function_Params || this->state_ == CS_Function_Finished)
+        {
+            return ((this->functionclass_ != 0) && (this->function_ != 0));
+        }
+        else if (this->state_ == CS_ConfigValueType || this->state_ == CS_ConfigValueFinished)
+        {
+            return ((this->configvalueclass_ != 0) && (this->configvalue_ != 0));
+        }
+        else if (this->state_ == CS_KeybindCommand || this->state_ == CS_KeybindFinished)
+        {
+            return (this->key_ != 0);
+        }
+        else
+        {
+            return false;
+        }
+    }
+
+
+    /////////////////////
+    // CommandExecutor //
+    /////////////////////
     CommandExecutor& CommandExecutor::getInstance()
     {
@@ -111,20 +174,24 @@
                 break;
             case CS_Shortcut_Params:
-                // not enough parameters
+                // not enough parameters but lets hope there are some additional parameters
+                if (evaluation.shortcut_ != 0)
+                    return evaluation.shortcut_->parse(tokens.subSet(1).join() + " " + evaluation.additionalParameter_);
                 break;
             case CS_Shortcut_Finished:
                 // call the shortcut
                 if (evaluation.shortcut_ != 0)
-                    return evaluation.shortcut_->parse(tokens.subSet(1).join());
+                    return evaluation.shortcut_->parse(tokens.subSet(1).join() + " " + evaluation.additionalParameter_);
                 break;
             case CS_Function:
                 break;
             case CS_Function_Params:
-                // not enough parameters
+                // not enough parameters but lets hope there are some additional parameters
+                if (evaluation.function_ != 0)
+                    return evaluation.function_->parse(tokens.subSet(2).join() + " " + evaluation.additionalParameter_);
                 break;
             case CS_Function_Finished:
                 // call the shortcut
                 if (evaluation.function_ != 0)
-                    return evaluation.function_->parse(tokens.subSet(2).join());
+                    return evaluation.function_->parse(tokens.subSet(2).join() + " " + evaluation.additionalParameter_);
                 break;
             case CS_ConfigValueClass:
@@ -133,15 +200,17 @@
                 break;
             case CS_ConfigValueType:
-                // not enough parameters
+                // not enough parameters but lets hope there are some additional parameters
+                if (evaluation.configvalue_ != 0)
+                    return evaluation.configvalue_->parseString(tokens.subSet(3).join() + " " + evaluation.additionalParameter_);
                 break;
             case CS_ConfigValueFinished:
                 // set the config value
                 if (evaluation.configvalue_ != 0)
-                    return evaluation.configvalue_->parseString(tokens.subSet(3).join());
+                    return evaluation.configvalue_->parseString(tokens.subSet(3).join() + " " + evaluation.additionalParameter_);
                 break;
             case CS_KeybindKey:
                 break;
             case CS_KeybindCommand:
-                // not enough parameters
+                // not enough parameters but lets hope there are some additional parameters
                 break;
             case CS_KeybindFinished:
@@ -296,5 +365,5 @@
     }
 
-    const CommandEvaluation& CommandExecutor::evaluate(const std::string& command)
+    CommandEvaluation CommandExecutor::evaluate(const std::string& command)
     {
         CommandExecutor::parse(command, true);
@@ -308,5 +377,5 @@
 
         if (bInitialize)
-            CommandExecutor::initialize();
+            CommandExecutor::initialize(command);
 
         switch (CommandExecutor::getEvaluation().state_)
@@ -654,6 +723,9 @@
     }
 
-    void CommandExecutor::initialize()
-    {
+    void CommandExecutor::initialize(const std::string& command)
+    {
+        CommandExecutor::getEvaluation().processedCommand_ = command;
+        CommandExecutor::getEvaluation().additionalParameter_ = "";
+
         CommandExecutor::getEvaluation().listOfPossibleFunctionClasses_.clear();
         CommandExecutor::getEvaluation().listOfPossibleShortcuts_.clear();
Index: code/branches/core2/src/orxonox/core/CommandExecutor.h
===================================================================
--- code/branches/core2/src/orxonox/core/CommandExecutor.h	(revision 952)
+++ code/branches/core2/src/orxonox/core/CommandExecutor.h	(revision 953)
@@ -59,9 +59,20 @@
     };
 
+    enum KeybindMode {}; // temporary
+
+    ///////////////////////
+    // CommandEvaluation //
+    ///////////////////////
     class _CoreExport CommandEvaluation
     {
         public:
+            KeybindMode getKeybindMode();
+            void setAdditionalParameter(const std::string& param);
+            bool isValid() const;
+
             std::string processedCommand_;
             SubString tokens_;
+            std::string additionalParameter_;
+
             std::list<const std::string*> listOfPossibleFunctionClasses_;
             std::list<const std::string*> listOfPossibleShortcuts_;
@@ -82,4 +93,7 @@
     };
 
+    /////////////////////
+    // CommandExecutor //
+    /////////////////////
     class _CoreExport CommandExecutor
     {
@@ -94,5 +108,5 @@
             static std::string hint(const CommandEvaluation& evaluation);
 
-            static const CommandEvaluation& evaluate(const std::string& command);
+            static CommandEvaluation evaluate(const std::string& command);
 
             static bool addConsoleCommandShortcut(ExecutorStatic* executor);
@@ -123,5 +137,5 @@
 
             static void parse(const std::string& command, bool bInitialize = true);
-            static void initialize();
+            static void initialize(const std::string& command);
 
             static bool argumentsGiven(unsigned int num);
