diff --git a/BaseLib/StringTools.cpp b/BaseLib/StringTools.cpp
index a881a25c0d37fd8195a622a4a454de5291e2abab..0c00e867c1bfc7f360413d8274537330a0f69bd2 100644
--- a/BaseLib/StringTools.cpp
+++ b/BaseLib/StringTools.cpp
@@ -119,4 +119,19 @@ std::string randomString(std::size_t const length)
     return s;
 }
 
+std::string getUniqueName(std::vector<std::string> const& existing_names,
+                          std::string const& input_name)
+{
+    std::string result_name = input_name;
+    std::size_t count = 1;
+    while (std::find(existing_names.cbegin(),
+                     existing_names.cend(),
+                     result_name) != existing_names.end())
+    {
+        count++;
+        result_name = input_name + "-" + std::to_string(count);
+    }
+    return result_name;
+}
+
 }  // end namespace BaseLib
diff --git a/BaseLib/StringTools.h b/BaseLib/StringTools.h
index 23be7a0415e6ec9ef8c22f329b5b24347faf557a..dfe5487710eb9c230ec280ed58bd5966555f9e59 100644
--- a/BaseLib/StringTools.h
+++ b/BaseLib/StringTools.h
@@ -75,4 +75,7 @@ void simplify(std::string &str);
 //! Returns a random string of the given length containing just a-z,A-Z,0-9
 std::string randomString(std::size_t length);
 
+//! Append '-' and a number such that the name is unique.
+std::string getUniqueName(std::vector<std::string> const& existing_names,
+                          std::string const& input_name);
 } // end namespace BaseLib