diff --git a/Lib/test/test_b1.py b/Lib/test/test_b1.py
index 9e6c8d5..249f1fa 100644
--- a/Lib/test/test_b1.py
+++ b/Lib/test/test_b1.py
@@ -470,8 +470,8 @@
 except: raise TestFailed("int('1' * 600) didn't return long")
 
 if have_unicode:
-	try: int(unichr(0x661) * 600)
-	except: raise TestFailed("int('\\u0661' * 600) didn't return long")
+    try: int(unichr(0x661) * 600)
+    except: raise TestFailed("int('\\u0661' * 600) didn't return long")
 
 try: int(1, 12)
 except TypeError: pass
@@ -539,17 +539,17 @@
     # XXX If/when PySequence_Length() returns a ssize_t, it should be
     # XXX re-enabled.
     try:
-        # Verify clearing of bug #556025.
-        # This assumes that the max data size (sys.maxint) == max
-        # address size this also assumes that the address size is at
-        # least 4 bytes with 8 byte addresses, the bug is not well
-        # tested
-        #
-        # Note: This test is expected to SEGV under Cygwin 1.3.12 or
-        # earlier due to a newlib bug.  See the following mailing list
-        # thread for the details:
+    # Verify clearing of bug #556025.
+    # This assumes that the max data size (sys.maxint) == max
+    # address size this also assumes that the address size is at
+    # least 4 bytes with 8 byte addresses, the bug is not well
+    # tested
+    #
+    # Note: This test is expected to SEGV under Cygwin 1.3.12 or
+    # earlier due to a newlib bug.  See the following mailing list
+    # thread for the details:
 
-        #     http://sources.redhat.com/ml/newlib/2002/msg00369.html
+    #     http://sources.redhat.com/ml/newlib/2002/msg00369.html
         list(xrange(sys.maxint // 2))
     except MemoryError:
         pass
diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py
index d8f2c25..bc9eb3c 100644
--- a/Lib/test/test_bz2.py
+++ b/Lib/test/test_bz2.py
@@ -8,275 +8,275 @@
 from test import test_support
 
 class BaseTest(unittest.TestCase):
-	"Base for other testcases."
-	TEXT = 'root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:\ndaemon:x:2:2:daemon:/sbin:\nadm:x:3:4:adm:/var/adm:\nlp:x:4:7:lp:/var/spool/lpd:\nsync:x:5:0:sync:/sbin:/bin/sync\nshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\nhalt:x:7:0:halt:/sbin:/sbin/halt\nmail:x:8:12:mail:/var/spool/mail:\nnews:x:9:13:news:/var/spool/news:\nuucp:x:10:14:uucp:/var/spool/uucp:\noperator:x:11:0:operator:/root:\ngames:x:12:100:games:/usr/games:\ngopher:x:13:30:gopher:/usr/lib/gopher-data:\nftp:x:14:50:FTP User:/var/ftp:/bin/bash\nnobody:x:65534:65534:Nobody:/home:\npostfix:x:100:101:postfix:/var/spool/postfix:\nniemeyer:x:500:500::/home/niemeyer:/bin/bash\npostgres:x:101:102:PostgreSQL Server:/var/lib/pgsql:/bin/bash\nmysql:x:102:103:MySQL server:/var/lib/mysql:/bin/bash\nwww:x:103:104::/var/www:/bin/false\n'
-	DATA = 'BZh91AY&SY.\xc8N\x18\x00\x01>_\x80\x00\x10@\x02\xff\xf0\x01\x07n\x00?\xe7\xff\xe00\x01\x99\xaa\x00\xc0\x03F\x86\x8c#&\x83F\x9a\x03\x06\xa6\xd0\xa6\x93M\x0fQ\xa7\xa8\x06\x804hh\x12$\x11\xa4i4\xf14S\xd2<Q\xb5\x0fH\xd3\xd4\xdd\xd5\x87\xbb\xf8\x94\r\x8f\xafI\x12\xe1\xc9\xf8/E\x00pu\x89\x12]\xc9\xbbDL\nQ\x0e\t1\x12\xdf\xa0\xc0\x97\xac2O9\x89\x13\x94\x0e\x1c7\x0ed\x95I\x0c\xaaJ\xa4\x18L\x10\x05#\x9c\xaf\xba\xbc/\x97\x8a#C\xc8\xe1\x8cW\xf9\xe2\xd0\xd6M\xa7\x8bXa<e\x84t\xcbL\xb3\xa7\xd9\xcd\xd1\xcb\x84.\xaf\xb3\xab\xab\xad`n}\xa0lh\tE,\x8eZ\x15\x17VH>\x88\xe5\xcd9gd6\x0b\n\xe9\x9b\xd5\x8a\x99\xf7\x08.K\x8ev\xfb\xf7xw\xbb\xdf\xa1\x92\xf1\xdd|/";\xa2\xba\x9f\xd5\xb1#A\xb6\xf6\xb3o\xc9\xc5y\\\xebO\xe7\x85\x9a\xbc\xb6f8\x952\xd5\xd7"%\x89>V,\xf7\xa6z\xe2\x9f\xa3\xdf\x11\x11"\xd6E)I\xa9\x13^\xca\xf3r\xd0\x03U\x922\xf26\xec\xb6\xed\x8b\xc3U\x13\x9d\xc5\x170\xa4\xfa^\x92\xacDF\x8a\x97\xd6\x19\xfe\xdd\xb8\xbd\x1a\x9a\x19\xa3\x80ankR\x8b\xe5\xd83]\xa9\xc6\x08\x82f\xf6\xb9"6l$\xb8j@\xc0\x8a\xb0l1..\xbak\x83ls\x15\xbc\xf4\xc1\x13\xbe\xf8E\xb8\x9d\r\xa8\x9dk\x84\xd3n\xfa\xacQ\x07\xb1%y\xaav\xb4\x08\xe0z\x1b\x16\xf5\x04\xe9\xcc\xb9\x08z\x1en7.G\xfc]\xc9\x14\xe1B@\xbb!8`'
-	DATA_CRLF = 'BZh91AY&SY\xaez\xbbN\x00\x01H\xdf\x80\x00\x12@\x02\xff\xf0\x01\x07n\x00?\xe7\xff\xe0@\x01\xbc\xc6`\x86*\x8d=M\xa9\x9a\x86\xd0L@\x0fI\xa6!\xa1\x13\xc8\x88jdi\x8d@\x03@\x1a\x1a\x0c\x0c\x83 \x00\xc4h2\x19\x01\x82D\x84e\t\xe8\x99\x89\x19\x1ah\x00\r\x1a\x11\xaf\x9b\x0fG\xf5(\x1b\x1f?\t\x12\xcf\xb5\xfc\x95E\x00ps\x89\x12^\xa4\xdd\xa2&\x05(\x87\x04\x98\x89u\xe40%\xb6\x19\'\x8c\xc4\x89\xca\x07\x0e\x1b!\x91UIFU%C\x994!DI\xd2\xfa\xf0\xf1N8W\xde\x13A\xf5\x9cr%?\x9f3;I45A\xd1\x8bT\xb1<l\xba\xcb_\xc00xY\x17r\x17\x88\x08\x08@\xa0\ry@\x10\x04$)`\xf2\xce\x89z\xb0s\xec\x9b.iW\x9d\x81\xb5-+t\x9f\x1a\'\x97dB\xf5x\xb5\xbe.[.\xd7\x0e\x81\xe7\x08\x1cN`\x88\x10\xca\x87\xc3!"\x80\x92R\xa1/\xd1\xc0\xe6mf\xac\xbd\x99\xcca\xb3\x8780>\xa4\xc7\x8d\x1a\\"\xad\xa1\xabyBg\x15\xb9l\x88\x88\x91k"\x94\xa4\xd4\x89\xae*\xa6\x0b\x10\x0c\xd6\xd4m\xe86\xec\xb5j\x8a\x86j\';\xca.\x01I\xf2\xaaJ\xe8\x88\x8cU+t3\xfb\x0c\n\xa33\x13r2\r\x16\xe0\xb3(\xbf\x1d\x83r\xe7M\xf0D\x1365\xd8\x88\xd3\xa4\x92\xcb2\x06\x04\\\xc1\xb0\xea//\xbek&\xd8\xe6+t\xe5\xa1\x13\xada\x16\xder5"w]\xa2i\xb7[\x97R \xe2IT\xcd;Z\x04dk4\xad\x8a\t\xd3\x81z\x10\xf1:^`\xab\x1f\xc5\xdc\x91N\x14$+\x9e\xae\xd3\x80'
+    "Base for other testcases."
+    TEXT = 'root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:\ndaemon:x:2:2:daemon:/sbin:\nadm:x:3:4:adm:/var/adm:\nlp:x:4:7:lp:/var/spool/lpd:\nsync:x:5:0:sync:/sbin:/bin/sync\nshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\nhalt:x:7:0:halt:/sbin:/sbin/halt\nmail:x:8:12:mail:/var/spool/mail:\nnews:x:9:13:news:/var/spool/news:\nuucp:x:10:14:uucp:/var/spool/uucp:\noperator:x:11:0:operator:/root:\ngames:x:12:100:games:/usr/games:\ngopher:x:13:30:gopher:/usr/lib/gopher-data:\nftp:x:14:50:FTP User:/var/ftp:/bin/bash\nnobody:x:65534:65534:Nobody:/home:\npostfix:x:100:101:postfix:/var/spool/postfix:\nniemeyer:x:500:500::/home/niemeyer:/bin/bash\npostgres:x:101:102:PostgreSQL Server:/var/lib/pgsql:/bin/bash\nmysql:x:102:103:MySQL server:/var/lib/mysql:/bin/bash\nwww:x:103:104::/var/www:/bin/false\n'
+    DATA = 'BZh91AY&SY.\xc8N\x18\x00\x01>_\x80\x00\x10@\x02\xff\xf0\x01\x07n\x00?\xe7\xff\xe00\x01\x99\xaa\x00\xc0\x03F\x86\x8c#&\x83F\x9a\x03\x06\xa6\xd0\xa6\x93M\x0fQ\xa7\xa8\x06\x804hh\x12$\x11\xa4i4\xf14S\xd2<Q\xb5\x0fH\xd3\xd4\xdd\xd5\x87\xbb\xf8\x94\r\x8f\xafI\x12\xe1\xc9\xf8/E\x00pu\x89\x12]\xc9\xbbDL\nQ\x0e\t1\x12\xdf\xa0\xc0\x97\xac2O9\x89\x13\x94\x0e\x1c7\x0ed\x95I\x0c\xaaJ\xa4\x18L\x10\x05#\x9c\xaf\xba\xbc/\x97\x8a#C\xc8\xe1\x8cW\xf9\xe2\xd0\xd6M\xa7\x8bXa<e\x84t\xcbL\xb3\xa7\xd9\xcd\xd1\xcb\x84.\xaf\xb3\xab\xab\xad`n}\xa0lh\tE,\x8eZ\x15\x17VH>\x88\xe5\xcd9gd6\x0b\n\xe9\x9b\xd5\x8a\x99\xf7\x08.K\x8ev\xfb\xf7xw\xbb\xdf\xa1\x92\xf1\xdd|/";\xa2\xba\x9f\xd5\xb1#A\xb6\xf6\xb3o\xc9\xc5y\\\xebO\xe7\x85\x9a\xbc\xb6f8\x952\xd5\xd7"%\x89>V,\xf7\xa6z\xe2\x9f\xa3\xdf\x11\x11"\xd6E)I\xa9\x13^\xca\xf3r\xd0\x03U\x922\xf26\xec\xb6\xed\x8b\xc3U\x13\x9d\xc5\x170\xa4\xfa^\x92\xacDF\x8a\x97\xd6\x19\xfe\xdd\xb8\xbd\x1a\x9a\x19\xa3\x80ankR\x8b\xe5\xd83]\xa9\xc6\x08\x82f\xf6\xb9"6l$\xb8j@\xc0\x8a\xb0l1..\xbak\x83ls\x15\xbc\xf4\xc1\x13\xbe\xf8E\xb8\x9d\r\xa8\x9dk\x84\xd3n\xfa\xacQ\x07\xb1%y\xaav\xb4\x08\xe0z\x1b\x16\xf5\x04\xe9\xcc\xb9\x08z\x1en7.G\xfc]\xc9\x14\xe1B@\xbb!8`'
+    DATA_CRLF = 'BZh91AY&SY\xaez\xbbN\x00\x01H\xdf\x80\x00\x12@\x02\xff\xf0\x01\x07n\x00?\xe7\xff\xe0@\x01\xbc\xc6`\x86*\x8d=M\xa9\x9a\x86\xd0L@\x0fI\xa6!\xa1\x13\xc8\x88jdi\x8d@\x03@\x1a\x1a\x0c\x0c\x83 \x00\xc4h2\x19\x01\x82D\x84e\t\xe8\x99\x89\x19\x1ah\x00\r\x1a\x11\xaf\x9b\x0fG\xf5(\x1b\x1f?\t\x12\xcf\xb5\xfc\x95E\x00ps\x89\x12^\xa4\xdd\xa2&\x05(\x87\x04\x98\x89u\xe40%\xb6\x19\'\x8c\xc4\x89\xca\x07\x0e\x1b!\x91UIFU%C\x994!DI\xd2\xfa\xf0\xf1N8W\xde\x13A\xf5\x9cr%?\x9f3;I45A\xd1\x8bT\xb1<l\xba\xcb_\xc00xY\x17r\x17\x88\x08\x08@\xa0\ry@\x10\x04$)`\xf2\xce\x89z\xb0s\xec\x9b.iW\x9d\x81\xb5-+t\x9f\x1a\'\x97dB\xf5x\xb5\xbe.[.\xd7\x0e\x81\xe7\x08\x1cN`\x88\x10\xca\x87\xc3!"\x80\x92R\xa1/\xd1\xc0\xe6mf\xac\xbd\x99\xcca\xb3\x8780>\xa4\xc7\x8d\x1a\\"\xad\xa1\xabyBg\x15\xb9l\x88\x88\x91k"\x94\xa4\xd4\x89\xae*\xa6\x0b\x10\x0c\xd6\xd4m\xe86\xec\xb5j\x8a\x86j\';\xca.\x01I\xf2\xaaJ\xe8\x88\x8cU+t3\xfb\x0c\n\xa33\x13r2\r\x16\xe0\xb3(\xbf\x1d\x83r\xe7M\xf0D\x1365\xd8\x88\xd3\xa4\x92\xcb2\x06\x04\\\xc1\xb0\xea//\xbek&\xd8\xe6+t\xe5\xa1\x13\xada\x16\xder5"w]\xa2i\xb7[\x97R \xe2IT\xcd;Z\x04dk4\xad\x8a\t\xd3\x81z\x10\xf1:^`\xab\x1f\xc5\xdc\x91N\x14$+\x9e\xae\xd3\x80'
 
-	def decompress(self, data):
-		pop = popen2.Popen3("bunzip2", capturestderr=1)
-		pop.tochild.write(data)
-		pop.tochild.close()
-		ret = pop.fromchild.read()
-		pop.fromchild.close()
-		if pop.wait() != 0:
-			ret = decompress(data)
-		return ret
+    def decompress(self, data):
+        pop = popen2.Popen3("bunzip2", capturestderr=1)
+        pop.tochild.write(data)
+        pop.tochild.close()
+        ret = pop.fromchild.read()
+        pop.fromchild.close()
+        if pop.wait() != 0:
+            ret = decompress(data)
+        return ret
 
 class BZ2FileTest(BaseTest):
-	"Test MCRYPT type miscelaneous methods."
+    "Test MCRYPT type miscelaneous methods."
 
-	def setUp(self):
-		self.filename = tempfile.mktemp("bz2")
+    def setUp(self):
+        self.filename = tempfile.mktemp("bz2")
 
-	def tearDown(self):
-		if os.path.isfile(self.filename):
-			os.unlink(self.filename)
+    def tearDown(self):
+        if os.path.isfile(self.filename):
+            os.unlink(self.filename)
 
-	def createTempFile(self, crlf=0):
-		f = open(self.filename, "wb")
-		if crlf:
-			data = self.DATA_CRLF
-		else:
-			data = self.DATA
-		f.write(data)
-		f.close()
+    def createTempFile(self, crlf=0):
+        f = open(self.filename, "wb")
+        if crlf:
+            data = self.DATA_CRLF
+        else:
+            data = self.DATA
+        f.write(data)
+        f.close()
 
-	def testRead(self):
-		# "Test BZ2File.read()"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		self.assertEqual(bz2f.read(), self.TEXT)
-		bz2f.close()
+    def testRead(self):
+        # "Test BZ2File.read()"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        self.assertEqual(bz2f.read(), self.TEXT)
+        bz2f.close()
 
-	def testReadChunk10(self):
-		# "Test BZ2File.read() in chunks of 10 bytes"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		text = ''
-		while 1:
-			str = bz2f.read(10)
-			if not str:
-				break
-			text += str
-		self.assertEqual(text, text)
-		bz2f.close()
+    def testReadChunk10(self):
+        # "Test BZ2File.read() in chunks of 10 bytes"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        text = ''
+        while 1:
+            str = bz2f.read(10)
+            if not str:
+                break
+            text += str
+        self.assertEqual(text, text)
+        bz2f.close()
 
-	def testRead100(self):
-		# "Test BZ2File.read(100)"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		self.assertEqual(bz2f.read(100), self.TEXT[:100])
-		bz2f.close()
+    def testRead100(self):
+        # "Test BZ2File.read(100)"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        self.assertEqual(bz2f.read(100), self.TEXT[:100])
+        bz2f.close()
 
-	def testReadLine(self):
-		# "Test BZ2File.readline()"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		sio = StringIO(self.TEXT)
-		for line in sio.readlines():
-			self.assertEqual(bz2f.readline(), line)
-		bz2f.close()
+    def testReadLine(self):
+        # "Test BZ2File.readline()"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        sio = StringIO(self.TEXT)
+        for line in sio.readlines():
+            self.assertEqual(bz2f.readline(), line)
+        bz2f.close()
 
-	def testReadLines(self):
-		# "Test BZ2File.readlines()"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		sio = StringIO(self.TEXT)
-		self.assertEqual(bz2f.readlines(), sio.readlines())
-		bz2f.close()
+    def testReadLines(self):
+        # "Test BZ2File.readlines()"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        sio = StringIO(self.TEXT)
+        self.assertEqual(bz2f.readlines(), sio.readlines())
+        bz2f.close()
 
-	def testIterator(self):
-		# "Test iter(BZ2File)"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		sio = StringIO(self.TEXT)
-		self.assertEqual(list(iter(bz2f)), sio.readlines())
-		bz2f.close()
+    def testIterator(self):
+        # "Test iter(BZ2File)"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        sio = StringIO(self.TEXT)
+        self.assertEqual(list(iter(bz2f)), sio.readlines())
+        bz2f.close()
 
-	def testXReadLines(self):
-		# "Test BZ2File.xreadlines()"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		sio = StringIO(self.TEXT)
-		self.assertEqual(list(bz2f.xreadlines()), sio.readlines())
-		bz2f.close()
+    def testXReadLines(self):
+        # "Test BZ2File.xreadlines()"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        sio = StringIO(self.TEXT)
+        self.assertEqual(list(bz2f.xreadlines()), sio.readlines())
+        bz2f.close()
 
-	def testUniversalNewlinesLF(self):
-		# "Test BZ2File.read() with universal newlines (\\n)"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename, "rU")
-		self.assertEqual(bz2f.read(), self.TEXT)
-		self.assertEqual(bz2f.newlines, "\n")
-		bz2f.close()
+    def testUniversalNewlinesLF(self):
+        # "Test BZ2File.read() with universal newlines (\\n)"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename, "rU")
+        self.assertEqual(bz2f.read(), self.TEXT)
+        self.assertEqual(bz2f.newlines, "\n")
+        bz2f.close()
 
-	def testUniversalNewlinesCRLF(self):
-		# "Test BZ2File.read() with universal newlines (\\r\\n)"
-		self.createTempFile(crlf=1)
-		bz2f = BZ2File(self.filename, "rU")
-		self.assertEqual(bz2f.read(), self.TEXT)
-		self.assertEqual(bz2f.newlines, "\r\n")
-		bz2f.close()
+    def testUniversalNewlinesCRLF(self):
+        # "Test BZ2File.read() with universal newlines (\\r\\n)"
+        self.createTempFile(crlf=1)
+        bz2f = BZ2File(self.filename, "rU")
+        self.assertEqual(bz2f.read(), self.TEXT)
+        self.assertEqual(bz2f.newlines, "\r\n")
+        bz2f.close()
 
-	def testWrite(self):
-		# "Test BZ2File.write()"
-		bz2f = BZ2File(self.filename, "w")
-		bz2f.write(self.TEXT)
-		bz2f.close()
-		f = open(self.filename)
-		self.assertEqual(self.decompress(f.read()), self.TEXT)
-		f.close()
+    def testWrite(self):
+        # "Test BZ2File.write()"
+        bz2f = BZ2File(self.filename, "w")
+        bz2f.write(self.TEXT)
+        bz2f.close()
+        f = open(self.filename)
+        self.assertEqual(self.decompress(f.read()), self.TEXT)
+        f.close()
 
-	def testWriteChunks10(self):
-		# "Test BZ2File.write() with chunks of 10 bytes"
-		bz2f = BZ2File(self.filename, "w")
-		n = 0
-		while 1:
-			str = self.TEXT[n*10:(n+1)*10]
-			if not str:
-				break
-			bz2f.write(str)
-			n += 1
-		bz2f.close()
-		f = open(self.filename)
-		self.assertEqual(self.decompress(f.read()), self.TEXT)
-		f.close()
+    def testWriteChunks10(self):
+        # "Test BZ2File.write() with chunks of 10 bytes"
+        bz2f = BZ2File(self.filename, "w")
+        n = 0
+        while 1:
+            str = self.TEXT[n*10:(n+1)*10]
+            if not str:
+                break
+            bz2f.write(str)
+            n += 1
+        bz2f.close()
+        f = open(self.filename)
+        self.assertEqual(self.decompress(f.read()), self.TEXT)
+        f.close()
 
-	def testWriteLines(self):
-		# "Test BZ2File.writelines()"
-		bz2f = BZ2File(self.filename, "w")
-		sio = StringIO(self.TEXT)
-		bz2f.writelines(sio.readlines())
-		bz2f.close()
-		f = open(self.filename)
-		self.assertEqual(self.decompress(f.read()), self.TEXT)
-		f.close()
+    def testWriteLines(self):
+        # "Test BZ2File.writelines()"
+        bz2f = BZ2File(self.filename, "w")
+        sio = StringIO(self.TEXT)
+        bz2f.writelines(sio.readlines())
+        bz2f.close()
+        f = open(self.filename)
+        self.assertEqual(self.decompress(f.read()), self.TEXT)
+        f.close()
 
-	def testSeekForward(self):
-		# "Test BZ2File.seek(150, 0)"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		bz2f.seek(150)
-		self.assertEqual(bz2f.read(), self.TEXT[150:])
+    def testSeekForward(self):
+        # "Test BZ2File.seek(150, 0)"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        bz2f.seek(150)
+        self.assertEqual(bz2f.read(), self.TEXT[150:])
 
-	def testSeekBackwards(self):
-		# "Test BZ2File.seek(-150, 1)"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		bz2f.read(500)
-		bz2f.seek(-150, 1)
-		self.assertEqual(bz2f.read(), self.TEXT[500-150:])
+    def testSeekBackwards(self):
+        # "Test BZ2File.seek(-150, 1)"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        bz2f.read(500)
+        bz2f.seek(-150, 1)
+        self.assertEqual(bz2f.read(), self.TEXT[500-150:])
 
-	def testSeekBackwardsFromEnd(self):
-		# "Test BZ2File.seek(-150, 2)"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		bz2f.seek(-150, 2)
-		self.assertEqual(bz2f.read(), self.TEXT[len(self.TEXT)-150:])
+    def testSeekBackwardsFromEnd(self):
+        # "Test BZ2File.seek(-150, 2)"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        bz2f.seek(-150, 2)
+        self.assertEqual(bz2f.read(), self.TEXT[len(self.TEXT)-150:])
 
-	def testSeekPostEnd(self):
-		# "Test BZ2File.seek(150000)"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		bz2f.seek(150000)
-		self.assertEqual(bz2f.tell(), len(self.TEXT))
-		self.assertEqual(bz2f.read(), "")
+    def testSeekPostEnd(self):
+        # "Test BZ2File.seek(150000)"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        bz2f.seek(150000)
+        self.assertEqual(bz2f.tell(), len(self.TEXT))
+        self.assertEqual(bz2f.read(), "")
 
-	def testSeekPostEndTwice(self):
-		# "Test BZ2File.seek(150000) twice"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		bz2f.seek(150000)
-		bz2f.seek(150000)
-		self.assertEqual(bz2f.tell(), len(self.TEXT))
-		self.assertEqual(bz2f.read(), "")
+    def testSeekPostEndTwice(self):
+        # "Test BZ2File.seek(150000) twice"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        bz2f.seek(150000)
+        bz2f.seek(150000)
+        self.assertEqual(bz2f.tell(), len(self.TEXT))
+        self.assertEqual(bz2f.read(), "")
 
-	def testSeekPreStart(self):
-		# "Test BZ2File.seek(-150, 0)"
-		self.createTempFile()
-		bz2f = BZ2File(self.filename)
-		bz2f.seek(-150)
-		self.assertEqual(bz2f.tell(), 0)
-		self.assertEqual(bz2f.read(), self.TEXT)
+    def testSeekPreStart(self):
+        # "Test BZ2File.seek(-150, 0)"
+        self.createTempFile()
+        bz2f = BZ2File(self.filename)
+        bz2f.seek(-150)
+        self.assertEqual(bz2f.tell(), 0)
+        self.assertEqual(bz2f.read(), self.TEXT)
 
 class BZ2CompressorTest(BaseTest):
-	def testCompress(self):
-		# "Test BZ2Compressor.compress()/flush()"
-		bz2c = BZ2Compressor()
-		data = bz2c.compress(self.TEXT)
-		data += bz2c.flush()
-		self.assertEqual(self.decompress(data), self.TEXT)
+    def testCompress(self):
+        # "Test BZ2Compressor.compress()/flush()"
+        bz2c = BZ2Compressor()
+        data = bz2c.compress(self.TEXT)
+        data += bz2c.flush()
+        self.assertEqual(self.decompress(data), self.TEXT)
 
-	def testCompressChunks10(self):
-		# "Test BZ2Compressor.compress()/flush() with chunks of 10 bytes"
-		bz2c = BZ2Compressor()
-		n = 0
-		data = ''
-		while 1:
-			str = self.TEXT[n*10:(n+1)*10]
-			if not str:
-				break
-			data += bz2c.compress(str)
-			n += 1
-		data += bz2c.flush()
-		self.assertEqual(self.decompress(data), self.TEXT)
+    def testCompressChunks10(self):
+        # "Test BZ2Compressor.compress()/flush() with chunks of 10 bytes"
+        bz2c = BZ2Compressor()
+        n = 0
+        data = ''
+        while 1:
+            str = self.TEXT[n*10:(n+1)*10]
+            if not str:
+                break
+            data += bz2c.compress(str)
+            n += 1
+        data += bz2c.flush()
+        self.assertEqual(self.decompress(data), self.TEXT)
 
 class BZ2DecompressorTest(BaseTest):
-	def testDecompress(self):
-		# "Test BZ2Decompressor.decompress()"
-		bz2d = BZ2Decompressor()
-		text = bz2d.decompress(self.DATA)
-		self.assertEqual(text, self.TEXT)
+    def testDecompress(self):
+        # "Test BZ2Decompressor.decompress()"
+        bz2d = BZ2Decompressor()
+        text = bz2d.decompress(self.DATA)
+        self.assertEqual(text, self.TEXT)
 
-	def testDecompressChunks10(self):
-		# "Test BZ2Decompressor.decompress() with chunks of 10 bytes"
-		bz2d = BZ2Decompressor()
-		text = ''
-		n = 0
-		while 1:
-			str = self.DATA[n*10:(n+1)*10]
-			if not str:
-				break
-			text += bz2d.decompress(str)
-			n += 1
-		self.assertEqual(text, self.TEXT)
+    def testDecompressChunks10(self):
+        # "Test BZ2Decompressor.decompress() with chunks of 10 bytes"
+        bz2d = BZ2Decompressor()
+        text = ''
+        n = 0
+        while 1:
+            str = self.DATA[n*10:(n+1)*10]
+            if not str:
+                break
+            text += bz2d.decompress(str)
+            n += 1
+        self.assertEqual(text, self.TEXT)
 
-	def testDecompressUnusedData(self):
-		# "Test BZ2Decompressor.decompress() with unused data"
-		bz2d = BZ2Decompressor()
-		unused_data = "this is unused data"
-		text = bz2d.decompress(self.DATA+unused_data)
-		self.assertEqual(text, self.TEXT)
-		self.assertEqual(bz2d.unused_data, unused_data)
+    def testDecompressUnusedData(self):
+        # "Test BZ2Decompressor.decompress() with unused data"
+        bz2d = BZ2Decompressor()
+        unused_data = "this is unused data"
+        text = bz2d.decompress(self.DATA+unused_data)
+        self.assertEqual(text, self.TEXT)
+        self.assertEqual(bz2d.unused_data, unused_data)
 
-	def testEOFError(self):
-		# "Calling BZ2Decompressor.decompress() after EOS must raise EOFError"
-		bz2d = BZ2Decompressor()
-		text = bz2d.decompress(self.DATA)
-		self.assertRaises(EOFError, bz2d.decompress, "anything")
+    def testEOFError(self):
+        # "Calling BZ2Decompressor.decompress() after EOS must raise EOFError"
+        bz2d = BZ2Decompressor()
+        text = bz2d.decompress(self.DATA)
+        self.assertRaises(EOFError, bz2d.decompress, "anything")
 
 
 class FuncTest(BaseTest):
-	"Test module functions"
+    "Test module functions"
 
-	def testCompress(self):
-		# "Test compress() function"
-		data = compress(self.TEXT)
-		self.assertEqual(self.decompress(data), self.TEXT)
+    def testCompress(self):
+        # "Test compress() function"
+        data = compress(self.TEXT)
+        self.assertEqual(self.decompress(data), self.TEXT)
 
-	def testDecompress(self):
-		# "Test decompress() function"
-		text = decompress(self.DATA)
-		self.assertEqual(text, self.TEXT)
+    def testDecompress(self):
+        # "Test decompress() function"
+        text = decompress(self.DATA)
+        self.assertEqual(text, self.TEXT)
 
-	def testDecompressEmpty(self):
-		# "Test decompress() function with empty string"
-		text = decompress("")
-		self.assertEqual(text, "")
+    def testDecompressEmpty(self):
+        # "Test decompress() function with empty string"
+        text = decompress("")
+        self.assertEqual(text, "")
 
-	def testDecompressIncomplete(self):
-		# "Test decompress() function with incomplete data"
-		self.assertRaises(ValueError, decompress, self.DATA[:-10])
+    def testDecompressIncomplete(self):
+        # "Test decompress() function with incomplete data"
+        self.assertRaises(ValueError, decompress, self.DATA[:-10])
 
 def test_main():
     test_support.run_unittest(BZ2FileTest)
diff --git a/Lib/test/test_codeccallbacks.py b/Lib/test/test_codeccallbacks.py
index 8ae3b11..af6a5c0 100644
--- a/Lib/test/test_codeccallbacks.py
+++ b/Lib/test/test_codeccallbacks.py
@@ -213,10 +213,10 @@
         for uni in [ s*l for s in (u"x", u"\u3042", u"a\xe4") ]:
             for enc in ("ascii", "latin-1", "iso-8859-1", "iso-8859-15", "utf-8", "utf-7", "utf-16"):
                 for err in errors:
-                   try:
-                       uni.encode(enc, err)
-                   except UnicodeError:
-                       pass
+                    try:
+                        uni.encode(enc, err)
+                    except UnicodeError:
+                        pass
 
     def check_exceptionobjectargs(self, exctype, args, msg):
         # Test UnicodeError subclasses: construction, attribute assignment and __str__ conversion
@@ -229,7 +229,7 @@
         for i in xrange(len(args)):
             for wrongarg in wrongargs:
                 if type(wrongarg) is type(args[i]):
-                   continue
+                    continue
                 # build argument array
                 callargs = []
                 for j in xrange(len(args)):
diff --git a/Lib/test/test_pep277.py b/Lib/test/test_pep277.py
index 9c4aa05..7173b89 100644
--- a/Lib/test/test_pep277.py
+++ b/Lib/test/test_pep277.py
@@ -52,10 +52,10 @@
                              % (fn.__name__, filename))
         except expected_exception, details:
             if check_fn_in_exception and details.filename != filename:
-                    raise TestFailed("Function '%s(%r) failed with "
-                                     "bad filename in the exception: %r"
-                                     % (fn.__name__, filename,
-                                        details.filename))
+                raise TestFailed("Function '%s(%r) failed with "
+                                 "bad filename in the exception: %r"
+                                 % (fn.__name__, filename,
+                                    details.filename))
 
     def test_failures(self):
         # Pass non-existing Unicode filenames all over the place.
diff --git a/Lib/test/test_sets.py b/Lib/test/test_sets.py
index 76b56b1..4521335 100644
--- a/Lib/test/test_sets.py
+++ b/Lib/test/test_sets.py
@@ -446,10 +446,10 @@
 #------------------------------------------------------------------------------
 
 class TestSubsetPartial(TestSubsets):
-   left  = Set([1])
-   right = Set([1, 2])
-   name  = "one a non-empty proper subset of other"
-   cases = "!=", "<", "<="
+    left  = Set([1])
+    right = Set([1, 2])
+    name  = "one a non-empty proper subset of other"
+    cases = "!=", "<", "<="
 
 #------------------------------------------------------------------------------
 
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index 8aab9de..2e4c93a 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -109,7 +109,7 @@
         TESTFN = TMP_TESTFN
         del TMP_TESTFN
     except IOError:
-        print ('WARNING: tests will fail, unable to write to: %s or %s' % 
+        print ('WARNING: tests will fail, unable to write to: %s or %s' %
                 (TESTFN, TMP_TESTFN))
 if fp is not None:
     fp.close()
diff --git a/Lib/test/test_trace.py b/Lib/test/test_trace.py
index d5fb0e5..faee713 100644
--- a/Lib/test/test_trace.py
+++ b/Lib/test/test_trace.py
@@ -107,7 +107,7 @@
     sys._getframe().f_back.f_trace = tracefunc
 def settrace_and_return(tracefunc):
     _settrace_and_return(tracefunc)
-    
+
 settrace_and_return.events = [(1, 'return')]
 
 def _settrace_and_raise(tracefunc):
@@ -119,7 +119,7 @@
         _settrace_and_raise(tracefunc)
     except RuntimeError, exc:
         pass
-    
+
 settrace_and_raise.events = [(2, 'exception'),
                              (3, 'line'),
                              (4, 'line'),
@@ -134,14 +134,14 @@
 
 class TraceTestCase(unittest.TestCase):
     def compare_events(self, line_offset, events, expected_events):
-        events = [(l - line_offset, e) for (l, e) in events]        
+        events = [(l - line_offset, e) for (l, e) in events]
         if events != expected_events:
             self.fail(
                 "events did not match expectation:\n" +
                 "\n".join(difflib.ndiff(map(str, expected_events),
                                         map(str, events))))
-        
-    
+
+
     def run_test(self, func):
         tracer = Tracer()
         sys.settrace(tracer.trace)
@@ -156,7 +156,7 @@
         sys.settrace(None)
         self.compare_events(func.func_code.co_firstlineno,
                             tracer.events, func.events)
-    
+
     def test_1_basic(self):
         self.run_test(basic)
     def test_2_arigo(self):
@@ -185,7 +185,7 @@
             raise ValueError # just something that isn't RuntimeError
         else:
             return self.trace
-    
+
     def f(self):
         """The function to trace; raises an exception if that's the case
         we're testing, so that the 'exception' trace event fires."""
@@ -194,7 +194,7 @@
             y = 1/x
         else:
             return 1
-    
+
     def run_test_for_event(self, event):
         """Tests that an exception raised in response to the given event is
         handled OK."""
@@ -210,7 +210,7 @@
                     self.fail("exception not thrown!")
         except RuntimeError:
             self.fail("recursion counter not reset")
-    
+
     # Test the handling of exceptions raised by each kind of trace event.
     def test_call(self):
         self.run_test_for_event('call')
