diff --git a/Lib/HTMLParser.py b/Lib/HTMLParser.py
index df8383e..f54e3d6 100644
--- a/Lib/HTMLParser.py
+++ b/Lib/HTMLParser.py
@@ -439,7 +439,7 @@
             if c == '>':
                 # all done
                 return j + 1
-                
+
     def parse_doctype_notation(self, i, declstartpos):
         name, j = self.scan_name(i, declstartpos)
         if j < 0:
diff --git a/Lib/hmac.py b/Lib/hmac.py
index 1315903..85b1d1d 100644
--- a/Lib/hmac.py
+++ b/Lib/hmac.py
@@ -9,12 +9,12 @@
     """Utility method. XOR the two strings s1 and s2 (must have same length).
     """
     return "".join(map(lambda x, y: chr(ord(x) ^ ord(y)), s1, s2))
-        
+
 class HMAC:
     """RFC2104 HMAC class.
 
     This (mostly) supports the API for Cryptographic Hash Functions (PEP 247).
-    """ 
+    """
 
     def __init__(self, key, msg = None, digestmod = None):
         """Create a new HMAC object.
@@ -80,7 +80,7 @@
 
     key: The starting key for the hash.
     msg: if available, will immediately be hashed into the object's starting
-    state.  
+    state.
 
     You can now feed arbitrary strings into the object using its update()
     method, and can ask for the hash value at any time by calling its digest()
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 0f6b6a7..c587b68 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -398,5 +398,5 @@
             resolved = normpath(join(dir, resolved))
             newpath = join(*([resolved] + bits[i:]))
             return realpath(newpath)
-        
+
     return filename
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index 30f9398..4527a84 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -126,7 +126,7 @@
 
 class SSLFakeSocket:
     """A fake socket object that really wraps a SSLObject.
-    
+
     It only supports what is needed in smtplib.
     """
     def __init__(self, realsock, sslobj):
@@ -142,7 +142,7 @@
 
 class SSLFakeFile:
     """A fake file like object that really wraps a SSLObject.
-    
+
     It only supports what is needed in smtplib.
     """
     def __init__( self, sslobj):
@@ -524,7 +524,7 @@
                 authmethod = method
                 break
         if self.debuglevel > 0: print "AuthMethod:", authmethod
-         
+
         if authmethod == AUTH_CRAM_MD5:
             (code, resp) = self.docmd("AUTH", AUTH_CRAM_MD5)
             if code == 503:
@@ -532,7 +532,7 @@
                 return (code, resp)
             (code, resp) = self.docmd(encode_cram_md5(resp, user, password))
         elif authmethod == AUTH_PLAIN:
-            (code, resp) = self.docmd("AUTH", 
+            (code, resp) = self.docmd("AUTH",
                 AUTH_PLAIN + " " + encode_plain(user, password))
         elif authmethod == None:
             raise SMTPError("No suitable authentication method found.")
@@ -544,20 +544,20 @@
 
     def starttls(self, keyfile = None, certfile = None):
         """Puts the connection to the SMTP server into TLS mode.
-        
+
         If the server supports TLS, this will encrypt the rest of the SMTP
         session. If you provide the keyfile and certfile parameters,
         the identity of the SMTP server and client can be checked. This,
         however, depends on whether the socket module really checks the
         certificates.
         """
-        (resp, reply) = self.docmd("STARTTLS") 
+        (resp, reply) = self.docmd("STARTTLS")
         if resp == 220:
             sslobj = socket.ssl(self.sock, keyfile, certfile)
             self.sock = SSLFakeSocket(self.sock, sslobj)
             self.file = SSLFakeFile(sslobj)
         return (resp, reply)
-    
+
     def sendmail(self, from_addr, to_addrs, msg, mail_options=[],
                  rcpt_options=[]):
         """This command performs an entire mail transaction.
diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py
index 82ab398..f8ad6fd 100644
--- a/Lib/test/test_doctest.py
+++ b/Lib/test/test_doctest.py
@@ -1,2 +1,2 @@
-import doctest, test_support 
+import doctest, test_support
 test_support.run_doctest(doctest)
diff --git a/Lib/test/test_getargs.py b/Lib/test/test_getargs.py
index 5747261..ed6e4ee 100644
--- a/Lib/test/test_getargs.py
+++ b/Lib/test/test_getargs.py
@@ -19,6 +19,3 @@
     marshal.loads(u"\222")
 except UnicodeError:
     pass
-
-
-
diff --git a/Lib/threading.py b/Lib/threading.py
index 4906674..fbf40cd 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -489,12 +489,12 @@
 
 class _Timer(Thread):
     """Call a function after a specified number of seconds:
-    
+
     t = Timer(30.0, f, args=[], kwargs={})
     t.start()
     t.cancel() # stop the timer's action if it's still waiting
     """
-    
+
     def __init__(self, interval, function, args=[], kwargs={}):
         Thread.__init__(self)
         self.interval = interval
@@ -502,11 +502,11 @@
         self.args = args
         self.kwargs = kwargs
         self.finished = Event()
-    
+
     def cancel(self):
         """Stop the timer if it hasn't finished yet"""
         self.finished.set()
-    
+
     def run(self):
         self.finished.wait(self.interval)
         if not self.finished.isSet():
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index 0c63b91..816d887 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -417,7 +417,7 @@
         zinfo.CRC = CRC
         zinfo.file_size = file_size
         # Seek backwards and write CRC and file sizes
-        position = self.fp.tell()	# Preserve current position in file
+        position = self.fp.tell()       # Preserve current position in file
         self.fp.seek(zinfo.header_offset + 14, 0)
         self.fp.write(struct.pack("<lll", zinfo.CRC, zinfo.compress_size,
               zinfo.file_size))
