diff --git a/Scheduler/Console/Executor.test.cc b/Scheduler/Console/Executor.test.cc
index 705622e1699a5e02933a08fe5aa8f52e3aaa1530..e2ff88a68b3b834d6791045972a862b1095524a3 100644
--- a/Scheduler/Console/Executor.test.cc
+++ b/Scheduler/Console/Executor.test.cc
@@ -271,7 +271,6 @@ BOOST_AUTO_UNIT_TEST(executorAuto)
         BOOST_CHECK_EQUAL( os.str(), "testCommand\n" );
     }
     
-
     commands.clear();
     senf::console::root().remove("tdir1");
     senf::console::root().remove("dir2");
diff --git a/Scheduler/Console/ProgramOptions.cc b/Scheduler/Console/ProgramOptions.cc
index 63bcfb15f33ed196c6b9b050305582a590194e74..0efbd7e36b00ee07600ab5adfb759a802fddac10 100644
--- a/Scheduler/Console/ProgramOptions.cc
+++ b/Scheduler/Console/ProgramOptions.cc
@@ -60,7 +60,13 @@ prefix_ void senf::console::detail::ProgramOptionsSource::v_parse(RestrictedExec
             break;
         }
         else if (boost::algorithm::starts_with(arg, std::string("--")) && arg.size() > 2)
-            parseLongOption(arg.substr(2), executor);
+            try {
+                parseLongOption(arg.substr(2), executor);
+            }
+            catch (senf::ExceptionMixin & e) {
+                e << "\nwhile parsing command line option: " << arg;
+                throw;
+            }
         else if (boost::algorithm::starts_with(arg, std::string("-")) && arg.size() > 1) {
             for (std::string::size_type i (1); i<arg.size(); ++i) {
                 char opt (arg[i]);
@@ -87,7 +93,13 @@ prefix_ void senf::console::detail::ProgramOptionsSource::v_parse(RestrictedExec
                 }
                 if (boost::algorithm::starts_with(longOpt, std::string("--")))
                     longOpt = longOpt.substr(2);
-                parseLongOption(longOpt, executor);
+                try {
+                    parseLongOption(longOpt, executor);
+                }
+                catch (senf::ExceptionMixin & e) {
+                    e << "\nwhile parsing command line option: -" << opt << ' ' << param;
+                    throw;
+                }
             }
         }
         else
@@ -107,7 +119,7 @@ senf::console::detail::ProgramOptionsSource::parseLongOption(std::string const &
 
     ParseCommandInfo cmd;
     Path path;
-    
+ 
     DirectoryNode::ptr cwd (executor.root().thisptr());
     std::string::size_type b (0);
     while (b < name.size()) {
@@ -118,8 +130,10 @@ senf::console::detail::ProgramOptionsSource::parseLongOption(std::string const &
                 DirectoryNode::ChildrenRange completions (cwd->completions(key));
                 if (has_one_elt(completions))
                     key = completions.begin()->first;
-                else
+                else {
+                    e -= 1;
                     continue;
+                }
             }
             path.push_back(WordToken(key));
             if (e < name.size())
@@ -135,7 +149,7 @@ senf::console::detail::ProgramOptionsSource::parseLongOption(std::string const &
             b = name.size();
         }
     }
-    
+
     cmd.command(path);
     parser_.parseArguments(value, cmd);
     executor(std::cerr, cmd);