diff --git a/unit_test/src/athenasub/test_file.cpp b/unit_test/src/athenasub/test_file.cpp
index 6369c11c1f903ab9f5ab4b611a6e143c24b94ea0..f300ebabe9481fa693bb26fa978bb6062739a383 100644
--- a/unit_test/src/athenasub/test_file.cpp
+++ b/unit_test/src/athenasub/test_file.cpp
@@ -94,6 +94,7 @@ public:
 		controller->LoadFile(fileFolder+"out_test1.ass","UTF-8");
 		CPPUNIT_ASSERT_NO_THROW(controller->SaveFile(fileFolder+"out_test2.ass","UTF-8"));
 		CPPUNIT_ASSERT(AreFilesIdentical(fileFolder+"out_test1.ass",fileFolder+"out_test2.ass"));
+		CPPUNIT_ASSERT(AreFilesIdentical(fileFolder+"in_test1.ass",fileFolder+"out_test1.ass") == false);
 	}
 };
 
diff --git a/unit_test/src/utils.cpp b/unit_test/src/utils.cpp
index 253bce69cafefa8a104e228cd26ef2e87f50c699..bb3d07453f80bada443e3abcf433e3d6b3648730 100644
--- a/unit_test/src/utils.cpp
+++ b/unit_test/src/utils.cpp
@@ -33,14 +33,42 @@
 // Contact: mailto:zeratul@cellosoft.com
 //
 
+#include <wx/wxprec.h>
+#include <fstream>
+#include <iostream>
 #include "utils.h"
+#include "../../aegisub/md5.h"
 
 
 bool AreFilesIdentical(std::string file1, std::string file2)
 {
-	return GetFileMD5(file1) == GetFileMD5(file2);
+	std::string f1 = GetFileMD5(file1);
+	std::string f2 = GetFileMD5(file2);
+	return f1 == f2;
 }
 
 std::string GetFileMD5(std::string file) {
-	return "";
+	md5_state_s md5;
+	md5_byte_t digest[16];
+	const size_t toRead = 512;
+	md5_byte_t data[toRead];
+
+	std::ifstream fp(file.c_str());
+	if (fp.is_open()) {
+		md5_init(&md5);
+
+		while (!fp.eof()) {
+			fp.read((char*)data,toRead);
+			size_t n = fp.gcount();
+			md5_append(&md5,data,n);
+		}
+
+		md5_finish(&md5,digest);
+		unsigned int *res = (unsigned int*) digest;
+		return std::string(wxString::Format(_T("%08X%08X%08X%08X"),res[0],res[1],res[2],res[3]).mb_str(wxConvUTF8));
+	}
+
+	else {
+		return "";
+	}
 }
diff --git a/unit_test/unit_test.vcproj b/unit_test/unit_test.vcproj
index c847b907d0d3b770038b6896922a69d5bbbd2ada..00af86c6b2f847302e918d721abf103fdac9ab07 100644
--- a/unit_test/unit_test.vcproj
+++ b/unit_test/unit_test.vcproj
@@ -176,28 +176,40 @@
 				RelativePath=".\src\suites.h"
 				>
 			</File>
+		</Filter>
+		<Filter
+			Name="Athenasub"
+			>
 			<File
-				RelativePath=".\src\utils.cpp"
+				RelativePath=".\src\athenasub\test_file.cpp"
 				>
 			</File>
 			<File
-				RelativePath=".\src\utils.h"
+				RelativePath=".\src\athenasub\test_string.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\src\athenasub\test_time.cpp"
 				>
 			</File>
 		</Filter>
 		<Filter
-			Name="Athenasub"
+			Name="Utils"
 			>
 			<File
-				RelativePath=".\src\athenasub\test_file.cpp"
+				RelativePath="..\aegisub\md5.c"
 				>
 			</File>
 			<File
-				RelativePath=".\src\athenasub\test_string.cpp"
+				RelativePath="..\aegisub\md5.h"
 				>
 			</File>
 			<File
-				RelativePath=".\src\athenasub\test_time.cpp"
+				RelativePath=".\src\utils.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\src\utils.h"
 				>
 			</File>
 		</Filter>