diff --git a/arm-wt-22k/lib_src/eas_xmf.c b/arm-wt-22k/lib_src/eas_xmf.c
index 0a92425..05b329e 100644
--- a/arm-wt-22k/lib_src/eas_xmf.c
+++ b/arm-wt-22k/lib_src/eas_xmf.c
@@ -43,6 +43,8 @@
 
 /* XMF header file type */
 #define XMF_IDENTIFIER          0x584d465f
+#define XMF_VERSION_1_00        0x312e3030
+#define XMF_VERSION_1_01        0x312e3031
 #define XMF_VERSION_2_00        0x322e3030
 #define XMF_FILE_TYPE           0x00000002
 #define XMF_SPEC_LEVEL          0x00000001
@@ -126,27 +128,36 @@
     /* read the version */
     if ((result = EAS_HWGetDWord(pEASData->hwInstData, fileHandle, &temp, EAS_TRUE))  != EAS_SUCCESS)
         return result;
-    if (temp != XMF_VERSION_2_00)
-    {
-        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "XMF file version was 0x%08x, expected 0x%08x\n", temp, XMF_VERSION_2_00); */ }
-        return EAS_SUCCESS;
-    }
 
-    /* read the file type */
-    if ((result = EAS_HWGetDWord(pEASData->hwInstData, fileHandle, &temp, EAS_TRUE))  != EAS_SUCCESS)
-        return result;
-    if (temp != XMF_FILE_TYPE)
+    if (temp == XMF_VERSION_2_00)
     {
-        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "XMF file type was 0x%08x, expected 0x%08x\n", temp, XMF_FILE_TYPE); */ }
-        return EAS_SUCCESS;
-    }
+        /* read the file type */
+        result = EAS_HWGetDWord(pEASData->hwInstData, fileHandle, &temp, EAS_TRUE);
+        if (result != EAS_SUCCESS)
+            return result;
 
-    /* read the spec level */
-    if ((result = EAS_HWGetDWord(pEASData->hwInstData, fileHandle, &temp, EAS_TRUE))  != EAS_SUCCESS)
-        return result;
-    if (temp != XMF_SPEC_LEVEL)
+        if (temp != XMF_FILE_TYPE)
+        {
+            { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR,
+                          "XMF file type was 0x%08x, expected 0x%08x\n", temp, XMF_FILE_TYPE); */ }
+            return EAS_SUCCESS;
+        }
+
+        /* read the spec level */
+        result = EAS_HWGetDWord(pEASData->hwInstData, fileHandle, &temp, EAS_TRUE);
+        if (result != EAS_SUCCESS)
+            return result;
+
+        if (temp != XMF_SPEC_LEVEL)
+        {
+            { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR,
+                          "XMF file spec was 0x%08x, expected 0x%08x\n", temp, XMF_SPEC_LEVEL); */ }
+            return EAS_SUCCESS;
+        }
+    }
+    else if (temp != XMF_VERSION_1_00 && temp != XMF_VERSION_1_01)
     {
-        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "XMF file spec was 0x%08x, expected 0x%08x\n", temp, XMF_SPEC_LEVEL); */ }
+        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "XMF file version was 0x%08x\n", temp); */ }
         return EAS_SUCCESS;
     }
 
