diff --git a/Tools/framer/example.py b/Tools/framer/example.py
index b77f475..96f6278 100644
--- a/Tools/framer/example.py
+++ b/Tools/framer/example.py
@@ -11,7 +11,7 @@
     generality of StringIO, but it provides enough for most
     applications and is especially useful in conjunction with the
     pickle module.
-    
+
     Usage:
 
     from cStringIO import StringIO
@@ -20,7 +20,7 @@
     an_output_stream.write(some_stuff)
     ...
     value = an_output_stream.getvalue()
-    
+
     an_input_stream = StringIO(a_string)
     spam = an_input_stream.readline()
     spam = an_input_stream.read(5)
@@ -36,7 +36,7 @@
 
     class InputType(Type):
         "Simple type for treating strings as input file streams"
-        
+
         abbrev = "input"
 
         struct = """\
@@ -121,7 +121,6 @@
 
         def writelines(self, lines):
             """Write each string in lines."""
-        
+
 
 cStringIO.gen()
-
diff --git a/Tools/framer/framer/__init__.py b/Tools/framer/framer/__init__.py
index ab73a30..d8f9058 100644
--- a/Tools/framer/framer/__init__.py
+++ b/Tools/framer/framer/__init__.py
@@ -4,5 +4,3 @@
 using many of the new features introduced in Python 2.2.  It also
 takes a more declarative approach to generating code.
 """
-
-
diff --git a/Tools/framer/framer/bases.py b/Tools/framer/framer/bases.py
index 61052ab..fb3cb03 100644
--- a/Tools/framer/framer/bases.py
+++ b/Tools/framer/framer/bases.py
@@ -64,7 +64,7 @@
                 self.__types[name] = obj
                 if obj.has_members():
                     self.__members = True
-                    
+
     def initvars(self):
         v = self.__vars = {}
         filename = getattr(self, "__file__", None)
@@ -83,7 +83,7 @@
         if self.__members:
             p(template.member_include)
         print >> f
-        
+
         if self.__doc__:
             p(template.module_doc)
 
@@ -98,7 +98,7 @@
         p(template.module_init_start)
         for name, type in sortitems(self.__types):
             type.dump_init(f)
-            
+
         p("}")
 
 class Module:
@@ -121,7 +121,7 @@
 
         for name, func in sortitems(self.__methods):
             func.dump(f)
-            
+
         self.dump_methoddef(f, self.__methods, self.__vars)
         self.dump_memberdef(f)
         self.dump_slots(f)
@@ -199,7 +199,7 @@
             print >> f, templ % vars
 
         if self.struct:
-           p(template.dealloc_func, {"name" : self.__slots[TP_DEALLOC]})
+            p(template.dealloc_func, {"name" : self.__slots[TP_DEALLOC]})
 
         p(template.type_struct_start)
         for s in Slots[:-5]: # XXX
@@ -218,4 +218,3 @@
 
 class Type:
     __metaclass__ = TypeMetaclass
-
diff --git a/Tools/framer/framer/function.py b/Tools/framer/framer/function.py
index 595cc8d..306f7e9 100644
--- a/Tools/framer/framer/function.py
+++ b/Tools/framer/framer/function.py
@@ -55,7 +55,7 @@
 
     def dump_decls(self, f):
         pass
-        
+
 class NoArgs(_ArgumentList):
 
     def __init__(self, args):
@@ -67,7 +67,7 @@
         return "PyObject *self"
 
 class OneArg(_ArgumentList):
-    
+
     def __init__(self, args):
         assert len(args) == 1
         super(OneArg, self).__init__(args)
@@ -139,7 +139,7 @@
 
         if self.__doc__:
             p(template.docstring)
-            
+
         d = {"name" : self.vars["CName"],
              "args" : self.args.c_args(),
              }
@@ -149,13 +149,13 @@
 
         if self.args.ml_meth == METH_VARARGS:
             p(template.varargs)
-        
+
         p(template.funcdef_end)
 
     def analyze(self):
         self.__doc__ = self._func.__doc__
         self.args = ArgumentList(self._func, self.method)
-        
+
     def initvars(self):
         v = self.vars = {}
         v["PythonName"] = self._func.__name__
diff --git a/Tools/framer/framer/struct.py b/Tools/framer/framer/struct.py
index 3948740..12ea8d7 100644
--- a/Tools/framer/framer/struct.py
+++ b/Tools/framer/framer/struct.py
@@ -35,7 +35,7 @@
         line = line.strip()
         if line.startswith("}"):
             break
-        
+
         assert line.endswith(";")
         line = line[:-1]
         words = line.split()
diff --git a/Tools/framer/framer/structparse.py b/Tools/framer/framer/structparse.py
index 419228a..f24c0da 100644
--- a/Tools/framer/framer/structparse.py
+++ b/Tools/framer/framer/structparse.py
@@ -29,7 +29,7 @@
         line = line.strip()
         if line.startswith("}"):
             break
-        
+
         assert line.endswith(";")
         line = line[:-1]
         words = line.split()
diff --git a/Tools/framer/framer/template.py b/Tools/framer/framer/template.py
index 8d16204..41f9537 100644
--- a/Tools/framer/framer/template.py
+++ b/Tools/framer/framer/template.py
@@ -20,11 +20,11 @@
 
 methoddef_def = """\
         {"%(PythonName)s", (PyCFunction)%(CName)s, %(MethType)s},"""
-        
+
 methoddef_def_doc = """\
         {"%(PythonName)s", (PyCFunction)%(CName)s, %(MethType)s,
          %(DocstringVar)s},"""
-        
+
 methoddef_end = """\
         {NULL, NULL}
 };
@@ -96,7 +96,7 @@
 type_struct_start = """\
 static PyTypeObject %(CTypeName)s = {
         PyObject_HEAD_INIT(0)"""
-        
+
 type_struct_end = """\
 };
 """
