diff --git a/SystemTools.cxx b/SystemTools.cxx
index 2f0aac9fbf43448b64574bb483400a24171cce16..3419a5a164ebc979a951b1314c3bd58291aa2295 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -2466,6 +2466,31 @@ bool SystemTools::ComparePath(const char* c1, const char* c2)
 #endif
 }
 
+//----------------------------------------------------------------------------
+bool SystemTools::Split(const char* str, kwsys_stl::vector<kwsys_stl::string>& lines, char separator)
+{
+  kwsys_stl::string data(str);
+  kwsys_stl::string::size_type lpos = 0;
+  while(lpos < data.length())
+    {
+    kwsys_stl::string::size_type rpos = data.find_first_of(separator, lpos);
+    if(rpos == kwsys_stl::string::npos)
+      {
+      // Line ends at end of string without a newline.
+      lines.push_back(data.substr(lpos));
+      return false;
+      }
+    else
+      {
+      // Line ends in a "\n", remove the character.
+      lines.push_back(data.substr(lpos, rpos-lpos));
+      }
+    lpos = rpos+1;
+    }
+  return true;
+}
+
+//----------------------------------------------------------------------------
 bool SystemTools::Split(const char* str, kwsys_stl::vector<kwsys_stl::string>& lines)
 {
   kwsys_stl::string data(str);
diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in
index f48e0641a89845294fc865dedb0e734981e2170b..fe048c2f14778471797ac555c2694af1dcb31389 100644
--- a/SystemTools.hxx.in
+++ b/SystemTools.hxx.in
@@ -189,6 +189,7 @@ public:
    * Return false only if the last line stored had no newline
    */
   static bool Split(const char* s, kwsys_stl::vector<kwsys_stl::string>& l);
+  static bool Split(const char* s, kwsys_stl::vector<kwsys_stl::string>& l, char separator);
   
   /** 
    * Return string with space added between capitalized words