diff --git a/athenasub/src/formats/format_ass.cpp b/athenasub/src/formats/format_ass.cpp
index 4f0e133ab7b41dcbcbc5f8ac16a37c027cb52b5c..c713d18c9874200726ab16f81fffdfdc559f08bf 100644
--- a/athenasub/src/formats/format_ass.cpp
+++ b/athenasub/src/formats/format_ass.cpp
@@ -96,10 +96,48 @@ StringArray FormatASS2::GetWriteExtensions() const
 float FormatASSFamily::CanReadFile(Reader &reader) const
 {
 	shared_ptr<TextReader> file = reader.GetTextReader();
-	if (!file->HasMoreLines()) return 0;
+
+	// Check header
+	if (!file->HasMoreLines()) return 0.0f;
 	String line = file->ReadLineFromFile();
-	if (line == "[Script Info]") return 1;
-	return 0;
+	line.AsciiMakeLower();
+	if (line != "[script info]") return 0.0f;
+
+	float version = 0.0f;
+	float sections = 0.25f;
+	String section = line;
+	while (file->HasMoreLines()) {
+		// Get line
+		line = file->ReadLineFromFile();
+		line.AsciiMakeLower();
+
+		// Set section
+		if (line[0] == '[' && line[line.Length()-1] == ']') section = line;
+
+		// Check version
+		if (section == "[script info]") {
+			if (line.StartsWith("ScriptType")) {
+				int formatVersion = GetVersion();
+				String expected = "";
+				switch (formatVersion) {
+					case 0: expected = "v4.00"; break;
+					case 1: expected = "v4.00+"; break;
+					case 2: expected = "v4.00++"; break;
+				}
+				if (line.EndsWith(expected)) version = 0.5f;
+				else version = 0.25f;
+			}
+		}
+
+		// Done when events begin
+		if (section == "[events]") {
+			sections += 0.25f;
+			break;
+		}
+	}
+
+	// OK
+	return sections+version;
 }
 
 
diff --git a/athenasub/src/formats/format_ass.h b/athenasub/src/formats/format_ass.h
index dcbc9099a83a0825a976d4f801a9e6fc02f1f75c..bdfe93488f6e2d74bf2d133ca74e4beb58b42813 100644
--- a/athenasub/src/formats/format_ass.h
+++ b/athenasub/src/formats/format_ass.h
@@ -68,6 +68,9 @@ namespace Athenasub {
 
 	// Advanced Substation Alpha format base class
 	class FormatASSFamily : public IFormat {
+	protected:
+		virtual int GetVersion() const = 0;
+
 	public:
 		virtual ~FormatASSFamily() {}
 
@@ -98,6 +101,7 @@ namespace Athenasub {
 		String GetName() const { return "Substation Alpha"; }
 		StringArray GetReadExtensions() const;
 		StringArray GetWriteExtensions() const;
+		int GetVersion() const { return 0; }
 	};
 
 	// Advanced Substation Alpha
@@ -107,6 +111,7 @@ namespace Athenasub {
 		String GetName() const { return "Advanced Substation Alpha"; }
 		StringArray GetReadExtensions() const;
 		StringArray GetWriteExtensions() const;
+		int GetVersion() const { return 1; }
 	};
 
 	// Advanced Substation Alpha 2
@@ -116,6 +121,7 @@ namespace Athenasub {
 		String GetName() const { return "Advanced Substation Alpha 2"; }
 		StringArray GetReadExtensions() const;
 		StringArray GetWriteExtensions() const;
+		int GetVersion() const { return 2; }
 	};
 
 }