diff --git a/src/interpreter.cpp b/src/interpreter.cpp
index 8f419c3..9912584 100644
--- a/src/interpreter.cpp
+++ b/src/interpreter.cpp
@@ -76,7 +76,26 @@
             recursion = Recursion::Recursive;
     }
 
-    for (const auto& it : m_parser.availableNodes(ls.m_path, recursion))
+    std::set<std::string> toPrint;
+
+    auto pathArg = dataPathToSchemaPath(m_parser.currentPath());
+    if (ls.m_path) {
+        if (ls.m_path->type() == typeid(module_)) {
+            toPrint = m_datastore.schema()->availableNodes(*ls.m_path, recursion);
+        } else {
+            auto schemaPath = anyPathToSchemaPath(*ls.m_path);
+            if (schemaPath.m_scope == Scope::Absolute) {
+                pathArg = schemaPath;
+            } else {
+                pathArg.m_nodes.insert(pathArg.m_nodes.end(), schemaPath.m_nodes.begin(), schemaPath.m_nodes.end());
+            }
+            toPrint = m_datastore.schema()->availableNodes(pathArg, recursion);
+        }
+    } else {
+        toPrint = m_datastore.schema()->availableNodes(pathArg, recursion);
+    }
+
+    for (const auto& it : toPrint)
         std::cout << it << std::endl;
 }
 
diff --git a/src/parser.cpp b/src/parser.cpp
index 245de1d..2942d56 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -101,20 +101,7 @@
     return pathToDataString(m_curDir, Prefixes::WhenNeeded);
 }
 
-std::set<std::string> Parser::availableNodes(const boost::optional<boost::variant<dataPath_, schemaPath_, module_>>& path, const Recursion& option) const
+dataPath_ Parser::currentPath()
 {
-    auto pathArg = dataPathToSchemaPath(m_curDir);
-    if (path) {
-        if (path->type() == typeid(module_)) {
-            return m_schema->availableNodes(*path, option);
-        }
-
-        auto schemaPath = anyPathToSchemaPath(*path);
-        if (schemaPath.m_scope == Scope::Absolute) {
-            pathArg = schemaPath;
-        } else {
-            pathArg.m_nodes.insert(pathArg.m_nodes.end(), schemaPath.m_nodes.begin(), schemaPath.m_nodes.end());
-        }
-    }
-    return m_schema->availableNodes(pathArg, option);
+    return m_curDir;
 }
diff --git a/src/parser.hpp b/src/parser.hpp
index 82e7daf..14daa9e 100644
--- a/src/parser.hpp
+++ b/src/parser.hpp
@@ -37,8 +37,8 @@
     command_ parseCommand(const std::string& line, std::ostream& errorStream);
     void changeNode(const dataPath_& name);
     std::string currentNode() const;
-    std::set<std::string> availableNodes(const boost::optional<boost::variant<dataPath_, schemaPath_, module_>>& path, const Recursion& option) const;
     Completions completeCommand(const std::string& line, std::ostream& errorStream) const;
+    dataPath_ currentPath();
 
 private:
     const std::shared_ptr<const Schema> m_schema;
