diff --git a/SystemTools.cxx b/SystemTools.cxx
index 1c4fe33892b52ca1b8c9f82211dcf0a6978bfff3..c5bbd416a39e4ee92ad9e08b4cac7a77c85b00f9 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -22,7 +22,6 @@
 #include KWSYS_HEADER(FStream.hxx)
 #include KWSYS_HEADER(Encoding.hxx)
 
-#include <algorithm>
 #include <fstream>
 #include <iostream>
 #include <set>
@@ -3709,16 +3708,6 @@ std::string SystemTools::JoinPath(
   return result;
 }
 
-void SystemTools::RemoveEmptyPathElements(std::vector<std::string>& path)
-{
-  if (path.empty()) {
-    return;
-  }
-
-  path.erase(std::remove(path.begin() + 1, path.end(), std::string("")),
-             path.end());
-}
-
 bool SystemTools::ComparePath(const std::string& c1, const std::string& c2)
 {
 #if defined(_WIN32) || defined(__APPLE__)
diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in
index 5e091c2af7ca7a8125bed687b41de873bead2632..1672e927face8efd9417f0f03b60cd336c23bffd 100644
--- a/SystemTools.hxx.in
+++ b/SystemTools.hxx.in
@@ -461,6 +461,10 @@ public:
    * produce the original path.  Home directory references are
    * automatically expanded if expand_home_dir is true and this
    * platform supports them.
+   *
+   * This does *not* normalize the input path.  All components are
+   * preserved, including empty ones.  Typically callers should use
+   * this only on paths that have already been normalized.
    */
   static void SplitPath(const std::string& p,
                         std::vector<std::string>& components,
@@ -469,15 +473,15 @@ public:
   /**
    * Join components of a path name into a single string.  See
    * SplitPath for the format of the components.
+   *
+   * This does *not* normalize the input path.  All components are
+   * preserved, including empty ones.  Typically callers should use
+   * this only on paths that have already been normalized.
    */
   static std::string JoinPath(const std::vector<std::string>& components);
   static std::string JoinPath(std::vector<std::string>::const_iterator first,
                               std::vector<std::string>::const_iterator last);
 
-  /** Removes empty components from path.
-   */
-  static void RemoveEmptyPathElements(std::vector<std::string>& path);
-
   /**
    * Compare a path or components of a path.
    */