diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index 4ad652d..8c6aa1c 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -173,6 +173,13 @@
 
         self.record = None
 
+
+    # -- Option finalizing methods -------------------------------------
+    # (This is rather more involved than for most commands,
+    # because this is where the policy for installing third-
+    # party Python modules on various platforms given a wide
+    # array of user input is decided.  Yes, it's quite complex!)
+
     def finalize_options (self):
 
         # This method (and its pliant slaves, like 'finalize_unix()',
@@ -450,6 +457,8 @@
             setattr(self, attr, change_root(self.root, getattr(self, attr)))
 
 
+    # -- Command execution methods -------------------------------------
+
     def run (self):
 
         # Obviously have to build before we can install
@@ -486,6 +495,38 @@
 
     # run ()
 
+    def create_path_file (self):
+        filename = os.path.join (self.install_libbase,
+                                 self.path_file + ".pth")
+        if self.install_path_file:
+            self.execute (write_file,
+                          (filename, [self.extra_dirs]),
+                          "creating %s" % filename)
+        else:
+            self.warn("path file '%s' not created" % filename)
+
+
+    # -- Reporting methods ---------------------------------------------
+
+    def get_outputs (self):
+        # This command doesn't have any outputs of its own, so just
+        # get the outputs of all its sub-commands.
+        outputs = []
+        for cmd_name in self.get_sub_commands():
+            cmd = self.get_finalized_command (cmd_name)
+            outputs.extend (cmd.get_outputs())
+
+        return outputs
+
+    def get_inputs (self):
+        # XXX gee, this looks familiar ;-(
+        inputs = []
+        for cmd_name in self.get_sub_commands():
+            cmd = self.get_finalized_command (cmd_name)
+            inputs.extend (cmd.get_inputs())
+
+        return inputs
+
 
     # -- Predicates for sub-command list -------------------------------
 
@@ -505,37 +546,6 @@
         return self.distribution.has_data_files()
 
 
-    def get_outputs (self):
-        # This command doesn't have any outputs of its own, so just
-        # get the outputs of all its sub-commands.
-        outputs = []
-        for cmd_name in self.get_sub_commands():
-            cmd = self.get_finalized_command (cmd_name)
-            outputs.extend (cmd.get_outputs())
-
-        return outputs
-
-
-    def get_inputs (self):
-        # XXX gee, this looks familiar ;-(
-        inputs = []
-        for cmd_name in self.get_sub_commands():
-            cmd = self.get_finalized_command (cmd_name)
-            inputs.extend (cmd.get_inputs())
-
-        return inputs
-
-
-    def create_path_file (self):
-        filename = os.path.join (self.install_libbase,
-                                 self.path_file + ".pth")
-        if self.install_path_file:
-            self.execute (write_file,
-                          (filename, [self.extra_dirs]),
-                          "creating %s" % filename)
-        else:
-            self.warn("path file '%s' not created" % filename)
-
     # 'sub_commands': a list of commands this command might have to run to
     # get its work done.  See cmd.py for more info.
     sub_commands = [('install_lib',     has_lib),
