diff --git a/Lib/distutils/command/build.py b/Lib/distutils/command/build.py
index d81bc88..97466fd 100644
--- a/Lib/distutils/command/build.py
+++ b/Lib/distutils/command/build.py
@@ -87,7 +87,7 @@
         # be needed by extension modules, so obviously have to be done
         # first!
         if self.distribution.libraries:
-            self.run_peer ('build_lib')
+            self.run_peer ('build_clib')
 
         # And now 'build_ext' -- compile extension modules and put them
         # into the build tree
diff --git a/Lib/distutils/command/build_clib.py b/Lib/distutils/command/build_clib.py
index 955cf56..7a6ef7a 100644
--- a/Lib/distutils/command/build_clib.py
+++ b/Lib/distutils/command/build_clib.py
@@ -1,6 +1,6 @@
-"""distutils.command.build_lib
+"""distutils.command.build_clib
 
-Implements the Distutils 'build_lib' command, to build a C/C++ library
+Implements the Distutils 'build_clib' command, to build a C/C++ library
 that is included in the module distribution and needed by an extension
 module."""
 
@@ -26,7 +26,7 @@
 from distutils.ccompiler import new_compiler
 
 
-class build_lib (Command):
+class build_clib (Command):
 
     description = "build C/C++ libraries used by Python extensions"
 
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index 6da02fe..bbdf062 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -166,9 +166,9 @@
             self.compiler.set_link_objects (self.link_objects)
 
         if self.distribution.libraries:
-            build_lib = self.find_peer ('build_lib')
-            self.libraries = build_lib.get_library_names () or []
-            self.library_dirs = [build_lib.build_clib]
+            build_clib = self.find_peer ('build_clib')
+            self.libraries = build_clib.get_library_names () or []
+            self.library_dirs = [build_clib.build_clib]
         else:
             self.libraries = []
             self.library_dirs = []
diff --git a/Lib/distutils/command/build_lib.py b/Lib/distutils/command/build_lib.py
deleted file mode 100644
index 955cf56..0000000
--- a/Lib/distutils/command/build_lib.py
+++ /dev/null
@@ -1,202 +0,0 @@
-"""distutils.command.build_lib
-
-Implements the Distutils 'build_lib' command, to build a C/C++ library
-that is included in the module distribution and needed by an extension
-module."""
-
-# created (an empty husk) 1999/12/18, Greg Ward
-# fleshed out 2000/02/03-04
-
-__revision__ = "$Id$"
-
-
-# XXX this module has *lots* of code ripped-off quite transparently from
-# build_ext.py -- not surprisingly really, as the work required to build
-# a static library from a collection of C source files is not really all
-# that different from what's required to build a shared object file from
-# a collection of C source files.  Nevertheless, I haven't done the
-# necessary refactoring to account for the overlap in code between the
-# two modules, mainly because a number of subtle details changed in the
-# cut 'n paste.  Sigh.
-
-import os, string
-from types import *
-from distutils.core import Command
-from distutils.errors import *
-from distutils.ccompiler import new_compiler
-
-
-class build_lib (Command):
-
-    description = "build C/C++ libraries used by Python extensions"
-
-    user_options = [
-        ('build-clib', 'b',
-         "directory to build C/C++ libraries to"),
-        ('build-temp', 't',
-         "directory to put temporary build by-products"),
-        ('debug', 'g',
-         "compile with debugging information"),
-        ]
-
-    def initialize_options (self):
-        self.build_clib = None
-        self.build_temp = None
-
-        # List of libraries to build
-        self.libraries = None
-
-        # Compilation options for all libraries
-        self.include_dirs = None
-        self.define = None
-        self.undef = None
-        self.debug = None
-
-    # initialize_options()
-
-
-    def finalize_options (self):
-
-        # This might be confusing: both build-clib and build-temp default
-        # to build-temp as defined by the "build" command.  This is because
-        # I think that C libraries are really just temporary build
-        # by-products, at least from the point of view of building Python
-        # extensions -- but I want to keep my options open.
-        self.set_undefined_options ('build',
-                                    ('build_temp', 'build_clib'),
-                                    ('build_temp', 'build_temp'),
-                                    ('debug', 'debug'))
-
-        self.libraries = self.distribution.libraries
-        if self.libraries:
-            self.check_library_list (self.libraries)
-
-        if self.include_dirs is None:
-            self.include_dirs = self.distribution.include_dirs or []
-        if type (self.include_dirs) is StringType:
-            self.include_dirs = string.split (self.include_dirs,
-                                              os.pathsep)
-
-        # XXX same as for build_ext -- what about 'self.define' and
-        # 'self.undef' ?
-
-    # finalize_options()
-
-
-    def run (self):
-
-        if not self.libraries:
-            return
-
-        # Yech -- this is cut 'n pasted from build_ext.py!
-        self.compiler = new_compiler (plat=os.environ.get ('PLAT'),
-                                      verbose=self.verbose,
-                                      dry_run=self.dry_run,
-                                      force=self.force)
-        if self.include_dirs is not None:
-            self.compiler.set_include_dirs (self.include_dirs)
-        if self.define is not None:
-            # 'define' option is a list of (name,value) tuples
-            for (name,value) in self.define:
-                self.compiler.define_macro (name, value)
-        if self.undef is not None:
-            for macro in self.undef:
-                self.compiler.undefine_macro (macro)
-
-        self.build_libraries (self.libraries)
-
-    # run()
-
-
-    def check_library_list (self, libraries):
-        """Ensure that the list of libraries (presumably provided as a
-           command option 'libraries') is valid, i.e. it is a list of
-           2-tuples, where the tuples are (library_name, build_info_dict).
-           Raise DistutilsValueError if the structure is invalid anywhere;
-           just returns otherwise."""
-
-        # Yechh, blecch, ackk: this is ripped straight out of build_ext.py,
-        # with only names changed to protect the innocent!
-
-        if type (libraries) is not ListType:
-            raise DistutilsValueError, \
-                  "'libraries' option must be a list of tuples"
-
-        for lib in libraries:
-            if type (lib) is not TupleType and len (lib) != 2:
-                raise DistutilsValueError, \
-                      "each element of 'libraries' must a 2-tuple"
-
-            if type (lib[0]) is not StringType:
-                raise DistutilsValueError, \
-                      "first element of each tuple in 'libraries' " + \
-                      "must be a string (the library name)"
-            if '/' in lib[0] or (os.sep != '/' and os.sep in lib[0]):
-                raise DistutilsValueError, \
-                      ("bad library name '%s': " + 
-                       "may not contain directory separators") % \
-                      lib[0]
-
-            if type (lib[1]) is not DictionaryType:
-                raise DistutilsValueError, \
-                      "second element of each tuple in 'libraries' " + \
-                      "must be a dictionary (build info)"
-        # for lib
-
-    # check_library_list ()
-
-
-    def get_library_names (self):
-        # Assume the library list is valid -- 'check_library_list()' is
-        # called from 'finalize_options()', so it should be!
-
-        if not self.libraries:
-            return None
-
-        lib_names = []
-        for (lib_name, build_info) in self.libraries:
-            lib_names.append (lib_name)
-        return lib_names
-
-    # get_library_names ()
-
-
-    def build_libraries (self, libraries):
-
-        compiler = self.compiler
-
-        for (lib_name, build_info) in libraries:
-            sources = build_info.get ('sources')
-            if sources is None or type (sources) not in (ListType, TupleType):
-                raise DistutilsValueError, \
-                      ("in 'libraries' option (library '%s'), " +
-                       "'sources' must be present and must be " +
-                       "a list of source filenames") % lib_name
-            sources = list (sources)
-
-            self.announce ("building '%s' library" % lib_name)
-
-            # First, compile the source code to object files in the library
-            # directory.  (This should probably change to putting object
-            # files in a temporary build directory.)
-            macros = build_info.get ('macros')
-            include_dirs = build_info.get ('include_dirs')
-            objects = self.compiler.compile (sources,
-                                             output_dir=self.build_temp,
-                                             keep_dir=1,
-                                             macros=macros,
-                                             include_dirs=include_dirs,
-                                             debug=self.debug)
-
-            # Now "link" the object files together into a static library.
-            # (On Unix at least, this isn't really linking -- it just
-            # builds an archive.  Whatever.)
-            self.compiler.link_static_lib (objects, lib_name,
-                                           output_dir=self.build_clib,
-                                           debug=self.debug)
-
-        # for libraries
-
-    # build_libraries ()
-
-# class BuildLib
