join(): join one or more path components
diff --git a/Lib/macpath.py b/Lib/macpath.py
index c45ecbf..a6cf66b 100644
--- a/Lib/macpath.py
+++ b/Lib/macpath.py
@@ -20,18 +20,24 @@
 	return ':' in s and s[0] <> ':'
 
 
-# Join two pathnames.
-# The result is equivalent to what the second pathname would refer to
-# if the first pathname were the current directory.
+# Join pathnames.
+# Ignore the previous parts if a part is absolute.
+# Insert a '/' unless the first part is empty or already ends in '/'.
 
-def join(s, t):
-	if (not s) or isabs(t): return t
-	if t[:1] == ':': t = t[1:]
-	if ':' not in s:
-		s = ':' + s
-	if s[-1:] <> ':':
-		s = s + ':'
-	return s + t
+def join(s, *p):
+	path = s
+	for t in p:
+		if (not s) or isabs(t):
+			path = t
+			continue
+		if t[:1] == ':':
+			t = t[1:]
+		if ':' not in path:
+			path = ':' + path
+		if path[-1:] <> ':':
+			path = path + ':'
+		path = path + t
+	return path
 
 
 # Split a pathname in two parts: the directory leading up to the final bit,
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
index 6a77ec8..d395154 100644
--- a/Lib/ntpath.py
+++ b/Lib/ntpath.py
@@ -34,15 +34,20 @@
 	return s != '' and s[:1] in '/\\'
 
 
-# Join two pathnames.
-# Ignore the first part if the second part is absolute.
+# Join pathnames.
+# Ignore the previous parts if a part is absolute.
 # Insert a '/' unless the first part is empty or already ends in '/'.
 
-def join(a, b):
-	if isabs(b): return b
-	if a == '' or a[-1:] in '/\\': return a + b
-	# Note: join('x', '') returns 'x/'; is this what we want?
-	return a + os.sep + b
+def join(a, *p):
+	path = a
+	for b in p:
+		if isabs(b):
+			path = b
+		elif path == '' or path[-1:] in '/\\':
+			path = path + b
+		else:
+			path = path + os.sep + b
+	return path
 
 
 # Split a path in a drive specification (a drive letter followed by a
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 014dfe2..965184b 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -26,15 +26,20 @@
 	return s[:1] == '/'
 
 
-# Join two pathnames.
-# Ignore the first part if the second part is absolute.
+# Join pathnames.
+# Ignore the previous parts if a part is absolute.
 # Insert a '/' unless the first part is empty or already ends in '/'.
 
-def join(a, b):
-	if b[:1] == '/': return b
-	if a == '' or a[-1:] == '/': return a + b
-	# Note: join('x', '') returns 'x/'; is this what we want?
-	return a + '/' + b
+def join(a, *p):
+	path = a
+	for b in p:
+		if b[:1] == '/':
+			path = b
+		elif path == '' or path[-1:] == '/':
+			path = path + b
+		else:
+			path = path + '/' + b
+	return path
 
 
 # Split a path in head (everything up to the last '/') and tail (the