diff --git a/Doc/ext/setup.py b/Doc/ext/setup.py
index 1805b17..b853d23 100644
--- a/Doc/ext/setup.py
+++ b/Doc/ext/setup.py
@@ -6,4 +6,3 @@
          Extension("noddy3", ["noddy3.c"]),
          Extension("noddy4", ["noddy4.c"]),
          ])
-
diff --git a/Doc/ext/test.py b/Doc/ext/test.py
index 10549d6..7ebf46a 100644
--- a/Doc/ext/test.py
+++ b/Doc/ext/test.py
@@ -211,4 +211,3 @@
 if __name__ == "__main__":
     import doctest, __main__
     doctest.testmod(__main__)
-
diff --git a/Doc/lib/caseless.py b/Doc/lib/caseless.py
index b128219..cae94be 100755
--- a/Doc/lib/caseless.py
+++ b/Doc/lib/caseless.py
@@ -45,7 +45,7 @@
         print "ok: got OptionConflictError for -H"
     else:
         print "not ok: no conflict between -h and -H"
-    
+
     parser.add_option("-f", "--file", dest="file")
     #print repr(parser.get_option("-f"))
     #print repr(parser.get_option("-F"))
@@ -58,5 +58,3 @@
     (options, args) = parser.parse_args(["-F", "bar"])
     assert options.file == "bar", options.file
     print "ok: case insensitive short options work"
-    
-    
diff --git a/Doc/lib/email-dir.py b/Doc/lib/email-dir.py
index bc26b3c..2d89a2f 100644
--- a/Doc/lib/email-dir.py
+++ b/Doc/lib/email-dir.py
@@ -66,7 +66,7 @@
 
     sender = args[0]
     recips = args[1:]
-    
+
     # Create the enclosing (outer) message
     outer = MIMEMultipart()
     outer['Subject'] = 'Contents of directory %s' % os.path.abspath(dir)
diff --git a/Doc/lib/minidom-example.py b/Doc/lib/minidom-example.py
index 3fa15dd..c30c4e0 100644
--- a/Doc/lib/minidom-example.py
+++ b/Doc/lib/minidom-example.py
@@ -35,7 +35,7 @@
 
 def handleSlides(slides):
     for slide in slides:
-       handleSlide(slide)
+        handleSlide(slide)
 
 def handleSlide(slide):
     handleSlideTitle(slide.getElementsByTagName("title")[0])
diff --git a/Doc/lib/required_1.py b/Doc/lib/required_1.py
index 44d5b30..6be5668 100755
--- a/Doc/lib/required_1.py
+++ b/Doc/lib/required_1.py
@@ -3,11 +3,11 @@
 class OptionParser (optparse.OptionParser):
 
     def check_required (self, opt):
-      option = self.get_option(opt)
+        option = self.get_option(opt)
 
-      # Assumes the option's 'default' is set to None!
-      if getattr(self.values, option.dest) is None:
-          self.error("%s option not supplied" % option)
+        # Assumes the option's 'default' is set to None!
+        if getattr(self.values, option.dest) is None:
+            self.error("%s option not supplied" % option)
 
 
 parser = OptionParser()
diff --git a/Doc/ref/reswords.py b/Doc/ref/reswords.py
index 29f326f..68862bb 100644
--- a/Doc/ref/reswords.py
+++ b/Doc/ref/reswords.py
@@ -11,13 +11,13 @@
     nwords = len(words)
     nrows = (nwords + ncols - 1) / ncols
     for irow in range(nrows):
-	for icol in range(ncols):
-	    i = irow + icol * nrows
-	    if 0 <= i < nwords:
-		word = words[i]
-	    else:
-		word = ""
-	    print "%-*s" % (colwidth, word),
-	print
+        for icol in range(ncols):
+            i = irow + icol * nrows
+            if 0 <= i < nwords:
+                word = words[i]
+            else:
+                word = ""
+            print "%-*s" % (colwidth, word),
+        print
 
 main()
diff --git a/Doc/tools/custlib.py b/Doc/tools/custlib.py
index 7898928..15f07ba 100644
--- a/Doc/tools/custlib.py
+++ b/Doc/tools/custlib.py
@@ -10,20 +10,20 @@
 
 for modname in sys.builtin_module_names:
     modules[modname] = modname
-    
+
 for dir in sys.path:
     # Look for *.py files
     filelist = glob.glob(os.path.join(dir, '*.py'))
-    for file in filelist: 
+    for file in filelist:
         path, file = os.path.split(file)
         base, ext = os.path.splitext(file)
         modules[base.lower()] = base
 
     # Look for shared library files
-    filelist = (glob.glob(os.path.join(dir, '*.so')) + 
+    filelist = (glob.glob(os.path.join(dir, '*.so')) +
                 glob.glob(os.path.join(dir, '*.sl')) +
                 glob.glob(os.path.join(dir, '*.o')) )
-    for file in filelist: 
+    for file in filelist:
         path, file = os.path.split(file)
         base, ext = os.path.splitext(file)
         if base[-6:] == 'module':
@@ -54,7 +54,7 @@
 # Phase III: write custlib.tex
 
 # Write the boilerplate
-# XXX should be fancied up.  
+# XXX should be fancied up.
 print """\documentstyle[twoside,11pt,myformat]{report}
 \\title{Python Library Reference}
 \\input{boilerplate}
@@ -69,10 +69,10 @@
 \\pagebreak
 {\\parskip = 0mm \\tableofcontents}
 \\pagebreak\\pagenumbering{arabic}"""
-    
-for modname in mlist: 
+
+for modname in mlist:
     print "\\input{lib%s}" % (modname,)
-    
+
 # Write the end
 print """\\input{custlib.ind}                   % Index
 \\end{document}"""
diff --git a/Doc/tools/keywords.py b/Doc/tools/keywords.py
index 876987d..9f32056 100644
--- a/Doc/tools/keywords.py
+++ b/Doc/tools/keywords.py
@@ -4,16 +4,16 @@
 
 l = []
 try:
-	while 1:
-		l = l + raw_input().split()
+    while 1:
+        l = l + raw_input().split()
 except EOFError:
-	pass
+    pass
 l.sort()
 for x in l[:]:
-	while l.count(x) > 1: l.remove(x)
+    while l.count(x) > 1: l.remove(x)
 ncols = 5
 nrows = (len(l)+ncols-1)/ncols
 for i in range(nrows):
-	for j in range(i, len(l), nrows):
-		print l[j].ljust(10),
-	print
+    for j in range(i, len(l), nrows):
+        print l[j].ljust(10),
+    print
diff --git a/Doc/tools/prechm.py b/Doc/tools/prechm.py
index 09c2c43..7b2f393 100644
--- a/Doc/tools/prechm.py
+++ b/Doc/tools/prechm.py
@@ -438,8 +438,8 @@
     return p
 
 def usage():
-        print usage_mode
-        sys.exit(0)
+    print usage_mode
+    sys.exit(0)
 
 def do_it(args = None):
     if not args:
diff --git a/Doc/tools/sgmlconv/latex2esis.py b/Doc/tools/sgmlconv/latex2esis.py
index b30aaa5..643ef2c 100755
--- a/Doc/tools/sgmlconv/latex2esis.py
+++ b/Doc/tools/sgmlconv/latex2esis.py
@@ -11,7 +11,7 @@
 tool to support additional LaTeX markups.
 
 The format of the table is largely undocumented; see the commented
-headers where the table is specified in main().  There is no provision 
+headers where the table is specified in main().  There is no provision
 to load an alternate table from an external file.
 """
 
diff --git a/PC/testpy.py b/PC/testpy.py
index ef8ba7a..fd1b1e4 100644
--- a/PC/testpy.py
+++ b/PC/testpy.py
@@ -5,28 +5,28 @@
 # change this module too.
 
 try:
-  import string
+    import string
 except:
-  print """Could not import the standard "string" module.
-Please check your PYTHONPATH environment variable."""
-  sys.exit(1)
+    print """Could not import the standard "string" module.
+  Please check your PYTHONPATH environment variable."""
+    sys.exit(1)
 
 try:
-  import regex_syntax
+    import regex_syntax
 except:
-  print """Could not import the standard "regex_syntax" module.  If this is
-a PC, you should add the dos_8x3 directory to your PYTHONPATH."""
-  sys.exit(1)
+    print """Could not import the standard "regex_syntax" module.  If this is
+  a PC, you should add the dos_8x3 directory to your PYTHONPATH."""
+    sys.exit(1)
 
 import os
 
 for dir in sys.path:
-  file = os.path.join(dir, "string.py")
-  if os.path.isfile(file):
-    test = os.path.join(dir, "test")
-    if os.path.isdir(test):
-      # Add the "test" directory to PYTHONPATH.
-      sys.path = sys.path + [test]
+    file = os.path.join(dir, "string.py")
+    if os.path.isfile(file):
+        test = os.path.join(dir, "test")
+        if os.path.isdir(test):
+            # Add the "test" directory to PYTHONPATH.
+            sys.path = sys.path + [test]
 
-import regrtest	# Standard Python tester.
+import regrtest # Standard Python tester.
 regrtest.main()
diff --git a/PCbuild/build_ssl.py b/PCbuild/build_ssl.py
index a369a64..8f485a2 100644
--- a/PCbuild/build_ssl.py
+++ b/PCbuild/build_ssl.py
@@ -118,7 +118,7 @@
             # all outputs (debug/nondebug/dll/lib).  So we filter the file
             # to exclude any "nmake" commands and then execute.
             tempname = "ms\\32all_py.bat"
-            
+
             in_bat  = open("ms\\32all.bat")
             temp_bat = open(tempname,"w")
             while 1:
