diff --git a/Lib/difflib.py b/Lib/difflib.py
index 8493503..a2689f4 100644
--- a/Lib/difflib.py
+++ b/Lib/difflib.py
@@ -946,7 +946,7 @@
 
         yield "- " + aline
         if atags:
-             yield "? %s%s\n" % ("\t" * common, atags)
+            yield "? %s%s\n" % ("\t" * common, atags)
 
         yield "+ " + bline
         if btags:
diff --git a/Lib/email/Encoders.py b/Lib/email/Encoders.py
index d9cd42d..0425e5c 100644
--- a/Lib/email/Encoders.py
+++ b/Lib/email/Encoders.py
@@ -8,7 +8,7 @@
 from quopri import encodestring as _encodestring
 
 
-
+
 # Helpers
 def _qencode(s):
     return _encodestring(s, quotetabs=1)
@@ -26,7 +26,7 @@
     return value
 
 
-
+
 def encode_base64(msg):
     """Encode the message's payload in Base64.
 
@@ -38,7 +38,7 @@
     msg['Content-Transfer-Encoding'] = 'base64'
 
 
-
+
 def encode_quopri(msg):
     """Encode the message's payload in Quoted-Printable.
 
@@ -50,7 +50,7 @@
     msg['Content-Transfer-Encoding'] = 'quoted-printable'
 
 
-
+
 def encode_7or8bit(msg):
     """Set the Content-Transfer-Encoding: header to 7bit or 8bit."""
     orig = msg.get_payload()
@@ -64,6 +64,6 @@
         msg['Content-Transfer-Encoding'] = '7bit'
 
 
-
+
 def encode_noop(msg):
     """Do nothing."""
diff --git a/Lib/email/Errors.py b/Lib/email/Errors.py
index 71d7663..5a1e0fe 100644
--- a/Lib/email/Errors.py
+++ b/Lib/email/Errors.py
@@ -5,7 +5,7 @@
 """
 
 
-
+
 class MessageError(Exception):
     """Base class for errors in this module."""
 
diff --git a/Lib/email/Generator.py b/Lib/email/Generator.py
index c31dc80..476e9e7 100644
--- a/Lib/email/Generator.py
+++ b/Lib/email/Generator.py
@@ -25,7 +25,7 @@
 fcre = re.compile(r'^From ', re.MULTILINE)
 
 
-
+
 class Generator:
     """Generates output from a Message object tree.
 
@@ -278,7 +278,7 @@
         self._fp.write(s.getvalue())
 
 
-
+
 class DecodedGenerator(Generator):
     """Generator a text representation of a message.
 
@@ -334,7 +334,7 @@
                     }
 
 
-
+
 # Helper
 def _make_boundary(self, text=None):
     # Craft a random boundary.  If text is given, ensure that the chosen
diff --git a/Lib/email/Iterators.py b/Lib/email/Iterators.py
index d1ee53f..cd08f37 100644
--- a/Lib/email/Iterators.py
+++ b/Lib/email/Iterators.py
@@ -9,7 +9,7 @@
 from types import StringType
 
 
-
+
 def body_line_iterator(msg):
     """Iterate over the parts, returning string payloads line-by-line."""
     for subpart in msg.walk():
@@ -19,7 +19,7 @@
                 yield line
 
 
-
+
 def typed_subpart_iterator(msg, maintype='text', subtype=None):
     """Iterate over the subparts with a given MIME type.
 
diff --git a/Lib/email/MIMEBase.py b/Lib/email/MIMEBase.py
index 33216f6..c4ff303 100644
--- a/Lib/email/MIMEBase.py
+++ b/Lib/email/MIMEBase.py
@@ -7,7 +7,7 @@
 import Message
 
 
-
+
 class MIMEBase(Message.Message):
     """Base class for MIME specializations."""
 
diff --git a/Lib/email/MIMEImage.py b/Lib/email/MIMEImage.py
index 963da23..5c28cfde 100644
--- a/Lib/email/MIMEImage.py
+++ b/Lib/email/MIMEImage.py
@@ -12,7 +12,7 @@
 import Encoders
 
 
-
+
 class MIMEImage(MIMEBase.MIMEBase):
     """Class for generating image/* type MIME documents."""
 
diff --git a/Lib/email/MIMEMessage.py b/Lib/email/MIMEMessage.py
index fc4b2c6..11bdb3b 100644
--- a/Lib/email/MIMEMessage.py
+++ b/Lib/email/MIMEMessage.py
@@ -8,7 +8,7 @@
 import MIMEBase
 
 
-
+
 class MIMEMessage(MIMEBase.MIMEBase):
     """Class representing message/* MIME documents."""
 
diff --git a/Lib/email/MIMEText.py b/Lib/email/MIMEText.py
index ccce9fb..b099598 100644
--- a/Lib/email/MIMEText.py
+++ b/Lib/email/MIMEText.py
@@ -8,7 +8,7 @@
 from Encoders import encode_7or8bit
 
 
-
+
 class MIMEText(MIMEBase.MIMEBase):
     """Class for generating text/* type MIME documents."""
 
diff --git a/Lib/email/Message.py b/Lib/email/Message.py
index 5822bad..d03b43f 100644
--- a/Lib/email/Message.py
+++ b/Lib/email/Message.py
@@ -20,7 +20,7 @@
 paramre = re.compile(r';\s*')
 
 
-
+
 class Message:
     """Basic message object for use inside the object tree.
 
@@ -430,7 +430,7 @@
 
     def get_charsets(self, failobj=None):
         """Return a list containing the charset(s) used in this message.
-    
+
         The returned list of items describes the Content-Type: headers'
         charset parameter for this message and all the subparts in its
         payload.
diff --git a/Lib/email/Parser.py b/Lib/email/Parser.py
index 81763dc..e8a3b92 100644
--- a/Lib/email/Parser.py
+++ b/Lib/email/Parser.py
@@ -14,7 +14,7 @@
 NL = '\n'
 
 
-
+
 class Parser:
     def __init__(self, _class=Message.Message):
         """Parser of RFC 2822 and MIME email messages.
diff --git a/Lib/email/Utils.py b/Lib/email/Utils.py
index 6bbf2d3..e75dae1 100644
--- a/Lib/email/Utils.py
+++ b/Lib/email/Utils.py
@@ -21,7 +21,7 @@
 UEMPTYSTRING = u''
 
 
-
+
 # Helpers
 
 def _identity(s):
@@ -42,7 +42,7 @@
     return value
 
 
-
+
 def getaddresses(fieldvalues):
     """Return a list of (REALNAME, EMAIL) for each fieldvalue."""
     all = COMMASPACE.join(fieldvalues)
@@ -50,7 +50,7 @@
     return a.getaddrlist()
 
 
-
+
 ecre = re.compile(r'''
   =\?                   # literal =?
   (?P<charset>[^?]*?)   # non-greedy up to the next ? is the charset
@@ -92,7 +92,7 @@
     return UEMPTYSTRING.join(rtn)
 
 
-
+
 def encode(s, charset='iso-8859-1', encoding='q'):
     """Encode a string according to RFC 2047."""
     if encoding.lower() == 'q':
diff --git a/Lib/email/__init__.py b/Lib/email/__init__.py
index 4995114..8ca8d02 100644
--- a/Lib/email/__init__.py
+++ b/Lib/email/__init__.py
@@ -22,7 +22,7 @@
            ]
 
 
-
+
 # Some convenience routines
 from Parser import Parser as _Parser
 from Message import Message as _Message
diff --git a/Lib/quopri.py b/Lib/quopri.py
index 0425735..6d7cdd6 100755
--- a/Lib/quopri.py
+++ b/Lib/quopri.py
@@ -12,10 +12,10 @@
 EMPTYSTRING = ''
 
 try:
-  from binascii import a2b_qp, b2a_qp
+    from binascii import a2b_qp, b2a_qp
 except:
-  a2b_qp = None
-  b2a_qp = None
+    a2b_qp = None
+    b2a_qp = None
 
 
 def needsquoting(c, quotetabs, header):
@@ -28,7 +28,7 @@
     if c in ' \t':
         return quotetabs
     # if header, we have to escape _ because _ is used to escape space
-    if c == '_': 
+    if c == '_':
         return header
     return c == ESCAPE or not (' ' <= c <= '~')
 
@@ -55,7 +55,7 @@
         odata = b2a_qp(data, quotetabs = quotetabs, header = header)
         output.write(odata)
         return
-      
+
     def write(s, output=output, lineEnd='\n'):
         # RFC 1521 requires that the line ending in a space or tab must have
         # that trailing character encoded.
diff --git a/Lib/test/test_email.py b/Lib/test/test_email.py
index 1c5add0..96facd6 100644
--- a/Lib/test/test_email.py
+++ b/Lib/test/test_email.py
@@ -28,14 +28,14 @@
 EMPTYSTRING = ''
 
 
-
+
 def openfile(filename):
     path = os.path.join(os.path.dirname(test.regrtest.__file__),
                         'data', filename)
     return open(path)
 
 
-
+
 # Base test class
 class TestEmailBase(unittest.TestCase):
     def _msgobj(self, filename):
@@ -47,12 +47,12 @@
         return msg
 
 
-
+
 # Test various aspects of the Message class's API
 class TestMessageAPI(TestEmailBase):
     def test_get_charsets(self):
         eq = self.assertEqual
-        
+
         msg = self._msgobj('msg_08.txt')
         charsets = msg.get_charsets()
         eq(charsets, [None, 'us-ascii', 'iso-8859-1', 'iso-8859-2', 'koi8-r'])
@@ -175,7 +175,7 @@
         msg = email.message_from_string(
         "Content-Disposition: blarg; filename\n")
         self.assertEqual(msg.get_filename(), '')
-        
+
     def test_missing_boundary(self):
         msg = email.message_from_string("From: foo\n")
         self.assertEqual(msg.get_boundary(), None)
@@ -217,7 +217,7 @@
         self.failIf(msg.has_key('headeri'))
 
 
-
+
 # Test the email.Encoders module
 class TestEncoders(unittest.TestCase):
     def test_encode_noop(self):
@@ -254,7 +254,7 @@
         eq(msg['content-transfer-encoding'], 'quoted-printable')
 
 
-
+
 class TestLongHeaders(unittest.TestCase):
     def test_header_splitter(self):
         msg = MIMEText('')
@@ -271,12 +271,12 @@
 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"
 
 ''')
 
 
-
+
 class TestFromMangling(unittest.TestCase):
     def setUp(self):
         self.msg = Message()
@@ -309,7 +309,7 @@
 """)
 
 
-
+
 # Test the basic MIMEImage class
 class TestMIMEImage(unittest.TestCase):
     def setUp(self):
@@ -362,7 +362,7 @@
                                   header='foobar') is missing)
 
 
-
+
 # Test the basic MIMEText class
 class TestMIMEText(unittest.TestCase):
     def setUp(self):
@@ -383,7 +383,7 @@
         self.failUnless(not self._msg.is_multipart())
 
 
-
+
 class TestMultipartMixed(unittest.TestCase):
     def setUp(self):
         fp = openfile('PyBanner048.gif')
@@ -406,7 +406,7 @@
         container['From'] = 'Barry <barry@digicool.com>'
         container['To'] = 'Dingus Lovers <cravindogs@cravindogs.com>'
         container['Subject'] = 'Here is your dingus fish'
-        
+
         now = 987809702.54848599
         timetuple = time.localtime(now)
         if timetuple[-1] == 0:
@@ -445,7 +445,7 @@
         unless(not m1.is_multipart())
 
 
-
+
 class TestNonConformant(TestEmailBase):
     def test_parse_missing_minor_type(self):
         eq = self.assertEqual
@@ -466,7 +466,7 @@
         self.assertRaises(Errors.BoundaryError, p.parsestr, data)
 
 
-
+
 class TestRFC2047(unittest.TestCase):
     def test_iso_8859_1(self):
         eq = self.assertEqual
@@ -497,7 +497,7 @@
            '=?iso-8859-2?b?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=')
 
 
-
+
 class TestMIMEMessage(TestEmailBase):
     def setUp(self):
         fp = openfile('msg_11.txt')
@@ -603,7 +603,7 @@
            '<002001c144a6$8752e060$56104586@oxy.edu>')
 
 
-
+
 class TestIdempotent(unittest.TestCase):
     def _msgobj(self, filename):
         fp = openfile(filename)
@@ -652,7 +652,7 @@
     def test_mixed_with_image(self):
         msg, text = self._msgobj('msg_06.txt')
         self._idempotent(msg, text)
-    
+
     def test_multipart_report(self):
         msg, text = self._msgobj('msg_05.txt')
         self._idempotent(msg, text)
@@ -660,7 +660,7 @@
     def test_dsn(self):
         msg, text = self._msgobj('msg_16.txt')
         self._idempotent(msg, text)
-        
+
     def test_content_type(self):
         eq = self.assertEquals
         # Get a message object and reset the seek pointer for other tests
@@ -701,9 +701,9 @@
         eq(msg1.get_type(), 'text/plain')
         self.failUnless(isinstance(msg1.get_payload(), StringType))
         eq(msg1.get_payload(), '\n')
-        
 
-
+
+
 class TestMiscellaneous(unittest.TestCase):
     def test_message_from_string(self):
         fp = openfile('msg_01.txt')
@@ -744,7 +744,7 @@
         # Create a subclass
         class MyMessage(Message):
             pass
-        
+
         msg = email.message_from_string(text, MyMessage)
         unless(isinstance(msg, MyMessage))
         # Try something more complicated
@@ -763,7 +763,7 @@
         # Create a subclass
         class MyMessage(Message):
             pass
-        
+
         fp = openfile('msg_01.txt')
         try:
             msg = email.message_from_file(fp, MyMessage)
@@ -780,7 +780,7 @@
             unless(isinstance(subpart, MyMessage))
 
 
-
+
 class TestIterators(TestEmailBase):
     def test_body_line_iterator(self):
         eq = self.assertEqual
@@ -801,15 +801,15 @@
         eq(len(lines), 43)
         eq(EMPTYSTRING.join(lines), """\
 Send Ppp mailing list submissions to
-	ppp@zzz.org
+        ppp@zzz.org
 
 To subscribe or unsubscribe via the World Wide Web, visit
-	http://www.zzz.org/mailman/listinfo/ppp
+        http://www.zzz.org/mailman/listinfo/ppp
 or, via email, send a message with subject or body 'help' to
-	ppp-request@zzz.org
+        ppp-request@zzz.org
 
 You can reach the person managing the list at
-	ppp-admin@zzz.org
+        ppp-admin@zzz.org
 
 When replying, please edit your Subject line so it is more specific
 than "Re: Contents of Ppp digest..."
@@ -863,7 +863,7 @@
 """)
 
 
-
+
 def suite():
     suite = unittest.TestSuite()
     suite.addTest(unittest.makeSuite(TestMessageAPI))
@@ -882,7 +882,7 @@
     return suite
 
 
-
+
 if __name__ == '__main__':
     unittest.main(defaultTest='suite')
 else:
diff --git a/Lib/test/test_iter.py b/Lib/test/test_iter.py
index 257b61d..5bd7ba4 100644
--- a/Lib/test/test_iter.py
+++ b/Lib/test/test_iter.py
@@ -648,7 +648,7 @@
         try:
             self.assertRaises(TypeError, f.writelines, None)
             self.assertRaises(TypeError, f.writelines, 42)
-    
+
             f.writelines(["1\n", "2\n"])
             f.writelines(("3\n", "4\n"))
             f.writelines({'5\n': None})
@@ -678,14 +678,14 @@
 
                 def __iter__(self):
                     return Iterator(self.start, self.finish)
-                    
-            f.writelines(Whatever(6, 6+2000))            
+
+            f.writelines(Whatever(6, 6+2000))
             f.close()
 
             f = file(TESTFN)
             expected = [str(i) + "\n" for i in range(1, 2006)]
             self.assertEqual(list(f), expected)
-            
+
         finally:
             f.close()
             try:
diff --git a/Lib/test/test_profile.py b/Lib/test/test_profile.py
index 460d56f..6ff5811 100644
--- a/Lib/test/test_profile.py
+++ b/Lib/test/test_profile.py
@@ -7,7 +7,7 @@
 # (We can't use a helper function increment the timer since it would be
 # included in the profile and would appear to consume all the time.)
 ticks = 0
-    
+
 def test_main():
     global ticks
     ticks = 0
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index b0d024b..68eae13 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -409,7 +409,7 @@
 for x,y in utfTests:
     verify( x.encode('utf-7') == y )
 
-try:        
+try:
     unicode('+3ADYAA-', 'utf-7') # surrogates not supported
 except UnicodeError:
     pass
