diff --git a/Scheduler/Console/Executor.cc b/Scheduler/Console/Executor.cc
index 8f054c789c70885b7cc01fb76220189235cfbc2d..d6218d8c7972446987b1bd5e450fe29f91be2444 100644
--- a/Scheduler/Console/Executor.cc
+++ b/Scheduler/Console/Executor.cc
@@ -249,8 +249,17 @@ senf::console::Executor::traverseNode(ParseCommandInfo::TokensRange const & path
                               path.begin(),
                               boost::prior(path.end())),
                           dir);
+        // For auto-cd support we need to check against '.' and '..' here too
+        Token const & tok (*boost::prior(path.end()));
+        if (tok == WordToken("..")) {
+            if (dir.size() > 1)
+                dir.pop_back();
+            return *dir.back().lock();
+        }
         DirectoryNode & base (*dir.back().lock());
-        std::string const & name (complete(base, boost::prior(path.end())->value()));
+        if (tok == WordToken("."))
+            return base;
+        std::string const & name (complete(base, tok.value()));
         if (policy_)
             policy_( base, name );
         return dir.back().lock()->get(name);
diff --git a/Scheduler/Console/Executor.test.cc b/Scheduler/Console/Executor.test.cc
index 2c33677817016f4de70bfd79abe9182aaba91194..705622e1699a5e02933a08fe5aa8f52e3aaa1530 100644
--- a/Scheduler/Console/Executor.test.cc
+++ b/Scheduler/Console/Executor.test.cc
@@ -231,7 +231,7 @@ BOOST_AUTO_UNIT_TEST(executorPolicy)
 
 BOOST_AUTO_UNIT_TEST(executorAuto)
 {
-    senf::console::root().mkdir("dir1").mkdir("dir3");
+    senf::console::root().mkdir("tdir1").mkdir("dir3");
     senf::console::root().mkdir("dir2").doc("Helptext").add("test",&testCommand);
 
     senf::console::Executor executor;
@@ -247,6 +247,22 @@ BOOST_AUTO_UNIT_TEST(executorAuto)
         BOOST_CHECK_EQUAL( executor.cwdPath(), "/dir2" );
         BOOST_CHECK_EQUAL( os.str(), "" );
     }
+
+    {
+        std::stringstream os;
+        parser.parse("..", &setCommand);
+        executor(os, commands.back());
+        BOOST_CHECK_EQUAL( executor.cwdPath(), "/" );
+        BOOST_CHECK_EQUAL( os.str(), "" );
+    }
+
+    {
+        std::stringstream os;
+        parser.parse("d", &setCommand);
+        executor(os, commands.back());
+        BOOST_CHECK_EQUAL( executor.cwdPath(), "/dir2" );
+        BOOST_CHECK_EQUAL( os.str(), "" );
+    }
     
     {
         std::stringstream os;
@@ -257,7 +273,7 @@ BOOST_AUTO_UNIT_TEST(executorAuto)
     
 
     commands.clear();
-    senf::console::root().remove("dir1");
+    senf::console::root().remove("tdir1");
     senf::console::root().remove("dir2");
 }