Index: includes/install.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/install.inc,v
retrieving revision 1.76
diff -u -r1.76 install.inc
--- includes/install.inc	16 Nov 2008 23:44:47 -0000	1.76
+++ includes/install.inc	23 Nov 2008 10:45:40 -0000
@@ -409,7 +409,7 @@
  */
 function drupal_get_install_files($module_list = array()) {
   $installs = array();
-  foreach ($module_list as $module) {
+  foreach ($module_list as $module => $info) {
     $installs = array_merge($installs, drupal_system_listing('/'. $module . '.install$/', 'modules'));
   }
   return $installs;
@@ -490,7 +490,7 @@
  */
 function drupal_install_modules($module_list = array()) {
   $files = module_rebuild_cache();
-  $module_list = array_flip(array_values($module_list));
+  $module_list = array_flip(array_keys($module_list));
   do {
     $moved = FALSE;
     foreach ($module_list as $module => $weight) {
Index: includes/module.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/module.inc,v
retrieving revision 1.133
diff -u -r1.133 module.inc
--- includes/module.inc	11 Nov 2008 22:39:58 -0000	1.133
+++ includes/module.inc	23 Nov 2008 10:45:40 -0000
@@ -21,7 +21,7 @@
  * Load all the modules that have been enabled in the system table.
  */
 function module_load_all() {
-  foreach (module_list(TRUE, FALSE) as $module) {
+  foreach (module_list(TRUE, FALSE) as $module => $info) {
     drupal_load('module', $module);
   }
 }
@@ -43,8 +43,8 @@
  *   (Optional) Override the module list with the given modules. Stays until the
  *   next call with $refresh = TRUE.
  * @return
- *   An associative array whose keys and values are the names of all loaded
- *   modules.
+ *   An associative array whose keys are the names of all loaded modules, and
+ *   whose values are information regarding the modules.
  */
 function module_list($refresh = FALSE, $bootstrap = TRUE, $sort = FALSE, $fixed_list = NULL) {
   static $list = array(), $sorted_list;
@@ -55,20 +55,20 @@
     if ($fixed_list) {
       foreach ($fixed_list as $name => $module) {
         drupal_get_filename('module', $name, $module['filename']);
-        $list[$name] = $name;
+        $list[$name] = $module;
       }
     }
     else {
       if ($bootstrap) {
-        $result = db_query("SELECT name, filename FROM {system} WHERE type = 'module' AND status = 1 AND bootstrap = 1 ORDER BY weight ASC, filename ASC");
+        $result = db_query("SELECT name, filename, info FROM {system} WHERE type = 'module' AND status = 1 AND bootstrap = 1 ORDER BY weight ASC, filename ASC");
       }
       else {
-        $result = db_query("SELECT name, filename FROM {system} WHERE type = 'module' AND status = 1 ORDER BY weight ASC, filename ASC");
+        $result = db_query("SELECT name, filename, info FROM {system} WHERE type = 'module' AND status = 1 ORDER BY weight ASC, filename ASC");
       }
       while ($module = db_fetch_object($result)) {
         if (file_exists($module->filename)) {
           drupal_get_filename('module', $module->name, $module->filename);
-          $list[$module->name] = $module->name;
+          $list[$module->name] = unserialize($module->info);
         }
       }
     }
@@ -84,6 +84,19 @@
 }
 
 /**
+ * Retrieve information regarding the given module.
+ *
+ * @param $module
+ *   (Optional) The module of which to obtain information for.
+ * @return
+ *   An associative array of information regarding the module.
+ */
+function module_info($module) {
+  $module_list = module_list();
+  return isset($module_list[$module]) ? $module_list[$module] : NULL;
+}
+
+/**
  * Rebuild the database cache of module files.
  *
  * @return
@@ -269,8 +282,7 @@
  * the system table.
  */
 function module_load_all_includes($type, $name = NULL) {
-  $modules = module_list();
-  foreach ($modules as $module) {
+  foreach (module_list() as $module => $info) {
     module_load_include($type, $module, $name);
   }
 }
Index: modules/help/help.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/help/help.admin.inc,v
retrieving revision 1.7
diff -u -r1.7 help.admin.inc
--- modules/help/help.admin.inc	26 Oct 2008 18:06:38 -0000	1.7
+++ modules/help/help.admin.inc	23 Nov 2008 10:45:42 -0000
@@ -22,7 +22,7 @@
 function help_page($name) {
   $output = '';
   if (module_hook($name, 'help')) {
-    $module = drupal_parse_info_file(drupal_get_path('module', $name) . '/' . $name . '.info');
+    $module = module_info($name);
     drupal_set_title($module['name']);
 
     $temp = module_invoke($name, 'help', "admin/help#$name", drupal_help_arg());
Index: modules/user/user.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.admin.inc,v
retrieving revision 1.33
diff -u -r1.33 user.admin.inc
--- modules/user/user.admin.inc	16 Nov 2008 15:10:49 -0000	1.33
+++ modules/user/user.admin.inc	23 Nov 2008 10:45:44 -0000
@@ -512,7 +512,7 @@
   $hide_descriptions = !system_admin_compact_mode();
   foreach (module_implements('perm') as $module) {
     if ($permissions = module_invoke($module, 'perm')) {
-      $info = drupal_parse_info_file(drupal_get_path('module', $module) . "/$module.info");
+      $info = module_info($module);
       $form['permission'][] = array(
         '#markup' => $info['name'],
         );
Index: modules/system/system.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v
retrieving revision 1.105
diff -u -r1.105 system.admin.inc
--- modules/system/system.admin.inc	20 Nov 2008 06:56:17 -0000	1.105
+++ modules/system/system.admin.inc	23 Nov 2008 10:45:43 -0000
@@ -1040,7 +1040,7 @@
 
   // Construct the hidden form elements and list items.
   foreach (array_filter($storage['uninstall']) as $module => $value) {
-    $info = drupal_parse_info_file(dirname(drupal_get_filename('module', $module)) . '/' . $module . '.info');
+    $info = module_info($module);
     $uninstall[] = $info['name'];
     $form['uninstall'][$module] = array('#type' => 'hidden',
       '#value' => 1,
