diff --git a/Lib/compiler/ast.py b/Lib/compiler/ast.py
index cfc2a51..6b78fdd 100644
--- a/Lib/compiler/ast.py
+++ b/Lib/compiler/ast.py
@@ -553,7 +553,7 @@
             self.varargs = 1
         if flags & CO_VARKEYWORDS:
             self.kwargs = 1
-    
+
 
 
     def getChildren(self):
@@ -584,7 +584,7 @@
         self.lineno = lineno
         self.argnames = ['[outmost-iterable]']
         self.varargs = self.kwargs = None
-    
+
 
 
     def getChildren(self):
@@ -763,7 +763,7 @@
             self.varargs = 1
         if flags & CO_VARKEYWORDS:
             self.kwargs = 1
-    
+
 
 
     def getChildren(self):
@@ -1313,4 +1313,4 @@
 
 for name, obj in globals().items():
     if isinstance(obj, type) and issubclass(obj, Node):
-       nodes[name.lower()] = obj
+        nodes[name.lower()] = obj
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index 756e565..34ad5ea 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -79,7 +79,7 @@
             lineno = extractLineNo(child)
             if lineno is not None:
                 return lineno
-        
+
 def Node(*args):
     kind = args[0]
     if nodes.has_key(kind):
@@ -127,7 +127,7 @@
     def parsesuite(self, text):
         """Return a modified parse tree for the given suite text."""
         return self.transform(parser.suite(text))
-        
+
     def parseexpr(self, text):
         """Return a modified parse tree for the given expression text."""
         return self.transform(parser.expr(text))
@@ -426,7 +426,7 @@
 
     def import_name(self, nodelist):
         # import_name: 'import' dotted_as_names
-        return Import(self.com_dotted_as_names(nodelist[1]), 
+        return Import(self.com_dotted_as_names(nodelist[1]),
                       lineno=nodelist[0][2])
 
     def import_from(self, nodelist):
@@ -514,7 +514,7 @@
         else:
             elseNode = None
 
-        return For(assignNode, listNode, bodyNode, elseNode, 
+        return For(assignNode, listNode, bodyNode, elseNode,
                    lineno=nodelist[0][2])
 
     def try_stmt(self, nodelist):
@@ -887,7 +887,7 @@
     def com_try_finally(self, nodelist):
         # try_fin_stmt: "try" ":" suite "finally" ":" suite
         return TryFinally(self.com_node(nodelist[2]),
-                       self.com_node(nodelist[5]), 
+                       self.com_node(nodelist[5]),
                        lineno=nodelist[0][2])
 
     def com_try_except(self, nodelist):
@@ -1226,7 +1226,7 @@
         subscripts = []
         for i in range(1, len(nodelist), 2):
             subscripts.append(self.com_subscript(nodelist[i]))
-        return Subscript(primary, assigning, subscripts, 
+        return Subscript(primary, assigning, subscripts,
                          lineno=extractLineNo(nodelist))
 
     def com_subscript(self, node):
diff --git a/Lib/distutils/command/bdist_rpm.py b/Lib/distutils/command/bdist_rpm.py
index 559fcb9..22eccb9 100644
--- a/Lib/distutils/command/bdist_rpm.py
+++ b/Lib/distutils/command/bdist_rpm.py
@@ -97,24 +97,24 @@
          "RPM 2 compatibility mode"),
 
         # Add the hooks necessary for specifying custom scripts
-        ('prep-script=', None, 
+        ('prep-script=', None,
          "Specify a script for the PREP phase of RPM building"),
-        ('build-script=', None, 
+        ('build-script=', None,
          "Specify a script for the BUILD phase of RPM building"),
 
-        ('pre-install=', None, 
+        ('pre-install=', None,
          "Specify a script for the pre-INSTALL phase of RPM building"),
-        ('install-script=', None, 
+        ('install-script=', None,
          "Specify a script for the INSTALL phase of RPM building"),
-        ('post-install=', None, 
+        ('post-install=', None,
          "Specify a script for the post-INSTALL phase of RPM building"),
 
-        ('pre-uninstall=', None, 
+        ('pre-uninstall=', None,
          "Specify a script for the pre-UNINSTALL phase of RPM building"),
-        ('post-uninstall=', None, 
+        ('post-uninstall=', None,
          "Specify a script for the post-UNINSTALL phase of RPM building"),
 
-        ('clean-script=', None, 
+        ('clean-script=', None,
          "Specify a script for the CLEAN phase of RPM building"),
 
         ('verify-script=', None,
diff --git a/Lib/test/test_compiler.py b/Lib/test/test_compiler.py
index 1d77318..183efb5 100644
--- a/Lib/test/test_compiler.py
+++ b/Lib/test/test_compiler.py
@@ -50,9 +50,9 @@
 
     def _check_lineno(self, node):
         if not node.__class__ in NOLINENO:
-            self.assert_(isinstance(node.lineno, int), 
+            self.assert_(isinstance(node.lineno, int),
                 "lineno=%s on %s" % (node.lineno, node.__class__))
-            self.assert_(node.lineno > 0, 
+            self.assert_(node.lineno > 0,
                 "lineno=%s on %s" % (node.lineno, node.__class__))
         for child in node.getChildNodes():
             self.check_lineno(child)
@@ -84,12 +84,12 @@
     yo = 3
 else:
     yo += 3
-    
+
 try:
     a += b
 finally:
     b = 0
-    
+
 ###############################################################################
 
 def test_main():
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
index 9e5fe0d..07bc63b 100644
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -104,7 +104,7 @@
 
         self.assertEqual(re.sub('x', r'\400', 'x'), '\0')
         self.assertEqual(re.sub('x', r'\777', 'x'), '\377')
-        
+
         self.assertRaises(re.error, re.sub, 'x', r'\1', 'x')
         self.assertRaises(re.error, re.sub, 'x', r'\8', 'x')
         self.assertRaises(re.error, re.sub, 'x', r'\9', 'x')
diff --git a/Tools/compiler/astgen.py b/Tools/compiler/astgen.py
index 0156567..4ccc54d 100644
--- a/Tools/compiler/astgen.py
+++ b/Tools/compiler/astgen.py
@@ -283,4 +283,4 @@
 ### EPILOGUE
 for name, obj in globals().items():
     if isinstance(obj, type) and issubclass(obj, Node):
-       nodes[name.lower()] = obj
+        nodes[name.lower()] = obj
diff --git a/Tools/msi/msi.py b/Tools/msi/msi.py
index 0bb9f40..fa2a9fc 100644
--- a/Tools/msi/msi.py
+++ b/Tools/msi/msi.py
@@ -320,7 +320,7 @@
       end if
       if (ext_new=2 or tcl_new=2) and regtcl_old<>2 then
          Session.ComponentRequestState("REGISTRY.tcl")=2
-      end if      
+      end if
     End Function
     """)
     # To add debug messages into scripts, the following fragment can be used
@@ -329,7 +329,7 @@
     #     Session.message &H04000000, objRec
     add_data(db, "Binary", [("Script", msilib.Binary("inst.vbs"))])
     # See "Custom Action Type 6"
-    add_data(db, "CustomAction", 
+    add_data(db, "CustomAction",
         [("CheckDir", 6, "Script", "CheckDir"),
         ("UpdateEditIDLE", 6, "Script", "UpdateEditIDLE")])
     os.unlink("inst.vbs")
