Index: code/branches/output/src/libraries/core/command/CommandEvaluation.cc
===================================================================
--- code/branches/output/src/libraries/core/command/CommandEvaluation.cc	(revision 8835)
+++ code/branches/output/src/libraries/core/command/CommandEvaluation.cc	(revision 8836)
@@ -131,5 +131,5 @@
 
             if (!this->execCommand_)
-                *error = CommandExecutor::Error;
+                *error = CommandExecutor::Inexistent;
             else if (!this->execCommand_->isActive())
                 *error = CommandExecutor::Deactivated;
@@ -187,5 +187,5 @@
             if (bPrintError)
                 orxout(internal_error, context::commands) << "Can't evaluate arguments, no console command assigned." << endl;
-            return CommandExecutor::Error;
+            return CommandExecutor::Inexistent;
         }
 
Index: code/branches/output/src/libraries/core/command/CommandExecutor.cc
===================================================================
--- code/branches/output/src/libraries/core/command/CommandExecutor.cc	(revision 8835)
+++ code/branches/output/src/libraries/core/command/CommandExecutor.cc	(revision 8836)
@@ -69,8 +69,10 @@
         @return Returns the error-code (see @ref CommandExecutorErrorCodes "error codes")
     */
-    /* static */ int CommandExecutor::execute(const std::string& command, bool useTcl)
+    /* static */ int CommandExecutor::execute(const std::string& command, bool useTcl, bool printErrors)
     {
         int error;
         CommandExecutor::queryMT(command, &error, useTcl);
+        if (error)
+            orxout(user_error) << "Can't execute \"" << command << "\", " << CommandExecutor::getErrorDescription(error) << ". (execute)" << endl;
         return error;
     }
@@ -85,8 +87,11 @@
     /* static */ MultiType CommandExecutor::queryMT(const std::string& command, int* error, bool useTcl)
     {
+        MultiType result;
+        int error_internal;
+
         if (useTcl)
         {
             // pass the command to tcl
-            return TclBind::eval(command, error);
+            result = TclBind::eval(command, &error_internal);
         }
         else
@@ -108,6 +113,13 @@
 
             // query the command and return its return-value
-            return evaluation.query(error);
-        }
+            result = evaluation.query(&error_internal);
+        }
+
+        if (error)
+            *error = error_internal;
+        else if (error_internal)
+            orxout(user_error) << "Can't execute \"" << command << "\", " << CommandExecutor::getErrorDescription(error_internal) << ". (query)" << endl;
+
+        return result;
     }
 
@@ -172,4 +184,21 @@
 
     /**
+        @brief Returns a description of the error code.
+        @param error The error code
+    */
+    /* static */ std::string CommandExecutor::getErrorDescription(int error)
+    {
+        switch (error)
+        {
+            case CommandExecutor::Inexistent:  return "command doesn't exist";
+            case CommandExecutor::Incomplete:  return "not enough arguments given";
+            case CommandExecutor::Deactivated: return "command is not active";
+            case CommandExecutor::Denied:      return "access denied";
+            case CommandExecutor::Error:       return "an error occurred";
+            default: return "";
+        }
+    }
+
+    /**
         @brief Gets an evaluated command from the cache.
         @param command The command that should be looked up in the cache
Index: code/branches/output/src/libraries/core/command/CommandExecutor.h
===================================================================
--- code/branches/output/src/libraries/core/command/CommandExecutor.h	(revision 8835)
+++ code/branches/output/src/libraries/core/command/CommandExecutor.h	(revision 8836)
@@ -111,5 +111,5 @@
 // tolua_end
         public:
-            static int execute(const std::string& command, bool useTcl = true); // tolua_export
+            static int execute(const std::string& command, bool useTcl = true, bool printErrors = true); // tolua_export
 
             static MultiType queryMT(const std::string& command, int* error = 0, bool useTcl = true);
@@ -119,8 +119,11 @@
 
             static const int Success = 0;       ///< Error code for "success" (or no error)
-            static const int Error = 1;         ///< Error code if the command doesn't exist
+            static const int Inexistent = 1;    ///< Error code if the command doesn't exist
             static const int Incomplete = 2;    ///< Error code if the command needs more arguments
             static const int Deactivated = 3;   ///< Error code if the command is not active
             static const int Denied = 4;        ///< Error code if the command needs a different access level
+            static const int Error = 5;         ///< Error code if the command returned an error
+
+            static std::string getErrorDescription(int error);
 
             static MultiType unhide(const std::string& command);
Index: code/branches/output/src/libraries/core/command/Shell.cc
===================================================================
--- code/branches/output/src/libraries/core/command/Shell.cc	(revision 8835)
+++ code/branches/output/src/libraries/core/command/Shell.cc	(revision 8836)
@@ -389,17 +389,7 @@
         const std::string& result = CommandExecutor::query(this->inputBuffer_->get(), &error);
         if (error)
-        {
-            switch (error)
-            {
-                case CommandExecutor::Error:       this->addOutput("Error: Can't execute \"" + this->inputBuffer_->get() + "\", command doesn't exist. (S)", UserError); break;
-                case CommandExecutor::Incomplete:  this->addOutput("Error: Can't execute \"" + this->inputBuffer_->get() + "\", not enough arguments given. (S)", UserError); break;
-                case CommandExecutor::Deactivated: this->addOutput("Error: Can't execute \"" + this->inputBuffer_->get() + "\", command is not active. (S)", UserError); break;
-                case CommandExecutor::Denied:      this->addOutput("Error: Can't execute \"" + this->inputBuffer_->get() + "\", access denied. (S)", UserError); break;
-            }
-        }
+            this->addOutput("Error: Can't execute \"" + this->inputBuffer_->get() + "\", " + CommandExecutor::getErrorDescription(error) + ". (Shell)", UserError);
         else if (result != "")
-        {
             this->addOutput(result, Result);
-        }
 
         this->clearInput();
Index: code/branches/output/src/libraries/core/command/TclBind.cc
===================================================================
--- code/branches/output/src/libraries/core/command/TclBind.cc	(revision 8835)
+++ code/branches/output/src/libraries/core/command/TclBind.cc	(revision 8836)
@@ -187,14 +187,10 @@
             error = evaluation.execute();
 
-        switch (error)
-        {
-            case CommandExecutor::Error:       orxout(user_error) << "Can't execute command \"" << command << "\", command doesn't exist. (B)" << endl; break;
-            case CommandExecutor::Incomplete:  orxout(user_error) << "Can't execute command \"" << command << "\", not enough arguments given. (B)" << endl; break;
-            case CommandExecutor::Deactivated: orxout(user_error) << "Can't execute command \"" << command << "\", command is not active. (B)" << endl; break;
-            case CommandExecutor::Denied:      orxout(user_error) << "Can't execute command \"" << command << "\", access denied. (B)" << endl; break;
-        }
-
-        if (error == CommandExecutor::Error)
-            orxout(user_info) << "Did you mean \"" << evaluation.getCommandSuggestion() << "\"?" << endl;
+        if (error)
+        {
+            orxout(user_error) << "Can't execute command \"" << command << "\", " + CommandExecutor::getErrorDescription(error) + ". (TclBind)" << endl;
+            if (error == CommandExecutor::Inexistent)
+                orxout(user_info) << "Did you mean \"" << evaluation.getCommandSuggestion() << "\"?" << endl;
+        }
 
         return result;
Index: code/branches/output/src/libraries/core/command/TclThreadManager.cc
===================================================================
--- code/branches/output/src/libraries/core/command/TclThreadManager.cc	(revision 8835)
+++ code/branches/output/src/libraries/core/command/TclThreadManager.cc	(revision 8836)
@@ -449,11 +449,6 @@
                         int error;
                         output = CommandExecutor::query(command, &error, false);
-                        switch (error)
-                        {
-                            case CommandExecutor::Error:       TclThreadManager::error("Can't execute command \"" + command + "\", command doesn't exist. (T)"); break;
-                            case CommandExecutor::Incomplete:  TclThreadManager::error("Can't execute command \"" + command + "\", not enough arguments given. (T)"); break;
-                            case CommandExecutor::Deactivated: TclThreadManager::error("Can't execute command \"" + command + "\", command is not active. (T)"); break;
-                            case CommandExecutor::Denied:      TclThreadManager::error("Can't execute command \"" + command + "\", access denied. (T)"); break;
-                        }
+                        if (error)
+                            TclThreadManager::error("Can't execute command \"" + command + "\", " + CommandExecutor::getErrorDescription(error) + ". (TclThreadManager)");
                     }
                     else
