diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py
index 02e7764..87558b2 100644
--- a/Lib/compiler/pycodegen.py
+++ b/Lib/compiler/pycodegen.py
@@ -372,7 +372,7 @@
             ndecorators = len(node.decorators.nodes)
         else:
             ndecorators = 0
- 
+
         gen = self.FunctionGen(node, self.scopes, isLambda,
                                self.class_name, self.get_module())
         walk(node.code, gen)
diff --git a/Lib/lib-tk/tkFont.py b/Lib/lib-tk/tkFont.py
index 06e0c98..3979e99 100644
--- a/Lib/lib-tk/tkFont.py
+++ b/Lib/lib-tk/tkFont.py
@@ -29,7 +29,7 @@
     """Given the name of a tk named font, returns a Font representation.
     """
     return Font(name=name, exists=True)
-    
+
 class Font:
 
     """Represents a named font.
@@ -50,7 +50,7 @@
     slant -- font slant: ROMAN, ITALIC
     underline -- font underlining: false (0), true (1)
     overstrike -- font strikeout: false (0), true (1)
-        
+
     """
 
     def _set(self, kw):
@@ -95,7 +95,7 @@
                 root.tk.call("font", "configure", self.name, *font)
         else:
             # create new font (raises TclError if the font exists)
-            root.tk.call("font", "create", self.name, *font) 
+            root.tk.call("font", "create", self.name, *font)
             self.delete_font = True
         # backlinks!
         self._root  = root
@@ -120,7 +120,7 @@
                 self._call("font", "delete", self.name)
         except (AttributeError, Tkinter.TclError):
             pass
-  
+
     def copy(self):
         "Return a distinct copy of the current font"
         return Font(self._root, **self.actual())
diff --git a/Lib/plat-freebsd6/IN.py b/Lib/plat-freebsd6/IN.py
index ccd94ae..31e9e13 100644
--- a/Lib/plat-freebsd6/IN.py
+++ b/Lib/plat-freebsd6/IN.py
@@ -1,13 +1,13 @@
 # Generated by h2py from /usr/include/netinet/in.h
 
 # Included from sys/cdefs.h
-def __P(protos): return protos		 
+def __P(protos): return protos
 
-def __STRING(x): return #x		 
+def __STRING(x): return #x
 
-def __XSTRING(x): return __STRING(x)	 
+def __XSTRING(x): return __STRING(x)
 
-def __P(protos): return ()		 
+def __P(protos): return ()
 
 def __STRING(x): return "x"
 
diff --git a/Lib/posixpath.py b/Lib/posixpath.py
index 345a742..1a25934 100644
--- a/Lib/posixpath.py
+++ b/Lib/posixpath.py
@@ -404,7 +404,7 @@
         bits = ['/'] + filename.split('/')[1:]
     else:
         bits = filename.split('/')
-        
+
     for i in range(2, len(bits)+1):
         component = join(*bits[0:i])
         # Resolve symbolic links.
@@ -415,10 +415,10 @@
                 return abspath(join(*([component] + bits[i:])))
             else:
                 newpath = join(*([resolved] + bits[i:]))
-                return realpath(newpath)        
+                return realpath(newpath)
 
     return abspath(filename)
-    
+
 
 def _resolve_link(path):
     """Internal helper function.  Takes a path and follows symlinks
diff --git a/Lib/test/test__locale.py b/Lib/test/test__locale.py
index c113c63..97aaef8 100644
--- a/Lib/test/test__locale.py
+++ b/Lib/test/test__locale.py
@@ -33,6 +33,6 @@
         if nl_radixchar != li_radixchar:
             print "%r != %r" % (nl_radixchar, li_radixchar)
     if not saw_locale:
-            raise ImportError, "None of the listed locales found"
+        raise ImportError, "None of the listed locales found"
 finally:
     setlocale(LC_NUMERIC, oldlocale)
diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py
index 75cd50b..1fc3e7c 100644
--- a/Lib/test/test_posixpath.py
+++ b/Lib/test/test_posixpath.py
@@ -397,7 +397,7 @@
     def test_realpath(self):
         self.assert_("foo" in realpath("foo"))
         self.assertRaises(TypeError, posixpath.realpath)
-          
+
     if hasattr(os, "symlink"):
         def test_realpath_basic(self):
             # Basic operation.
@@ -406,7 +406,7 @@
                 self.assertEqual(realpath(ABSTFN), ABSTFN+"1")
             finally:
                 self.safe_remove(ABSTFN)
-        
+
         def test_realpath_symlink_loops(self):
             # Bug #930024, return the path unchanged if we get into an infinite
             # symlink loop.
@@ -429,7 +429,7 @@
                 self.safe_remove(ABSTFN+"1")
                 self.safe_remove(ABSTFN+"2")
 
-        def test_realpath_resolve_parents(self):                        
+        def test_realpath_resolve_parents(self):
             # We also need to resolve any symlinks in the parents of a relative
             # path passed to realpath. E.g.: current working directory is
             # /usr/doc with 'doc' being a symlink to /usr/share/doc. We call
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index 15f97b5..57e7423 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -3,7 +3,7 @@
     import zlib
 except ImportError:
     zlib = None
-    
+
 import zipfile, os, unittest
 
 from StringIO import StringIO
