diff --git includes/database/database.inc includes/database/database.inc
index 62384e5..7b0788d 100644
--- includes/database/database.inc
+++ includes/database/database.inc
@@ -2425,13 +2425,15 @@ function db_field_names($fields) {
 /**
  * Check if an index exists.
  *
+ * @param $table
+ *   The name of a table to check.
  * @param $name
  *   Index name.
  * @return
  *   TRUE if the given index exists, otherwise FALSE.
  */
-function db_index_exists($name) {
-  return Database::getConnection()->schema()->indexExists($name);
+function db_index_exists($table, $name) {
+  return Database::getConnection()->schema()->indexExists($table, $name);
 }
 
 /**
diff --git includes/update.inc includes/update.inc
index 76b1135..3bb207c 100644
--- includes/update.inc
+++ includes/update.inc
@@ -275,25 +275,25 @@ function update_fix_d7_requirements() {
      'not null' => TRUE,
      'default' => -1)
     );
-    db_change_field('system', 'status', 'status', array(
-      'type' => 'int', 'not null' => TRUE, 'default' => 0));
-    db_change_field('system', 'weight', 'weight', array(
-      'type' => 'int', 'not null' => TRUE, 'default' => 0));
-    db_change_field('system', 'bootstrap', 'bootstrap', array(
-      'type' => 'int', 'not null' => TRUE, 'default' => 0));
+    db_change_field('system', 'status', 'status', array('type' => 'int', 'not null' => TRUE, 'default' => 0));
+    db_change_field('system', 'weight', 'weight', array('type' => 'int', 'not null' => TRUE, 'default' => 0));
+    db_change_field('system', 'bootstrap', 'bootstrap', array('type' => 'int', 'not null' => TRUE, 'default' => 0));
     // Drop and recreate 6.x indexes.
     db_drop_index('system', 'bootstrap');
-    db_add_index('system', 'bootstrap', array(
-      'status', 'bootstrap', array('type', 12), 'weight', 'name'));
+    db_add_index('system', 'bootstrap', array('status', 'bootstrap', array('type', 12), 'weight', 'name'));
 
     db_drop_index('system' ,'modules');
-    db_add_index('system', 'modules', array(array(
-      'type', 12), 'status', 'weight', 'name'));
+    db_add_index('system', 'modules', array(array('type', 12), 'status', 'weight', 'name'));
 
-    db_drop_index('system', 'type_name');
+    if (db_index_exists('system', 'type_name')) {
+      db_drop_index('system', 'type_name');
+    }
     db_add_index('system', 'type_name', array(array('type', 12), 'name'));
+
     // Add 7.x indexes.
-    db_add_index('system', 'system_list', array('weight', 'name'));
+    if (!db_index_exists('system', 'system_list')) {
+      db_add_index('system', 'system_list', array('weight', 'name'));
+    }
 
     // Add the cache_path table.
     $schema['cache_path'] = drupal_get_schema_unprocessed('system', 'cache');
@@ -302,21 +302,33 @@ function update_fix_d7_requirements() {
 
     // system_update_7042() renames columns, but these are needed to bootstrap.
     // Add empty columns for now.
-    db_add_field('url_alias', 'source', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
-    db_add_field('url_alias', 'alias', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
+    if (!db_column_exists('url_alias', 'source')) {
+      db_add_field('url_alias', 'source', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
+    }
+    if (!db_column_exists('url_alias', 'alias')) {
+      db_add_field('url_alias', 'alias', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
+    }
 
     // Add new columns to {menu_router}.
-    db_add_field('menu_router', 'delivery_callback', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
-    db_add_field('menu_router', 'context', array(
-      'description' => 'Only for local tasks (tabs) - the context of a local task to control its placement.',
-      'type' => 'int',
-      'not null' => TRUE,
-      'default' => 0,
-    ));
+    if (!db_column_exists('menu_router', 'delivery_callback')) {
+      db_add_field('menu_router', 'delivery_callback', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
+    }
+    if (!db_column_exists('menu_router', 'context')) {
+      db_add_field('menu_router', 'context', array(
+        'description' => 'Only for local tasks (tabs) - the context of a local task to control its placement.',
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ));
+    }
     db_drop_index('menu_router', 'tab_parent');
     db_add_index('menu_router', 'tab_parent', array(array('tab_parent', 64), 'weight', 'title'));
-    db_add_field('menu_router', 'theme_callback', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
-    db_add_field('menu_router', 'theme_arguments', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
+    if (!db_column_exists('menu_router', 'theme_callback')) {
+      db_add_field('menu_router', 'theme_callback', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
+    }
+    if (!db_column_exists('menu_router', 'theme_arguments')) {
+      db_add_field('menu_router', 'theme_arguments', array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => ''));
+    }
 
     // Add the role_permission table.
     $schema['role_permission'] = array(
@@ -385,6 +397,8 @@ function update_fix_d7_requirements() {
         'hook' => array('type', 'weight', 'module'),
       ),
     );
+    db_create_table('registry', $schema['registry']);
+
     $schema['registry_file'] = array(
       'fields' => array(
         'filename'   => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE),
@@ -393,7 +407,6 @@ function update_fix_d7_requirements() {
       ),
       'primary key' => array('filename'),
     );
-    db_create_table('registry', $schema['registry']);
     db_create_table('registry_file', $schema['registry_file']);
 
     $schema['date_format_type'] = array(
@@ -421,6 +434,7 @@ function update_fix_d7_requirements() {
       ),
       'primary key' => array('type'),
     );
+    db_create_table('date_format_type', $schema['date_format_type']);
 
     $schema['date_formats'] = array(
       'description' => 'Stores configured date formats.',
@@ -454,6 +468,7 @@ function update_fix_d7_requirements() {
       'primary key' => array('dfid'),
       'unique keys' => array('formats' => array('format', 'type')),
     );
+    db_create_table('date_formats', $schema['date_formats']);
 
     $schema['date_format_locale'] = array(
       'description' => 'Stores configured date formats for each locale.',
@@ -479,11 +494,14 @@ function update_fix_d7_requirements() {
       ),
       'primary key' => array('type', 'language'),
     );
-
-    db_create_table('date_format_type', $schema['date_format_type']);
-    db_create_table('date_formats', $schema['date_formats']);
     db_create_table('date_format_locale', $schema['date_format_locale']);
 
+    // Check for queue table, if found rename it, it has a different
+    // schema than D7 but could be useful for upgrading modules.
+    if (db_table_exists('queue')) {
+      db_rename_table('queue', 'queue_old');
+    }
+
     // Add the queue table.
     $schema['queue'] = array(
       'description' => 'Stores items in queues.',
@@ -529,6 +547,16 @@ function update_fix_d7_requirements() {
     );
     db_create_table('queue', $schema['queue']);
 
+    // Check for sequences table, if found rename it, it has a different
+    // schema than D7 but could be useful for upgrading modules.
+    if (db_table_exists('sequences')) {
+      db_rename_table('sequences', 'sequences_old');
+    }
+
+    // Rename old sequences table from D5, if it still exists.
+    if (db_column_exists('sequences', 'name')) {
+      db_rename_table('sequences', 'sequences_old');
+    }
     // Create the sequences table.
     $schema['sequences'] = array(
       'description' => 'Stores IDs.',
@@ -543,12 +571,16 @@ function update_fix_d7_requirements() {
       'primary key' => array('value'),
     );
     db_create_table('sequences', $schema['sequences']);
+
     // Initialize the table with the maximum current increment of the tables
     // that will rely on it for their ids.
-    $max_aid = db_query('SELECT MAX(aid) FROM {actions_aid}')->fetchField();
-    $max_uid = db_query('SELECT MAX(uid) FROM {users}')->fetchField();
-    $max_batch_id = db_query('SELECT MAX(bid) FROM {batch}')->fetchField();
-    db_insert('sequences')->fields(array('value' => max($max_aid, $max_uid, $max_batch_id)))->execute();
+    $count = db_query('SELECT 1 FROM {sequences}');
+    if (!$count) {
+      $max_aid = db_query('SELECT MAX(aid) FROM {actions_aid}')->fetchField();
+      $max_uid = db_query('SELECT MAX(uid) FROM {users}')->fetchField();
+      $max_batch_id = db_query('SELECT MAX(bid) FROM {batch}')->fetchField();
+      db_insert('sequences')->fields(array('value' => max($max_aid, $max_uid, $max_batch_id)))->execute();
+    }
 
     // Add column for locale context.
     if (db_table_exists('locales_source')) {
diff --git modules/system/system.install modules/system/system.install
index 473af73..db90983 100644
--- modules/system/system.install
+++ modules/system/system.install
@@ -1623,9 +1623,7 @@ function system_update_6052() {
  * Add a {system} index on type and name.
  */
 function system_update_6053() {
-  $ret = array();
-  db_add_index($ret, 'system', 'type_name', array(array('type', 12), 'name'));
-  return $ret;
+  // Update moved to update_fix_d7_requirements().
 }
 
 /**
@@ -2017,11 +2015,7 @@ function system_update_7017() {
  * Shorten the {system}.type column and modify indexes.
  */
 function system_update_7018() {
-  db_drop_index('system', 'modules');
-  db_drop_index('system', 'type_name');
-  db_change_field('system', 'type', 'type', array('type' => 'varchar', 'length' => 12, 'not null' => TRUE, 'default' => ''));
-  db_add_index('system', 'type_name', array('type', 'name'));
-  db_add_index('system', 'system_list', array('weight', 'name'));
+  // Update moved to update_fix_d7_requirements().
 }
 
 /**
diff --git update.php update.php
index 988024e..1d67447 100644
--- update.php
+++ update.php
@@ -323,7 +323,8 @@ function update_check_requirements() {
 
 // Some unavoidable errors happen because the database is not yet up-to-date.
 // Our custom error handler is not yet installed, so we just suppress them.
-ini_set('display_errors', FALSE);
+// @todo uncomment when out of alpha.
+//ini_set('display_errors', FALSE);
 
 // We prepare a minimal bootstrap for the update requirements check to avoid
 // reaching the PHP memory limit.
