=== modified file 'includes/install.inc'
--- includes/install.inc	2007-11-30 12:19:10 +0000
+++ includes/install.inc	2007-12-03 14:07:08 +0000
@@ -22,8 +22,10 @@ define('FILE_NOT_EXECUTABLE', 128);
  * Initialize the update system by loading all installed module's .install files.
  */
 function drupal_load_updates() {
-  foreach (module_list() as $module) {
-    module_load_install($module);
+  foreach (drupal_get_installed_schema_version(NULL, FALSE, TRUE) as $module => $schema_version) {
+    if ($schema_version > -1) {
+      module_load_install($module);
+    }
   }
 }
 
@@ -61,7 +63,7 @@ function drupal_get_schema_versions($mod
  * @return
  *   The currently installed schema version.
  */
-function drupal_get_installed_schema_version($module, $reset = FALSE) {
+function drupal_get_installed_schema_version($module, $reset = FALSE, $array = FALSE) {
   static $versions = array();
 
   if ($reset) {
@@ -76,7 +78,7 @@ function drupal_get_installed_schema_ver
     }
   }
 
-  return $versions[$module];
+  return $array ? $versions : $versions[$module];
 }
 
 /**

=== modified file 'modules/system/system.install'
--- modules/system/system.install	2007-11-30 18:11:29 +0000
+++ modules/system/system.install	2007-12-03 14:05:45 +0000
@@ -1040,6 +1040,10 @@ function system_schema() {
  * @{
  */
 
+function system_update_last_removed() {
+  return 179;
+}
+
 function system_update_180() {
   $ret = array();
 

=== modified file 'update.php'
--- update.php	2007-11-30 12:19:10 +0000
+++ update.php	2007-12-03 14:05:57 +0000
@@ -334,12 +334,14 @@ function update_script_selection_form() 
   // Ensure system.module's updates appear first
   $form['start']['system'] = array();
 
-  foreach (module_list() as $module) {
+  $modules = drupal_get_installed_schema_version(NULL, FALSE, TRUE);
+  foreach ($modules as $module => $default) {
     $updates = drupal_get_schema_versions($module);
+    // module_invoke returns NULL for nonexisting hooks, so this checks both
+    // whether module is installed and whether is safe to update module.
     if ($updates !== FALSE) {
       $updates = drupal_map_assoc($updates);
       $updates[] = 'No updates available';
-      $default = drupal_get_installed_schema_version($module);
       foreach (array_keys($updates) as $update) {
         if ($update > $default) {
           $default = $update;

