diff --git a/Lib/cgi.py b/Lib/cgi.py
index a3c0ea6..55ed3d1 100755
--- a/Lib/cgi.py
+++ b/Lib/cgi.py
@@ -247,9 +247,9 @@
     if pdict.has_key('boundary'):
         boundary = pdict['boundary']
     if not valid_boundary(boundary):
-        raise ValueError,  ('Invalid boundary in multipart form: %s' 
+        raise ValueError,  ('Invalid boundary in multipart form: %s'
                             % `ib`)
-    
+
     nextpart = "--" + boundary
     lastpart = "--" + boundary + "--"
     partdict = {}
@@ -600,7 +600,7 @@
         """Internal: read a part that is itself multipart."""
         ib = self.innerboundary
         if not valid_boundary(ib):
-            raise ValueError, ('Invalid boundary in multipart form: %s' 
+            raise ValueError, ('Invalid boundary in multipart form: %s'
                                % `ib`)
         self.list = []
         klass = self.FieldStorageClass or self.__class__
diff --git a/Lib/cmd.py b/Lib/cmd.py
index 423494a..2a7be43 100644
--- a/Lib/cmd.py
+++ b/Lib/cmd.py
@@ -20,14 +20,14 @@
    arguments text, line, begidx, endidx.  text is string we are matching
    against, all returned matches must begin with it.  line is the current
    input line (lstripped), begidx and endidx are the beginning and end
-   indexes of the text being matched, which could be used to provide 
+   indexes of the text being matched, which could be used to provide
    different completion depending upon which position the argument is in.
 
 The `default' method may be overridden to intercept commands for which there
 is no do_ method.
 
 The `completedefault' method may be overridden to intercept completions for
-commands that have no complete_ method. 
+commands that have no complete_ method.
 
 The data member `self.ruler' sets the character used to draw separator lines
 in the help messages.  If empty, no ruler line is drawn.  It defaults to "=".
@@ -66,7 +66,7 @@
     nohelp = "*** No help on %s"
     use_rawinput = 1
 
-    def __init__(self, completekey='tab'): 
+    def __init__(self, completekey='tab'):
         if completekey:
             try:
                 import readline
@@ -131,7 +131,7 @@
         while i < n and line[i] in self.identchars: i = i+1
         cmd, arg = line[:i], line[i:].strip()
         return cmd, arg, line
-    
+
     def onecmd(self, line):
         cmd, arg, line = self.parseline(line)
         if not line:
@@ -191,7 +191,7 @@
             return self.completion_matches[state]
         except IndexError:
             return None
-    
+
     def get_names(self):
         # Inheritance says we have to look in class and
         # base classes; order is not important.
diff --git a/Lib/gzip.py b/Lib/gzip.py
index 9df8e5d..1985044 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -277,7 +277,7 @@
 
     def rewind(self):
         '''Return the uncompressed stream file position indicator to the
-        beginning of the file''' 
+        beginning of the file'''
         if self.mode != READ:
             raise IOError("Can't rewind in write mode")
         self.fileobj.seek(0)
@@ -291,7 +291,7 @@
             if offset < self.offset:
                 raise IOError('Negative seek in write mode')
             count = offset - self.offset
-            for i in range(count/1024): 
+            for i in range(count/1024):
                 f.write(1024*'\0')
             self.write((count%1024)*'\0')
         elif self.mode == READ:
diff --git a/Lib/test/test___all__.py b/Lib/test/test___all__.py
index 5508670..3ed22f9 100644
--- a/Lib/test/test___all__.py
+++ b/Lib/test/test___all__.py
@@ -41,7 +41,7 @@
 # In case _socket fails to build, make this test fail more gracefully
 # than an AttributeError somewhere deep in CGIHTTPServer.
 import _socket
-    
+
 check_all("BaseHTTPServer")
 check_all("CGIHTTPServer")
 check_all("ConfigParser")
diff --git a/Lib/test/test_codeop.py b/Lib/test/test_codeop.py
index be9ca7b..7847fb3 100644
--- a/Lib/test/test_codeop.py
+++ b/Lib/test/test_codeop.py
@@ -13,7 +13,7 @@
         '''succeed iff str is a valid piece of code'''
         expected = compile(str, "<input>", symbol)
         self.assertEquals( compile_command(str, "<input>", symbol), expected)
-                           
+
 
     def assertIncomplete(self, str, symbol='single'):
         '''succeed iff str is the start of a valid piece of code'''
@@ -41,13 +41,13 @@
         av("a=3\n\n")
 
         # special case
-        self.assertEquals(compile_command(""), 
+        self.assertEquals(compile_command(""),
                           compile("pass", "<input>", 'single'))
 
         av("3**3","eval")
         av("(lambda z: \n z**3)","eval")
         av("#a\n#b\na**3","eval")
-        
+
     def test_incomplete(self):
         ai = self.assertIncomplete
         ai("(a **")
@@ -59,7 +59,7 @@
         ai("if 9==3:\n   pass\nelse:\n   pass")
         ai("a = (")
         ai("a = 9+ \\")
-        
+
         ai("(","eval")
         ai("(\n\n\n","eval")
         ai("(9+","eval")
diff --git a/Lib/test/test_glob.py b/Lib/test/test_glob.py
index 5afee31..804ae1d 100644
--- a/Lib/test/test_glob.py
+++ b/Lib/test/test_glob.py
@@ -107,4 +107,3 @@
                                                    os.path.join('aab', 'F')]))
 
 run_unittest(GlobTests)
-
diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py
index 6d69c3f..a5660a9 100644
--- a/Lib/test/test_gzip.py
+++ b/Lib/test/test_gzip.py
@@ -71,7 +71,7 @@
 # Try seek, write test
 f = gzip.GzipFile(filename, 'w')
 for pos in range(0, 256, 16):
-    f.seek(pos) 
+    f.seek(pos)
     f.write('GZ\n')
 f.close()
 
diff --git a/Lib/test/test_mhlib.py b/Lib/test/test_mhlib.py
index b4d99fe..f59bf83 100644
--- a/Lib/test/test_mhlib.py
+++ b/Lib/test/test_mhlib.py
@@ -43,7 +43,7 @@
 
 def writeContext(folder):
     folder = normF(folder)
-    writeFile(os.path.join(_mhpath, "context"), 
+    writeFile(os.path.join(_mhpath, "context"),
               "Current-Folder: %s\n" % folder)
 
 def writeCurMessage(folder, cur):
@@ -96,31 +96,31 @@
     def setUp(self):
         deltree(_mhroot)
         mkdirs(_mhpath)
-        writeProfile({'Path' : os.path.abspath(_mhpath), 
+        writeProfile({'Path' : os.path.abspath(_mhpath),
                       'Editor': 'emacs',
                       'ignored-attribute': 'camping holiday'})
         # Note: These headers aren't really conformant to RFC822, but
         #  mhlib shouldn't care about that.
 
         # An inbox with a couple of messages.
-        writeMessage('inbox', 1, 
+        writeMessage('inbox', 1,
                      {'From': 'Mrs. Premise',
                       'To': 'Mrs. Conclusion',
                       'Date': '18 July 2001'}, "Hullo, Mrs. Conclusion!\n")
-        writeMessage('inbox', 2, 
+        writeMessage('inbox', 2,
                      {'From': 'Mrs. Conclusion',
                       'To': 'Mrs. Premise',
                       'Date': '29 July 2001'}, "Hullo, Mrs. Premise!\n")
-        
+
         # A folder with many messages
         for i in range(5, 101)+range(101, 201, 2):
-            writeMessage('wide', i, 
+            writeMessage('wide', i,
                          {'From': 'nowhere', 'Subject': 'message #%s' % i},
                          "This is message number %s\n" % i)
-        
+
         # A deeply nested folder
         def deep(folder, n):
-            writeMessage(folder, n, 
+            writeMessage(folder, n,
                          {'Subject': 'Message %s/%s' % (folder, n) },
                          "This is message number %s in %s\n" % (n, folder) )
         deep('deep/f1', 1)
@@ -131,10 +131,10 @@
         deep('deep', 3)
         deep('deep/f2/f3', 1)
         deep('deep/f2/f3', 2)
-        
+
     def tearDown(self):
         deltree(_mhroot)
-    
+
     def test_basic(self):
         writeContext('inbox')
         writeCurMessage('inbox', 2)
@@ -154,13 +154,13 @@
         mh.setcontext('inbox')
 
         inbox = mh.openfolder('inbox')
-        eq(inbox.getfullname(), 
+        eq(inbox.getfullname(),
            os.path.join(os.path.abspath(_mhpath), 'inbox'))
-        eq(inbox.getsequencesfilename(), 
+        eq(inbox.getsequencesfilename(),
            os.path.join(os.path.abspath(_mhpath), 'inbox', '.mh_sequences'))
-        eq(inbox.getmessagefilename(1), 
+        eq(inbox.getmessagefilename(1),
            os.path.join(os.path.abspath(_mhpath), 'inbox', '1'))
-        
+
     def test_listfolders(self):
         mh = getMH()
         eq = self.assertEquals
@@ -168,7 +168,7 @@
         folders = mh.listfolders()
         folders.sort()
         eq(folders, ['deep', 'inbox', 'wide'])
-        
+
         folders = mh.listallfolders()
         folders.sort()
         eq(folders, map(normF, ['deep', 'deep/f1', 'deep/f2', 'deep/f2/f3',
@@ -177,7 +177,7 @@
         folders = mh.listsubfolders('deep')
         folders.sort()
         eq(folders, map(normF, ['deep/f1', 'deep/f2']))
-        
+
         folders = mh.listallsubfolders('deep')
         folders.sort()
         eq(folders, map(normF, ['deep/f1', 'deep/f2', 'deep/f2/f3']))
@@ -190,22 +190,22 @@
         mh = getMH()
         eq = self.assertEquals
         writeCurMessage('wide', 55)
-        
+
         f = mh.openfolder('wide')
         all = f.listmessages()
         eq(all, range(5, 101)+range(101, 201, 2))
         eq(f.getcurrent(), 55)
         f.setcurrent(99)
-        eq(readFile(os.path.join(_mhpath, 'wide', '.mh_sequences')), 
+        eq(readFile(os.path.join(_mhpath, 'wide', '.mh_sequences')),
            'cur: 99\n')
 
         def seqeq(seq, val):
             eq(f.parsesequence(seq), val)
-        
+
         seqeq('5-55', range(5, 56))
         seqeq('90-108', range(90, 101)+range(101, 109, 2))
         seqeq('90-108', range(90, 101)+range(101, 109, 2))
-        
+
         seqeq('10:10', range(10, 20))
         seqeq('10:+10', range(10, 20))
         seqeq('101:10', range(101, 121, 2))
@@ -249,7 +249,7 @@
         self.assert_("dummy1" in mh.listfolders())
         path = os.path.join(_mhpath, "dummy1")
         self.assert_(os.path.exists(path))
-        
+
         f = mh.openfolder('dummy1')
         def create(n):
             msg = "From: foo\nSubject: %s\n\nDummy Message %s\n" % (n,n)
@@ -258,14 +258,14 @@
         create(7)
         create(8)
         create(9)
-        
+
         eq(readFile(f.getmessagefilename(9)),
            "From: foo\nSubject: 9\n\nDummy Message 9\n")
 
         eq(f.listmessages(), [7, 8, 9])
         files = os.listdir(path)
         files.sort()
-        eq(files, ['7', '8', '9']) 
+        eq(files, ['7', '8', '9'])
 
         f.removemessages(['7', '8'])
         files = os.listdir(path)
@@ -275,7 +275,7 @@
         create(10)
         create(11)
         create(12)
-        
+
         mh.makefolder("dummy2")
         f2 = mh.openfolder("dummy2")
         eq(f2.listmessages(), [])
@@ -285,12 +285,12 @@
         eq(f2.listmessages(), [3, 5])
         eq(readFile(f2.getmessagefilename(3)),
            "From: foo\nSubject: 10\n\nDummy Message 10\n")
-        
+
         f.copymessage(9, f2, 4)
         eq(f.listmessages(), [9, 12])
         eq(readFile(f2.getmessagefilename(4)),
            "From: foo\nSubject: 9\n\nDummy Message 9\n")
-        
+
         f.refilemessages([9, 12], f2)
         eq(f.listmessages(), [])
         eq(f2.listmessages(), [3, 4, 5, 6, 7])
@@ -306,7 +306,7 @@
     def test_read(self):
         mh = getMH()
         eq = self.assertEquals
-        
+
         f = mh.openfolder('inbox')
         msg = f.openmessage(1)
         # Check some basic stuff from rfc822
@@ -316,15 +316,15 @@
         # Okay, we have the right message.  Let's check the stuff from
         # mhlib.
         lines = sortLines(msg.getheadertext())
-        eq(lines, ["Date: 18 July 2001", 
+        eq(lines, ["Date: 18 July 2001",
                    "From: Mrs. Premise",
                    "To: Mrs. Conclusion"])
         lines = sortLines(msg.getheadertext(lambda h: len(h)==4))
-        eq(lines, ["Date: 18 July 2001", 
+        eq(lines, ["Date: 18 July 2001",
                    "From: Mrs. Premise"])
         eq(msg.getbodytext(), "Hullo, Mrs. Conclusion!\n\n")
         eq(msg.getbodytext(0), "Hullo, Mrs. Conclusion!\n\n")
-        
+
         # XXXX there should be a better way to reclaim the file handle
         msg.fp.close()
         del msg
diff --git a/Lib/test/test_pkgimport.py b/Lib/test/test_pkgimport.py
index bff4044..2f19509 100644
--- a/Lib/test/test_pkgimport.py
+++ b/Lib/test/test_pkgimport.py
@@ -43,7 +43,7 @@
         f = open(self.module_path, 'w')
         f.write(contents)
         f.close()
-    
+
     def test_package_import__semantics(self):
 
         # Generate a couple of broken modules to try importing.
diff --git a/Lib/test/test_repr.py b/Lib/test/test_repr.py
index 9034711..cf423f9 100644
--- a/Lib/test/test_repr.py
+++ b/Lib/test/test_repr.py
@@ -5,7 +5,7 @@
 
 import unittest
 from test_support import run_unittest
-from repr import repr as r # Don't shadow builtin repr 
+from repr import repr as r # Don't shadow builtin repr
 
 
 def nestedTuple(nesting):
@@ -24,7 +24,7 @@
         s = "a"*30+"b"*30
         expected = `s`[:13] + "..." + `s`[-14:]
         eq(r(s), expected)
-        
+
         eq(r("\"'"), repr("\"'"))
         s = "\""*30+"'"*100
         expected = `s`[:13] + "..." + `s`[-14:]
@@ -67,7 +67,7 @@
         eq = self.assertEquals
         i1 = ClassWithRepr("a")
         eq(r(i1), repr(i1))
-        
+
         i2 = ClassWithRepr("x"*1000)
         expected = `i2`[:13] + "..." + `i2`[-14:]
         eq(r(i2), expected)
diff --git a/Lib/urllib.py b/Lib/urllib.py
index 2b521b8..82b5fb9 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -1353,9 +1353,9 @@
         # print proxyOverride
         # now check if we match one of the registry values.
         for test in proxyOverride:
-            test = test.replace(".", r"\.")	# mask dots
-            test = test.replace("*", r".*")	# change glob sequence
-            test = test.replace("?", r".")	# change glob char
+            test = test.replace(".", r"\.")     # mask dots
+            test = test.replace("*", r".*")     # change glob sequence
+            test = test.replace("?", r".")      # change glob char
             for val in host:
                 # print "%s <--> %s" %( test, val )
                 if re.match(test, val, re.I):
diff --git a/Lib/urllib2.py b/Lib/urllib2.py
index 063e53d..8481bbd 100644
--- a/Lib/urllib2.py
+++ b/Lib/urllib2.py
@@ -452,7 +452,7 @@
         new.error_302_dict[newurl] = newurl
 
         # Don't close the fp until we are sure that we won't use it
-        # with HTTPError.  
+        # with HTTPError.
         fp.read()
         fp.close()
 
