diff --git a/Lib/macurl2path.py b/Lib/macurl2path.py
new file mode 100644
index 0000000..65afe69
--- /dev/null
+++ b/Lib/macurl2path.py
@@ -0,0 +1,76 @@
+"""Mac specific module for conversion between pathnames and URLs."""
+
+import string
+import urllib
+import os
+
+def url2pathname(pathname):
+    "Convert /-delimited pathname to mac pathname"
+    #
+    # XXXX The .. handling should be fixed...
+    #
+    tp = urllib.splittype(pathname)[0]
+    if tp and tp <> 'file':
+	raise RuntimeError, 'Cannot convert non-local URL to pathname'
+    components = string.split(pathname, '/')
+    # Remove . and embedded ..
+    i = 0
+    while i < len(components):
+	if components[i] == '.':
+	    del components[i]
+	elif components[i] == '..' and i > 0 and \
+				  components[i-1] not in ('', '..'):
+	    del components[i-1:i+1]
+	    i = i-1
+	elif components[i] == '' and i > 0 and components[i-1] <> '':
+	    del components[i]
+	else:
+	    i = i+1
+    if not components[0]:
+	# Absolute unix path, don't start with colon
+	return string.join(components[1:], ':')
+    else:
+	# relative unix path, start with colon. First replace
+	# leading .. by empty strings (giving ::file)
+	i = 0
+	while i < len(components) and components[i] == '..':
+	    components[i] = ''
+	    i = i + 1
+	return ':' + string.join(components, ':')
+
+def pathname2url(pathname):
+    "convert mac pathname to /-delimited pathname"
+    if '/' in pathname:
+	raise RuntimeError, "Cannot convert pathname containing slashes"
+    components = string.split(pathname, ':')
+    # Replace empty string ('::') by .. (will result in '/../' later)
+    for i in range(1, len(components)):
+	if components[i] == '':
+	    components[i] = '..'
+    # Truncate names longer than 31 bytes
+    components = map(lambda x: x[:31], components)
+
+    if os.path.isabs(pathname):
+	return '/' + string.join(components, '/')
+    else:
+	return string.join(components, '/')
+
+def test():
+    for url in ["index.html",
+		"bar/index.html",
+		"/foo/bar/index.html",
+		"/foo/bar/",
+		"/"]:
+	print `url`, '->', `url2pathname(url)`
+    for path in ["drive:",
+		 "drive:dir:",
+		 "drive:dir:file",
+		 "drive:file",
+		 "file",
+		 ":file",
+		 ":dir:",
+		 ":dir:file"]:
+	print `path`, '->', `pathname2url(path)`
+
+if __name__ == '__main__':
+    test()
