diff --git a/Lib/BaseHTTPServer.py b/Lib/BaseHTTPServer.py
index 35baf2f..ab34e8f 100644
--- a/Lib/BaseHTTPServer.py
+++ b/Lib/BaseHTTPServer.py
@@ -32,7 +32,7 @@
 # Network Working Group                                      R. Fielding
 # Request for Comments: 2616                                       et al
 # Obsoletes: 2068                                              June 1999
-# Category: Standards Track                                   
+# Category: Standards Track
 #
 # URL: http://www.faqs.org/rfcs/rfc2616.html
 
diff --git a/Lib/asynchat.py b/Lib/asynchat.py
index 762070f..e1c97949b 100644
--- a/Lib/asynchat.py
+++ b/Lib/asynchat.py
@@ -66,10 +66,10 @@
 
     def collect_incoming_data(self, data):
         raise NotImplementedError, "must be implemented in subclass"
-        
+
     def found_terminator(self):
         raise NotImplementedError, "must be implemented in subclass"
-        
+
     def set_terminator (self, term):
         "Set the input delimiter.  Can be a fixed string of any length, an integer, or None"
         self.terminator = term
@@ -291,7 +291,7 @@
 # regex:     14035/s
 
 def find_prefix_at_end (haystack, needle):
-	l = len(needle) - 1
-	while l and not haystack.endswith(needle[:l]):
-		l -= 1
-	return l
+    l = len(needle) - 1
+    while l and not haystack.endswith(needle[:l]):
+        l -= 1
+    return l
diff --git a/Lib/fileinput.py b/Lib/fileinput.py
index 77487ed..2f17dc8 100644
--- a/Lib/fileinput.py
+++ b/Lib/fileinput.py
@@ -183,7 +183,7 @@
         if not line:
             raise StopIteration
         return line
-        
+
     def __getitem__(self, i):
         if i != self._lineno:
             raise RuntimeError, "accessing lines out of order"
diff --git a/Lib/gzip.py b/Lib/gzip.py
index 793a3b5..b2bbeda 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -136,7 +136,7 @@
         if self.mode != WRITE:
             import errno
             raise IOError(errno.EBADF, "write() on read-only GzipFile object")
-        
+
         if self.fileobj is None:
             raise ValueError, "write() on closed GzipFile object"
         if len(data) > 0:
@@ -149,7 +149,7 @@
         if self.mode != READ:
             import errno
             raise IOError(errno.EBADF, "write() on read-only GzipFile object")
-            
+
         if self.extrasize <= 0 and self.fileobj is None:
             return ''
 
diff --git a/Lib/imaplib.py b/Lib/imaplib.py
index 266acb6..ef93f73 100644
--- a/Lib/imaplib.py
+++ b/Lib/imaplib.py
@@ -1012,7 +1012,7 @@
         """
         self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
         self.sock.connect((self.host, self.port))
-        self.sslobj = socket.ssl(self.sock,self.keyfile, self.certfile) 
+        self.sslobj = socket.ssl(self.sock,self.keyfile, self.certfile)
 
 
     def read(self, size):
diff --git a/Lib/os2emxpath.py b/Lib/os2emxpath.py
index 451fb0e..55f599c 100644
--- a/Lib/os2emxpath.py
+++ b/Lib/os2emxpath.py
@@ -1,5 +1,5 @@
 # Module 'os2emxpath' -- common operations on OS/2 pathnames
-"""Common pathname manipulations, OS/2 EMX version. 
+"""Common pathname manipulations, OS/2 EMX version.
 
 Instead of importing this module directly, import os and refer to this
 module as os.path.
diff --git a/Lib/pre.py b/Lib/pre.py
index 817f8de..504c7c6 100644
--- a/Lib/pre.py
+++ b/Lib/pre.py
@@ -92,7 +92,7 @@
 import warnings as _warnings
 _warnings.warn("Please use the 're' module, not the 'pre' module",
                DeprecationWarning)
-			     
+
 __all__ = ["match","search","sub","subn","split","findall","escape","compile",
            "I","L","M","S","X","IGNORECASE","LOCALE","MULTILINE","DOTALL",
            "VERBOSE","error"]
diff --git a/Lib/re.py b/Lib/re.py
index 4fef1dc..a786593 100644
--- a/Lib/re.py
+++ b/Lib/re.py
@@ -18,4 +18,3 @@
 
 from sre import *
 from sre import __all__
-
diff --git a/Lib/rlcompleter.py b/Lib/rlcompleter.py
index 633fad0..d8208f3 100644
--- a/Lib/rlcompleter.py
+++ b/Lib/rlcompleter.py
@@ -60,7 +60,7 @@
 
         readline.set_completer(Completer(my_namespace).complete)
         """
-        
+
         if namespace and not isinstance(namespace, dict):
             raise TypeError,'namespace must be a dictionary'
 
@@ -82,7 +82,7 @@
         """
         if self.use_main_ns:
             self.namespace = __main__.__dict__
-            
+
         if state == 0:
             if "." in text:
                 self.matches = self.attr_matches(text)
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index 2836165..bb8fd75 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -227,8 +227,8 @@
         connect.  If specified, `port' specifies the port to which to connect.
         By default, smtplib.SMTP_PORT is used.  An SMTPConnectError is raised
         if the specified `host' doesn't respond correctly.  If specified,
-	`local_hostname` is used as the FQDN of the local host.  By default,
-	the local hostname is found using socket.getfqdn().
+        `local_hostname` is used as the FQDN of the local host.  By default,
+        the local hostname is found using socket.getfqdn().
 
         """
         self.esmtp_features = {}
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index e16428f..2576e8f 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -253,7 +253,7 @@
         t = time.localtime()
         s = self.dumps(t)
         u = self.loads(s)
-        self.assertEqual(t, u)        
+        self.assertEqual(t, u)
         import os
         if hasattr(os, "stat"):
             t = os.stat(os.curdir)
diff --git a/Lib/test/string_tests.py b/Lib/test/string_tests.py
index ea25983..180072c 100644
--- a/Lib/test/string_tests.py
+++ b/Lib/test/string_tests.py
@@ -239,7 +239,7 @@
     test('zfill', '', '000', 3)
     test('zfill', '34', '34', 1)
     test('zfill', '34', '0034', 4)
-    
+
     # Encoding/decoding
     codecs = [('rot13', 'uryyb jbeyq'),
               ('base64', 'aGVsbG8gd29ybGQ=\n'),
diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py
index 57e7125..6a6fecb 100644
--- a/Lib/test/test_cfgparser.py
+++ b/Lib/test/test_cfgparser.py
@@ -67,7 +67,7 @@
 foo = this line is much, much longer than my editor
         likes it.
 """)
-           
+
 def case_sensitivity():
     print "Testing case sensitivity..."
     cf = ConfigParser.ConfigParser()
diff --git a/Lib/test/test_email.py b/Lib/test/test_email.py
index efbe271..7b3f063 100644
--- a/Lib/test/test_email.py
+++ b/Lib/test/test_email.py
@@ -313,7 +313,7 @@
         msg.del_param("report-type")
         eq(msg.get_params(),
            [('multipart/report', ''),
-            ('boundary', 'D1690A7AC1.996856090/mail.example.com')]) 
+            ('boundary', 'D1690A7AC1.996856090/mail.example.com')])
         msg.set_param("report-type", old_val)
         eq(msg.get_params(),
            [('multipart/report', ''),
@@ -331,7 +331,7 @@
         msg.set_type('text/html')
         eq(msg['content-type'], 'text/html; charset="us-ascii"')
 
-           
+
 
 # Test the email.Encoders module
 class TestEncoders(unittest.TestCase):
@@ -409,7 +409,7 @@
 MIME-Version: 1.0
 Content-Transfer-Encoding: 7bit
 X-Foobar-Spoink-Defrobnit: wasnipoop; giraffes="very-long-necked-animals";
-	spooge="yummy"; hippos="gargantuan"; marshmallows="gooey"
+        spooge="yummy"; hippos="gargantuan"; marshmallows="gooey"
 
 ''')
 
@@ -450,22 +450,22 @@
         msg = Message()
         msg['Received'] = """\
 from babylon.socal-raves.org (localhost [127.0.0.1]); by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81; for <mailman-admin@babylon.socal-raves.org>; Sat, 2 Feb 2002 17:00:06 -0800 (PST)
-	from babylon.socal-raves.org (localhost [127.0.0.1]); by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81; for <mailman-admin@babylon.socal-raves.org>; Sat, 2 Feb 2002 17:00:06 -0800 (PST)
-	from babylon.socal-raves.org (localhost [127.0.0.1]); by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81; for <mailman-admin@babylon.socal-raves.org>; Sat, 2 Feb 2002 17:00:06 -0800 (PST)
+        from babylon.socal-raves.org (localhost [127.0.0.1]); by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81; for <mailman-admin@babylon.socal-raves.org>; Sat, 2 Feb 2002 17:00:06 -0800 (PST)
+        from babylon.socal-raves.org (localhost [127.0.0.1]); by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81; for <mailman-admin@babylon.socal-raves.org>; Sat, 2 Feb 2002 17:00:06 -0800 (PST)
 """
         self.assertEqual(msg.as_string(), """\
 Received: from babylon.socal-raves.org (localhost [127.0.0.1]);
-	by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81;
-	for <mailman-admin@babylon.socal-raves.org>;
-	Sat, 2 Feb 2002 17:00:06 -0800 (PST)
-	from babylon.socal-raves.org (localhost [127.0.0.1]);
-	by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81;
-	for <mailman-admin@babylon.socal-raves.org>;
-	Sat, 2 Feb 2002 17:00:06 -0800 (PST)
-	from babylon.socal-raves.org (localhost [127.0.0.1]);
-	by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81;
-	for <mailman-admin@babylon.socal-raves.org>;
-	Sat, 2 Feb 2002 17:00:06 -0800 (PST)
+        by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81;
+        for <mailman-admin@babylon.socal-raves.org>;
+        Sat, 2 Feb 2002 17:00:06 -0800 (PST)
+        from babylon.socal-raves.org (localhost [127.0.0.1]);
+        by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81;
+        for <mailman-admin@babylon.socal-raves.org>;
+        Sat, 2 Feb 2002 17:00:06 -0800 (PST)
+        from babylon.socal-raves.org (localhost [127.0.0.1]);
+        by babylon.socal-raves.org (Postfix) with ESMTP id B570E51B81;
+        for <mailman-admin@babylon.socal-raves.org>;
+        Sat, 2 Feb 2002 17:00:06 -0800 (PST)
 
 
 """)
@@ -721,7 +721,7 @@
 
 
 --BOUNDARY--
-''')        
+''')
 
     def test_one_part_in_a_multipart(self):
         outer = MIMEBase('multipart', 'mixed')
@@ -748,7 +748,7 @@
 hello world
 
 --BOUNDARY--
-''')        
+''')
 
     def test_seq_parts_in_a_multipart(self):
         outer = MIMEBase('multipart', 'mixed')
@@ -775,7 +775,7 @@
 hello world
 
 --BOUNDARY--
-''')        
+''')
 
 
 
@@ -1163,11 +1163,11 @@
         module = __import__('email')
         all = module.__all__
         all.sort()
-        self.assertEqual(all, ['Charset', 'Encoders', 'Errors', 'Generator', 
-                               'Header', 'Iterators', 'MIMEAudio', 
-                               'MIMEBase', 'MIMEImage', 'MIMEMessage', 
+        self.assertEqual(all, ['Charset', 'Encoders', 'Errors', 'Generator',
+                               'Header', 'Iterators', 'MIMEAudio',
+                               'MIMEBase', 'MIMEImage', 'MIMEMessage',
                                'MIMEText', 'Message', 'Parser',
-                               'Utils', 'base64MIME', 
+                               'Utils', 'base64MIME',
                                'message_from_file', 'message_from_string',
                                'quopriMIME'])
 
@@ -1313,7 +1313,7 @@
 From: aperson@dom.ain
 To: bperson@dom.ain
 Subject: the next line has a space on it
- 
+
 Date: Mon, 8 Apr 2002 15:09:19 -0400
 Message-ID: spam
 
@@ -1367,7 +1367,7 @@
 eHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgg\r
 eHh4eCB4eHh4IA==\r
 """)
-        
+
     def test_header_encode(self):
         eq = self.assertEqual
         he = base64MIME.header_encode
@@ -1504,7 +1504,7 @@
 one line
 
 two line""")
-        
+
 
 
 # Test the Charset class
diff --git a/Lib/test/test_longexp.py b/Lib/test/test_longexp.py
index 00ece6d..b7842f9 100644
--- a/Lib/test/test_longexp.py
+++ b/Lib/test/test_longexp.py
@@ -6,9 +6,9 @@
 REPS = 65580
 
 if sys.platform == 'mac':
-	import gestalt
-	if gestalt.gestalt('sysv') > 0x9ff:
-		raise TestSkipped, 'Triggers pathological malloc slowdown on OSX MacPython'
+    import gestalt
+    if gestalt.gestalt('sysv') > 0x9ff:
+        raise TestSkipped, 'Triggers pathological malloc slowdown on OSX MacPython'
 if sys.platform == "os2emx":
     raise TestFailed, "OS/2+EMX port has malloc problems with long expressions"
 else:
diff --git a/Lib/test/test_mpz.py b/Lib/test/test_mpz.py
index 2e57db4..804dc6b 100644
--- a/Lib/test/test_mpz.py
+++ b/Lib/test/test_mpz.py
@@ -87,4 +87,3 @@
 try: mpz.mpz(-10).binary()
 except ValueError: pass
 else: raise TestFailed, 'mpz(-10).binary() should raise a ValueError'
-
diff --git a/Lib/test/test_netrc.py b/Lib/test/test_netrc.py
index 5922fdc..2cf1ae4 100644
--- a/Lib/test/test_netrc.py
+++ b/Lib/test/test_netrc.py
@@ -12,7 +12,7 @@
 line3
 line4
 
-default login log2 password pass2 
+default login log2 password pass2
 
 """
 
@@ -25,7 +25,7 @@
         fp.write(TEST_NETRC)
         fp.close()
         self.netrc = netrc.netrc(temp_filename)
-        
+
     def tearDown (self):
         del self.netrc
         os.unlink(temp_filename)
@@ -36,8 +36,7 @@
                                            )
         self.assert_(self.netrc.hosts['foo'] == ('log1', 'acct1', 'pass1'))
         self.assert_(self.netrc.hosts['default'] == ('log2', None, 'pass2'))
-            
-        
+
+
 if __name__ == "__main__":
     test_support.run_unittest(NetrcTestCase)
-
diff --git a/Lib/test/test_robotparser.py b/Lib/test/test_robotparser.py
index a010725..beec006 100644
--- a/Lib/test/test_robotparser.py
+++ b/Lib/test/test_robotparser.py
@@ -30,14 +30,14 @@
 
 def RobotTest(index, robots_txt, good_urls, bad_urls,
               agent="test_robotparser"):
-    
-        lines = StringIO.StringIO(robots_txt).readlines()
-        parser = robotparser.RobotFileParser()
-        parser.parse(lines)
-        for url in good_urls:
-            tests.addTest(RobotTestCase(index, parser, url, 1, agent))
-        for url in bad_urls:
-            tests.addTest(RobotTestCase(index, parser, url, 0, agent))
+
+    lines = StringIO.StringIO(robots_txt).readlines()
+    parser = robotparser.RobotFileParser()
+    parser.parse(lines)
+    for url in good_urls:
+        tests.addTest(RobotTestCase(index, parser, url, 1, agent))
+    for url in bad_urls:
+        tests.addTest(RobotTestCase(index, parser, url, 0, agent))
 
 # Examples from http://www.robotstxt.org/wc/norobots.html (fetched 2002)
 
@@ -116,7 +116,7 @@
 good = ['/tmp',] # XFAIL: '/a%2fb.html'
 bad = ['/tmp/','/tmp/a.html',
        '/a%3cd.html','/a%3Cd.html',"/a/b.html",
-       '/%7Ejoe/index.html'] 
+       '/%7Ejoe/index.html']
 
 RobotTest(6, doc, good, bad)
 
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index 9d4508b..fc30e5b 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -494,7 +494,7 @@
 d[1] = 1
 try:
     for i in d:
-      d[i+1] = 1
+        d[i+1] = 1
 except RuntimeError:
     pass
 else:
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index 29dd819..c04d929 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -523,7 +523,7 @@
        u'\u90e8\u306f\u30c9\u30a4\u30c4\u8a9e\u3067\u3059\u304c'
        u'\u3001\u3042\u3068\u306f\u3067\u305f\u3089\u3081\u3067'
        u'\u3059\u3002\u5b9f\u969b\u306b\u306f\u300cWenn ist das'
-       u' Nunstuck git und'.encode('utf-8') == 
+       u' Nunstuck git und'.encode('utf-8') ==
        '\xe6\xad\xa3\xe7\xa2\xba\xe3\x81\xab\xe8\xa8\x80\xe3\x81'
        '\x86\xe3\x81\xa8\xe7\xbf\xbb\xe8\xa8\xb3\xe3\x81\xaf\xe3'
        '\x81\x95\xe3\x82\x8c\xe3\x81\xa6\xe3\x81\x84\xe3\x81\xbe'
diff --git a/Lib/test/test_univnewlines.py b/Lib/test/test_univnewlines.py
index e77797a..8d6a874 100644
--- a/Lib/test/test_univnewlines.py
+++ b/Lib/test/test_univnewlines.py
@@ -5,11 +5,11 @@
 import sys
 
 DATA_TEMPLATE=[
-    "line1=1", 
-	"line2='this is a very long line designed to go past the magic " + 
-    "hundred character limit that is inside fileobject.c and which " + 
-    "is meant to speed up the common case, but we also want to test " + 
-    "the uncommon case, naturally.'", 
+    "line1=1",
+        "line2='this is a very long line designed to go past the magic " +
+    "hundred character limit that is inside fileobject.c and which " +
+    "is meant to speed up the common case, but we also want to test " +
+    "the uncommon case, naturally.'",
     "def line3():pass"
     ]
 DATA_LF = "\n".join(DATA_TEMPLATE) + "\n"
@@ -40,13 +40,13 @@
             os.unlink(test_support.TESTFN)
         except:
             pass
-            
+
     def test_read(self):
         fp = open(test_support.TESTFN, self.READMODE)
         data = fp.read()
         self.assertEqual(data, DATA_LF)
         self.assertEqual(`fp.newlines`, `self.NEWLINE`)
-        
+
     def test_readlines(self):
         fp = open(test_support.TESTFN, self.READMODE)
         data = fp.readlines()
@@ -62,7 +62,7 @@
             d = fp.readline()
         self.assertEqual(data, DATA_SPLIT)
         self.assertEqual(`fp.newlines`, `self.NEWLINE`)
-        
+
     def test_seek(self):
         fp = open(test_support.TESTFN, self.READMODE)
         fp.readline()
@@ -72,36 +72,36 @@
         fp.seek(pos)
         data = fp.readlines()
         self.assertEqual(data, DATA_SPLIT[1:])
-        
+
     def test_execfile(self):
         dict = {}
         execfile(test_support.TESTFN, dict)
         func = dict['line3']
         self.assertEqual(func.func_code.co_firstlineno, 3)
-        
+
 
 class TestNativeNewlines(TestGenericUnivNewlines):
     NEWLINE=None
     DATA=DATA_LF
     READMODE='r'
     WRITEMODE='w'
-        
+
 class TestCRNewlines(TestGenericUnivNewlines):
     NEWLINE='\r'
     DATA=DATA_CR
-    
+
 class TestLFNewlines(TestGenericUnivNewlines):
     NEWLINE='\n'
     DATA=DATA_LF
-    
+
 class TestCRLFNewlines(TestGenericUnivNewlines):
     NEWLINE='\r\n'
     DATA=DATA_CRLF
-    
+
 class TestMixedNewlines(TestGenericUnivNewlines):
     NEWLINE=('\r', '\n')
     DATA=DATA_MIXED
-    
+
 
 def test_main():
     test_support.run_unittest(TestNativeNewlines)
diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
index dbe0283..2b3cf6c 100644
--- a/Lib/test/test_urlparse.py
+++ b/Lib/test/test_urlparse.py
@@ -123,4 +123,3 @@
 
 if __name__ == "__main__":
     test_main()
-
diff --git a/Lib/warnings.py b/Lib/warnings.py
index 7966a33..c3c9eca 100644
--- a/Lib/warnings.py
+++ b/Lib/warnings.py
@@ -13,7 +13,7 @@
     """Issue a warning, or maybe ignore it or raise an exception."""
     # Check if message is already a Warning object
     if isinstance(message, Warning):
-       category = message.__class__
+        category = message.__class__
     # Check category argument
     if category is None:
         category = UserWarning
@@ -53,11 +53,11 @@
     if registry is None:
         registry = {}
     if isinstance(message, Warning):
-       text = str(message)
-       category = message.__class__
+        text = str(message)
+        category = message.__class__
     else:
-       text = message
-       message = category(message)
+        text = message
+        message = category(message)
     key = (text, category, lineno)
     # Quick test for common case
     if registry.get(key):
