diff --git a/BaseLib/FileTools.cpp b/BaseLib/FileTools.cpp
index 124ba0bfea864e3445d91965d5a23b9d96e3d167..0e8ce3155ffd275301c27975e11e2a1818ac14a9 100644
--- a/BaseLib/FileTools.cpp
+++ b/BaseLib/FileTools.cpp
@@ -87,7 +87,7 @@ std::string dropFileExtension(std::string const& filename)
 	if (p == std::string::npos)
 		return filename;
 
-	return filename.substr(0, filename.length() - p);
+	return filename.substr(0, p);
 }
 
 std::string extractBaseName(std::string const& pathname)
diff --git a/BaseLib/FileTools.h b/BaseLib/FileTools.h
index 50cbc3282d56fc74b3cce165f7eb2def11596584..f524b9c19bd088bbd519e2099bc898d444455847 100644
--- a/BaseLib/FileTools.h
+++ b/BaseLib/FileTools.h
@@ -75,6 +75,11 @@ std::string getFileExtension(std::string const& filename);
  */
 bool hasFileExtension(std::string const& extension, std::string const& filename);
 
+/** Returns a string with file extension as found by getFileExtension()
+ * dropped.
+ */
+std::string dropFileExtension(std::string const& filename);
+
 /**
  * Checks if file_name already contains a qualified path and if not copies the
  * path from source.