diff --git a/include/string_utils.h b/include/string_utils.h
index 37fb1ac..587cfb6 100644
--- a/include/string_utils.h
+++ b/include/string_utils.h
@@ -163,55 +163,4 @@
 
 void string_replace(std::string& str, const std::string& from, const std::string& to);
 
-std::string_view string_remove_suffix(std::string_view str, char separator);
-
-std::string string_join(const std::set<std::string>& set, std::string_view separator = "/");
-
-std::set<std::string> string_split_set(std::string& str, std::string_view separator = "/");
-
 } // namespace dhtnet
-
-/*
-// Add string operators missing from standard
-// see https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/1RcShRhrmRc
-namespace std {
-inline string
-operator+(const string& s, const string_view& sv)
-{
-    return dhtnet::concat(s, sv);
-}
-inline string
-operator+(const string_view& sv, const string& s)
-{
-    return dhtnet::concat(sv, s);
-}
-using svmatch = match_results<string_view::const_iterator>;
-using svsub_match = sub_match<string_view::const_iterator>;
-constexpr string_view svsub_match_view(const svsub_match& submatch) noexcept {
-    return string_view(&*submatch.first, submatch.second - submatch.first);
-}
-inline bool
-regex_match(string_view sv,
-            svmatch& m,
-            const regex& e,
-            regex_constants::match_flag_type flags = regex_constants::match_default)
-{
-    return regex_match(sv.begin(), sv.end(), m, e, flags);
-}
-inline bool
-regex_match(string_view sv,
-            const regex& e,
-            regex_constants::match_flag_type flags = regex_constants::match_default)
-{
-    return regex_match(sv.begin(), sv.end(), e, flags);
-}
-inline bool
-regex_search(string_view sv,
-             svmatch& m,
-             const regex& e,
-             regex_constants::match_flag_type flags = regex_constants::match_default)
-{
-    return regex_search(sv.begin(), sv.end(), m, e, flags);
-}
-} // namespace std
-*/
diff --git a/src/string_utils.cpp b/src/string_utils.cpp
index d970011..1c94abc 100644
--- a/src/string_utils.cpp
+++ b/src/string_utils.cpp
@@ -132,31 +132,4 @@
     }
 }
 
-std::string_view
-string_remove_suffix(std::string_view str, char separator)
-{
-    auto it = str.find(separator);
-    if (it != std::string_view::npos)
-        str = str.substr(0, it);
-    return str;
-}
-
-std::string
-string_join(const std::set<std::string>& set, std::string_view separator)
-{
-    return fmt::format("{}", fmt::join(set, separator));
-}
-
-std::set<std::string>
-string_split_set(std::string& str, std::string_view separator)
-{
-    std::set<std::string> output;
-    for (auto first = str.data(), second = str.data(), last = first + str.size(); second != last && first != last; first = second + 1) {
-        second = std::find_first_of(first, last, std::cbegin(separator), std::cend(separator));
-        if (first != second)
-            output.emplace(first, second - first);
-    }
-    return output;
-}
-
 } // namespace dhtnet
