diff --git a/src/main.cpp b/src/main.cpp
index 3c973dd..4fe798f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -5,11 +5,10 @@
  * Written by Václav Kubernát <kubervac@fit.cvut.cz>
  *
 */
-
 #include <docopt.h>
 #include <experimental/filesystem>
 #include <iostream>
-#include <linenoise.hpp>
+#include <replxx.hxx>
 #include "NETCONF_CLI_VERSION.h"
 #include "interpreter.hpp"
 #include "sysrepo_access.hpp"
@@ -37,24 +36,27 @@
 
     SysrepoAccess datastore("netconf-cli");
     Parser parser(datastore.schema());
+    replxx::Replxx lineEditor;
+    lineEditor.set_completion_callback([&parser](const std::string& input, int&) {
+        std::stringstream stream;
+        auto completionsSet = parser.completeCommand(input, stream);
+
+        std::vector<std::string> res;
+        std::transform(completionsSet.begin(), completionsSet.end(), std::back_inserter(res),
+                [input](auto it) { return it; });
+        return res;
+    });
+    lineEditor.set_word_break_characters(" '/[");
 
     while (true) {
-        linenoise::SetCompletionCallback([&parser](const char* editBuffer, std::vector<std::string>& completions) {
-            std::stringstream stream;
-            auto completionsSet = parser.completeCommand(editBuffer, stream);
-            std::transform(completionsSet.begin(), completionsSet.end(), std::back_inserter(completions),
-                           [editBuffer](auto it) { return std::string(editBuffer) + it; });
-        });
-        linenoise::SetHistoryMaxLen(4);
-        linenoise::SetMultiLine(true);
-        std::string line;
-        auto quit = linenoise::Readline((parser.currentNode() + "> ").c_str(), line);
-        if (quit) {
+        auto line = lineEditor.input(parser.currentNode() + "> ");
+        if (!line) {
             break;
         }
 
         std::locale C_locale("C");
-        if (std::all_of(line.begin(), line.end(),
+        std::string_view view{line};
+        if (std::all_of(view.begin(), view.end(),
                         [C_locale](const auto c) { return std::isspace(c, C_locale);})) {
             continue;
         }
@@ -66,7 +68,7 @@
             std::cerr << ex.what() << std::endl;
         }
 
-        linenoise::AddHistory(line.c_str());
+        lineEditor.history_add(line);
     }
 
     return 0;
diff --git a/src/parser.cpp b/src/parser.cpp
index 2dbea6b..ba6690d 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -53,7 +53,7 @@
     ];
     x3::phrase_parse(it, line.end(), grammar, space, parsedCommand);
 
-    return filterAndErasePrefix(ctx.m_suggestions, std::string(ctx.m_completionIterator, line.end()));
+    return filterByPrefix(ctx.m_suggestions, std::string(ctx.m_completionIterator, line.end()));
 }
 
 void Parser::changeNode(const dataPath_& name)
diff --git a/src/utils.cpp b/src/utils.cpp
index 358bc05..595dc7a 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -67,17 +67,11 @@
     return fullNodeName(dataPathToSchemaPath(location), pair);
 }
 
-std::set<std::string> filterAndErasePrefix(const std::set<std::string>& set, const std::string_view prefix)
+std::set<std::string> filterByPrefix(const std::set<std::string>& set, const std::string_view prefix)
 {
     std::set<std::string> filtered;
     std::copy_if(set.begin(), set.end(),
             std::inserter(filtered, filtered.end()),
             [prefix] (auto it) { return boost::starts_with(it, prefix); });
-
-    std::set<std::string> withoutPrefix;
-    std::transform(filtered.begin(), filtered.end(),
-            std::inserter(withoutPrefix, withoutPrefix.end()),
-            [prefix] (auto it) { boost::erase_first(it, prefix); return it; });
-    return withoutPrefix;
+    return filtered;
 }
-
diff --git a/src/utils.hpp b/src/utils.hpp
index 38db0af..dcaefb3 100644
--- a/src/utils.hpp
+++ b/src/utils.hpp
@@ -19,7 +19,5 @@
 std::string leafDataTypeToString(yang::LeafDataTypes type);
 std::string fullNodeName(const schemaPath_& location, const ModuleNodePair& pair);
 std::string fullNodeName(const dataPath_& location, const ModuleNodePair& pair);
-/** Returns a subset of the original set with only the strings starting with prefix
- * and with the actual prefix deleted from the string
- */
-std::set<std::string> filterAndErasePrefix(const std::set<std::string>& set, const std::string_view prefix);
+/** Returns a subset of the original set with only the strings starting with prefix */
+std::set<std::string> filterByPrefix(const std::set<std::string>& set, const std::string_view prefix);
