diff --git a/Lib/shutil.py b/Lib/shutil.py
index 21dce5e..34a38c4 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -10,75 +10,75 @@
 # Copy data from src to dst
 #
 def copyfile(src, dst):
-	fsrc = None
-	fdst = None
-	try:
-		fsrc = open(src, 'rb')
-		fdst = open(dst, 'wb')
-		while 1:
-			buf = fsrc.read(16*1024)
-			if not buf:
-				break
-			fdst.write(buf)
-	finally:
-		if fdst:
-			fdst.close()
-		if fsrc:
-			fsrc.close()
+    fsrc = None
+    fdst = None
+    try:
+	fsrc = open(src, 'rb')
+	fdst = open(dst, 'wb')
+	while 1:
+	    buf = fsrc.read(16*1024)
+	    if not buf:
+		break
+	    fdst.write(buf)
+    finally:
+	if fdst:
+	    fdst.close()
+	if fsrc:
+	    fsrc.close()
 
 # Copy mode bits from src to dst
 #
 def copymode(src, dst):
-	st = os.stat(src)
-	mode = divmod(st[0], MODEBITS)[1]
-	os.chmod(dst, mode)
+    st = os.stat(src)
+    mode = divmod(st[0], MODEBITS)[1]
+    os.chmod(dst, mode)
 
 # Copy all stat info (mode bits, atime and mtime) from src to dst
 #
 def copystat(src, dst):
-	st = os.stat(src)
-	mode = divmod(st[0], MODEBITS)[1]
-	os.chmod(dst, mode)
-	os.utime(dst, st[7:9])
+    st = os.stat(src)
+    mode = divmod(st[0], MODEBITS)[1]
+    os.chmod(dst, mode)
+    os.utime(dst, st[7:9])
 
 # Copy data and mode bits ("cp src dst").
 # Support directory as target.
 #
 def copy(src, dst):
-	if os.path.isdir(dst):
-		dst = os.path.join(dst, os.path.basename(src))
-	copyfile(src, dst)
-	copymode(src, dst)
+    if os.path.isdir(dst):
+	dst = os.path.join(dst, os.path.basename(src))
+    copyfile(src, dst)
+    copymode(src, dst)
 
 # Copy data and all stat info ("cp -p src dst").
 # Support directory as target.
 #
 def copy2(src, dst):
-	if os.path.isdir(dst):
-		dst = os.path.join(dst, os.path.basename(src))
-	copyfile(src, dst)
-	copystat(src, dst)
+    if os.path.isdir(dst):
+	dst = os.path.join(dst, os.path.basename(src))
+    copyfile(src, dst)
+    copystat(src, dst)
 
 # Recursively copy a directory tree.
 # The destination must not already exist.
 #
 def copytree(src, dst):
-	names = os.listdir(src)
-	os.mkdir(dst, 0777)
-	for name in names:
-		srcname = os.path.join(src, name)
-		dstname = os.path.join(dst, name)
-		#print 'Copying', srcname, 'to', dstname
-		try:
-			#if os.path.islink(srcname):
-			#	linkto = os.readlink(srcname)
-			#	os.symlink(linkto, dstname)
-			#elif os.path.isdir(srcname):
-			if os.path.isdir(srcname):
-				copytree(srcname, dstname)
-			else:
-				copy2(srcname, dstname)
-			# XXX What about devices, sockets etc.?
-		except os.error, why:
-			print 'Could not copy', srcname, 'to', dstname,
-			print '(', why[1], ')'
+    names = os.listdir(src)
+    os.mkdir(dst, 0777)
+    for name in names:
+	srcname = os.path.join(src, name)
+	dstname = os.path.join(dst, name)
+	#print 'Copying', srcname, 'to', dstname
+	try:
+	    #if os.path.islink(srcname):
+	    #	linkto = os.readlink(srcname)
+	    #	os.symlink(linkto, dstname)
+	    #elif os.path.isdir(srcname):
+	    if os.path.isdir(srcname):
+		copytree(srcname, dstname)
+	    else:
+		copy2(srcname, dstname)
+	    # XXX What about devices, sockets etc.?
+	except os.error, why:
+	    print 'Could not copy', srcname, 'to', dstname,
+	    print '(', why[1], ')'
