diff --git a/BaseLib/FileTools.cpp b/BaseLib/FileTools.cpp
index 88ec37f123a80a91036ffbdfac6f06eb4ffe99a9..9a0d28b3bc1f144d1983dc553531bd30f9702077 100644
--- a/BaseLib/FileTools.cpp
+++ b/BaseLib/FileTools.cpp
@@ -14,6 +14,8 @@
 #include "FileTools.h"
 
 #include <sys/stat.h>
+#include <algorithm>
+#include <cctype>
 
 namespace BaseLib
 {
@@ -99,6 +101,19 @@ std::string getFileExtension(const std::string &path)
 	return str.substr(p + 1);
 }
 
+bool hasFileExtension(std::string const& extension, std::string const& filename)
+{
+	std::string ext = extension;	// Copy for modification.
+	std::transform(ext.begin(), ext.end(), ext.begin(),
+		(int(*)(int)) std::toupper);
+
+	std::string file_ext = getFileExtension(filename);
+	std::transform(file_ext.begin(), file_ext.end(), file_ext.begin(),
+		(int(*)(int)) std::toupper);
+
+	return ext == file_ext;
+}
+
 std::string copyPathToFileName(const std::string &file_name, const std::string &source)
 {
 	// check if file_name already contains a full path
diff --git a/BaseLib/FileTools.h b/BaseLib/FileTools.h
index 3153fc6bc1a69298a0a2a3481d223e5fd81bf571..113298dd311f66db1ad5ef9eadc2d0e17411457d 100644
--- a/BaseLib/FileTools.h
+++ b/BaseLib/FileTools.h
@@ -69,6 +69,12 @@ std::string extractBaseNameWithoutExtension(std::string const& pathname);
  */
 std::string getFileExtension(std::string const& filename);
 
+/**
+ * Compares filename's extension with query extension. The comparison is case
+ * insensitive done by converting to upper case with the std::toupper()
+ * function.
+ */
+bool hasFileExtension(std::string const& extension, std::string const& filename);
 
 /**
  * Checks if file_name already contains a qualified path and if not copies the path from source.
diff --git a/Tests/BaseLib/TestFilePathStringManipulation.cpp b/Tests/BaseLib/TestFilePathStringManipulation.cpp
index 03952bdabe74dae4be1edd997bb5768129d69025..44d7f8d99a016f26e9b0a68dd52c88bf3ca05493 100644
--- a/Tests/BaseLib/TestFilePathStringManipulation.cpp
+++ b/Tests/BaseLib/TestFilePathStringManipulation.cpp
@@ -208,6 +208,78 @@ TEST(BaseLib, ExtractBaseNameWin)
 	ASSERT_EQ ( BaseLib::extractBaseName("\\path.wrong0\\path.wrong\\path.ext\\"), "" );
 }
 
+TEST(BaseLib, HasFileExtensionWin)
+{
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "file"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\file"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "path\\"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path\\"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "path\\file"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path\\file"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path\\path\\file"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path\\path\\path\\"));
+
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "\\file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "path.ext\\"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path.ext\\"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path\\file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "\\path\\file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "\\path\\path\\file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path\\path\\path.ext\\"));
+
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path.wrong\\file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "\\path.wrong\\file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "\\path.wrong0\\path.wrong\\file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "\\path.wrong0\\path.wrong\\path.ext\\"));
+
+	ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "file.EXT"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "file.EXT"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("Ext", "file.exT"));
+
+	ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "path\\file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "path\\file.EXT"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path\\file.EXT"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("Ext", "path\\file.exT"));
+}
+
+TEST(BaseLib, HasFileExtensionUnix)
+{
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "file"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "/file"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "path/"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path/"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "path/file"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path/file"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path/path/file"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path/path/path/"));
+
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "/file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "path.ext/"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path.ext/"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path/file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "/path/file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "/path/path/file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path/path/path.ext/"));
+
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path.wrong/file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "/path.wrong/file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "/path.wrong0/path.wrong/file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("", "/path.wrong0/path.wrong/path.ext/"));
+
+	ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "file.EXT"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "file.EXT"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("Ext", "file.exT"));
+
+	ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "path/file.ext"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("EXT", "path/file.EXT"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("ext", "path/file.EXT"));
+	ASSERT_TRUE ( BaseLib::hasFileExtension("Ext", "path/file.exT"));
+}
+
 TEST(BaseLib, ExtractBaseNameUnix)
 {
 	ASSERT_EQ ( BaseLib::extractBaseName("file"), "file" );