diff --git a/Lib/distutils/ccompiler.py b/Lib/distutils/ccompiler.py
index 20a5191..933060a 100644
--- a/Lib/distutils/ccompiler.py
+++ b/Lib/distutils/ccompiler.py
@@ -828,7 +828,7 @@
     from distutils.fancy_getopt import FancyGetopt 
     compilers = []
     for compiler in compiler_class.keys():
-	compilers.append(("compiler="+compiler, None,
+        compilers.append(("compiler="+compiler, None,
                           compiler_class[compiler][2]))
     compilers.sort()
     pretty_printer = FancyGetopt(compilers)
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index 4b5aaab..6456ad4 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -370,12 +370,12 @@
                 ext_filename = os.path.join (self.build_lib,
                                              self.get_ext_filename(fullname))
 
-	    if not (self.force or newer_group(sources, ext_filename, 'newer')):
-	    	self.announce ("skipping '%s' extension (up-to-date)" %
+            if not (self.force or newer_group(sources, ext_filename, 'newer')):
+                self.announce ("skipping '%s' extension (up-to-date)" %
                                ext.name)
-		continue # 'for' loop over all extensions
-	    else:
-        	self.announce ("building '%s' extension" % ext.name)
+                continue # 'for' loop over all extensions
+            else:
+                self.announce ("building '%s' extension" % ext.name)
 
             # First, scan the sources for SWIG definition files (.i), run
             # SWIG on 'em to create .c files, and modify the sources list
diff --git a/Lib/distutils/command/install_headers.py b/Lib/distutils/command/install_headers.py
index 991985b..2e6ce86 100644
--- a/Lib/distutils/command/install_headers.py
+++ b/Lib/distutils/command/install_headers.py
@@ -22,7 +22,7 @@
 
     def initialize_options (self):
         self.install_dir = None
-	self.outfiles = []
+        self.outfiles = []
 
     def finalize_options (self):
         self.set_undefined_options('install',
diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py
index bb47606..5f81c88 100644
--- a/Lib/distutils/dist.py
+++ b/Lib/distutils/dist.py
@@ -275,13 +275,13 @@
 
         # What to call the per-user config file
         if os.name == 'posix':
-	    user_filename = ".pydistutils.cfg"
-	else:
-	    user_filename = "pydistutils.cfg"
+            user_filename = ".pydistutils.cfg"
+        else:
+            user_filename = "pydistutils.cfg"
 	
         # And look for the user config file
-	if os.environ.has_key('HOME'):
-    	    user_file = os.path.join(os.environ.get('HOME'), user_filename)
+        if os.environ.has_key('HOME'):
+            user_file = os.path.join(os.environ.get('HOME'), user_filename)
             if os.path.isfile(user_file):
                 files.append(user_file)
 
@@ -439,7 +439,7 @@
 
 	# Check for help_options in command class.  They have a different
 	# format (tuple of four) so we need to preprocess them here.
-	if (hasattr(cmd_class, 'help_options') and
+        if (hasattr(cmd_class, 'help_options') and
             type (cmd_class.help_options) is ListType):
             help_options = fix_help_options(cmd_class.help_options)
         else:
@@ -457,17 +457,17 @@
             self._show_help(parser, display_options=0, commands=[cmd_class])
             return
 
-	if (hasattr(cmd_class, 'help_options') and
+        if (hasattr(cmd_class, 'help_options') and
             type (cmd_class.help_options) is ListType):
-	    help_option_found=0
-	    for (help_option, short, desc, func) in cmd_class.help_options:
-		if hasattr(opts, parser.get_attr_name(help_option)):
-		    help_option_found=1
+            help_option_found=0
+            for (help_option, short, desc, func) in cmd_class.help_options:
+                if hasattr(opts, parser.get_attr_name(help_option)):
+                    help_option_found=1
 		    #print "showing help for option %s of command %s" % \
                     #      (help_option[0],cmd_class)
 
                     if callable(func):
-			func()
+                        func()
                     else:
                         raise DistutilsClassError, \
                             ("invalid help function %s for help option '%s': "
@@ -475,7 +475,7 @@
                             (`func`, help_option)
 
             if help_option_found: 
-		return
+                return
 
         # Put the options from the command-line into their official
         # holding pen, the 'command_options' dictionary.
@@ -526,12 +526,12 @@
                 klass = command
             else:
                 klass = self.get_command_class (command)
-	    if (hasattr(klass, 'help_options') and
+            if (hasattr(klass, 'help_options') and
                 type (klass.help_options) is ListType):
-		parser.set_option_table (klass.user_options +
+                parser.set_option_table (klass.user_options +
                                          fix_help_options(klass.help_options))
-	    else:
-        	parser.set_option_table (klass.user_options)
+            else:
+                parser.set_option_table (klass.user_options)
             parser.print_help ("Options for '%s' command:" % klass.__name__)
             print
 
