diff --git a/Lib/distutils/command/build.py b/Lib/distutils/command/build.py
index 7886092..d0e939e 100644
--- a/Lib/distutils/command/build.py
+++ b/Lib/distutils/command/build.py
@@ -15,10 +15,6 @@
     options = [('basedir=', 'b', "base directory for build library"),
                ('libdir=', 'l', "directory for platform-shared files"),
                ('platdir=', 'p', "directory for platform-specific files"),
-
-               # Flags for 'build_py'
-               ('compile-py', None, "compile .py to .pyc"),
-               ('optimize-py', None, "compile .py to .pyo (optimized)"),
               ]
 
     def set_default_options (self):
@@ -28,9 +24,6 @@
         self.libdir = None
         self.platdir = None
 
-        self.compile_py = 1
-        self.optimize_py = 1
-
     def set_final_options (self):
         # 'libdir' and 'platdir' just default to 'lib' and 'plat' under
         # the base build directory
diff --git a/Lib/distutils/command/build_py.py b/Lib/distutils/command/build_py.py
index 0ed8486..d956eef 100644
--- a/Lib/distutils/command/build_py.py
+++ b/Lib/distutils/command/build_py.py
@@ -15,21 +15,15 @@
 class BuildPy (Command):
 
     options = [('dir=', 'd', "directory for platform-shared files"),
-               ('compile', 'c', "compile .py to .pyc"),
-               ('optimize', 'o', "compile .py to .pyo (optimized)"),
               ]
 
 
     def set_default_options (self):
         self.dir = None
-        self.compile = 1
-        self.optimize = 1
 
     def set_final_options (self):
         self.set_undefined_options ('build',
-                                    ('libdir', 'dir'),
-                                    ('compile_py', 'compile'),
-                                    ('optimize_py', 'optimize'))
+                                    ('libdir', 'dir'))
 
 
     def run (self):
@@ -88,25 +82,5 @@
                 created[outdir] = 1
 
             self.copy_file (infiles[i], outfiles[i])
-
-        # (Optionally) compile .py to .pyc
-        # XXX hey! we can't control whether we optimize or not; that's up
-        # to the invocation of the current Python interpreter (at least
-        # according to the py_compile docs).  That sucks.
-
-        if self.compile:
-            from py_compile import compile
-
-            for f in outfiles:
-                # XXX can't assume this filename mapping!
-                out_fn = string.replace (f, '.py', '.pyc')
-                
-                self.make_file (f, out_fn, compile, (f,),
-                                "compiling %s -> %s" % (f, out_fn),
-                                "compilation of %s skipped" % f)
-
-        # XXX ignore self.optimize for now, since we don't really know if
-        # we're compiling optimally or not, and couldn't pick what to do
-        # even if we did know.  ;-(
                        
 # end class BuildPy
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index 1f45780..ec73b1c 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -43,6 +43,9 @@
                ('install-html=', None, "directory for HTML documentation"),
                ('install-info=', None, "directory for GNU info files"),
                
+               # Flags for 'build_py'
+               ('compile-py', None, "compile .py to .pyc"),
+               ('optimize-py', None, "compile .py to .pyo (optimized)"),
               ]
 
     def set_default_options (self):
@@ -74,6 +77,9 @@
         self.install_html = None
         self.install_info = None
 
+        self.compile_py = 1
+        self.optimize_py = 1
+
 
     def set_final_options (self):
 
diff --git a/Lib/distutils/command/install_lib.py b/Lib/distutils/command/install_lib.py
index 22ab71e..f147af4 100644
--- a/Lib/distutils/command/install_lib.py
+++ b/Lib/distutils/command/install_lib.py
@@ -2,19 +2,25 @@
 
 __rcsid__ = "$Id$"
 
-import sys
+import sys, string
 from distutils.core import Command
 from distutils.util import copy_tree
 
 class InstallPy (Command):
 
     options = [('dir=', 'd', "directory to install to"),
-               ('build-dir=' 'b', "build directory (where to install from)")]
+               ('build-dir=' 'b', "build directory (where to install from)"),
+               ('compile', 'c', "compile .py to .pyc"),
+               ('optimize', 'o', "compile .py to .pyo (optimized)"),
+              ]
+               
 
     def set_default_options (self):
         # let the 'install' command dictate our installation directory
         self.dir = None
         self.build_dir = None
+        self.compile = 1
+        self.optimize = 1
 
     def set_final_options (self):
         # If we don't have a 'dir' value, we'll have to ask the 'install'
@@ -25,7 +31,10 @@
 
         self.set_undefined_options ('install',
                                     ('build_lib', 'build_dir'),
-                                    ('install_site_lib', 'dir'))
+                                    ('install_site_lib', 'dir'),
+                                    ('compile_py', 'compile'),
+                                    ('optimize_py', 'optimize'))
+
 
     def run (self):
 
@@ -33,8 +42,28 @@
 
         # Dump entire contents of the build directory to the installation
         # directory (that's the beauty of having a build directory!)
-        self.copy_tree (self.build_dir, self.dir)
+        outfiles = self.copy_tree (self.build_dir, self.dir)
                    
+        # (Optionally) compile .py to .pyc
+        # XXX hey! we can't control whether we optimize or not; that's up
+        # to the invocation of the current Python interpreter (at least
+        # according to the py_compile docs).  That sucks.
+
+        if self.compile:
+            from py_compile import compile
+
+            for f in outfiles:
+                # XXX can't assume this filename mapping!
+                out_fn = string.replace (f, '.py', '.pyc')
+                
+                self.make_file (f, out_fn, compile, (f,),
+                                "compiling %s -> %s" % (f, out_fn),
+                                "compilation of %s skipped" % f)
+
+        # XXX ignore self.optimize for now, since we don't really know if
+        # we're compiling optimally or not, and couldn't pick what to do
+        # even if we did know.  ;-(
+
     # run ()
 
 # class InstallPy
diff --git a/Lib/distutils/command/install_py.py b/Lib/distutils/command/install_py.py
index 22ab71e..f147af4 100644
--- a/Lib/distutils/command/install_py.py
+++ b/Lib/distutils/command/install_py.py
@@ -2,19 +2,25 @@
 
 __rcsid__ = "$Id$"
 
-import sys
+import sys, string
 from distutils.core import Command
 from distutils.util import copy_tree
 
 class InstallPy (Command):
 
     options = [('dir=', 'd', "directory to install to"),
-               ('build-dir=' 'b', "build directory (where to install from)")]
+               ('build-dir=' 'b', "build directory (where to install from)"),
+               ('compile', 'c', "compile .py to .pyc"),
+               ('optimize', 'o', "compile .py to .pyo (optimized)"),
+              ]
+               
 
     def set_default_options (self):
         # let the 'install' command dictate our installation directory
         self.dir = None
         self.build_dir = None
+        self.compile = 1
+        self.optimize = 1
 
     def set_final_options (self):
         # If we don't have a 'dir' value, we'll have to ask the 'install'
@@ -25,7 +31,10 @@
 
         self.set_undefined_options ('install',
                                     ('build_lib', 'build_dir'),
-                                    ('install_site_lib', 'dir'))
+                                    ('install_site_lib', 'dir'),
+                                    ('compile_py', 'compile'),
+                                    ('optimize_py', 'optimize'))
+
 
     def run (self):
 
@@ -33,8 +42,28 @@
 
         # Dump entire contents of the build directory to the installation
         # directory (that's the beauty of having a build directory!)
-        self.copy_tree (self.build_dir, self.dir)
+        outfiles = self.copy_tree (self.build_dir, self.dir)
                    
+        # (Optionally) compile .py to .pyc
+        # XXX hey! we can't control whether we optimize or not; that's up
+        # to the invocation of the current Python interpreter (at least
+        # according to the py_compile docs).  That sucks.
+
+        if self.compile:
+            from py_compile import compile
+
+            for f in outfiles:
+                # XXX can't assume this filename mapping!
+                out_fn = string.replace (f, '.py', '.pyc')
+                
+                self.make_file (f, out_fn, compile, (f,),
+                                "compiling %s -> %s" % (f, out_fn),
+                                "compilation of %s skipped" % f)
+
+        # XXX ignore self.optimize for now, since we don't really know if
+        # we're compiling optimally or not, and couldn't pick what to do
+        # even if we did know.  ;-(
+
     # run ()
 
 # class InstallPy
