diff --git a/Tools/scripts/svneol.py b/Tools/scripts/svneol.py
index 5864cdc..9e57bb4 100644
--- a/Tools/scripts/svneol.py
+++ b/Tools/scripts/svneol.py
@@ -33,48 +33,50 @@
 import re
 import os
 
-def propfile(root, fn):
+def propfiles(root, fn):
     default = os.path.join(root, ".svn", "props", fn+".svn-work")
     try:
         format = int(open(os.path.join(root, ".svn", "format")).read().strip())
     except IOError:
-        return default
-    # XXX I don't know what version uses what format;
-    # this condition is just anecdotal
-    if format >= 8:
-        return os.path.join(root, ".svn", "prop-base", fn+".svn-base")
-    return default
+        return []
+    if format == 8:
+        # In version 8, committed props are stored in prop-base,
+        # local modifications in props
+        return [os.path.join(root, ".svn", "prop-base", fn+".svn-base"),
+                os.path.join(root, ".svn", "props", fn+".svn-work")]
+    raise ValueError, "Unknown repository format"
 
 def proplist(root, fn):
     "Return a list of property names for file fn in directory root"
-    path = propfile(root, fn)
-    try:
-        f = open(path)
-    except IOError:
-        # no properties file: not under version control
-        return []
     result = []
-    while 1:
-        # key-value pairs, of the form
-        # K <length>
-        # <keyname>NL
-        # V length
-        # <value>NL
-        # END
-        line = f.readline()
-        if line.startswith("END"):
-            break
-        assert line.startswith("K ")
-        L = int(line.split()[1])
-        key = f.read(L)
-        result.append(key)
-        f.readline()
-        line = f.readline()
-        assert line.startswith("V ")
-        L = int(line.split()[1])
-        value = f.read(L)
-        f.readline()
-    f.close()
+    for path in propfiles(root, fn):
+        try:
+            f = open(path)
+        except IOError:
+            # no properties file: not under version control,
+            # or no properties set
+            continue
+        while 1:
+            # key-value pairs, of the form
+            # K <length>
+            # <keyname>NL
+            # V length
+            # <value>NL
+            # END
+            line = f.readline()
+            if line.startswith("END"):
+                break
+            assert line.startswith("K ")
+            L = int(line.split()[1])
+            key = f.read(L)
+            result.append(key)
+            f.readline()
+            line = f.readline()
+            assert line.startswith("V ")
+            L = int(line.split()[1])
+            value = f.read(L)
+            f.readline()
+        f.close()
     return result
 
 possible_text_file = re.compile(r"\.([hc]|py|txt|sln|vcproj)$").search
