diff --git modules/system/system.install modules/system/system.install
index c1ab41c..d4bfd59 100644
--- modules/system/system.install
+++ modules/system/system.install
@@ -1739,27 +1739,29 @@ function system_update_7006() {
 function system_update_7007() {
   $ret = array();
 
-  $schema['role_permission'] = array(
-    'fields' => array(
-      'rid' => array(
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => TRUE,
+  if (!db_table_exists('role_permission')) {
+    $schema['role_permission'] = array(
+      'fields' => array(
+        'rid' => array(
+          'type' => 'int',
+          'unsigned' => TRUE,
+          'not null' => TRUE,
+        ),
+        'permission' => array(
+          'type' => 'varchar',
+          'length' => 64,
+          'not null' => TRUE,
+          'default' => '',
+        ),
+      ),
+      'primary key' => array('rid', 'permission'),
+      'indexes' => array(
+        'permission' => array('permission'),
       ),
-      'permission' => array(
-        'type' => 'varchar',
-        'length' => 64,
-        'not null' => TRUE,
-        'default' => '',
-      ),
-    ),
-    'primary key' => array('rid', 'permission'),
-    'indexes' => array(
-      'permission' => array('permission'),
-    ),
-  );
+    );
 
-  db_create_table($ret, 'role_permission', $schema['role_permission']);
+    db_create_table($ret, 'role_permission', $schema['role_permission']);
+  }
 
   // Copy the permissions from the old {permission} table to the new {role_permission} table.
   $result = db_query("SELECT rid, perm FROM {permission} ORDER BY rid ASC");
diff --git update.php update.php
index bb4413e..54725ff 100644
--- update.php
+++ update.php
@@ -528,18 +528,15 @@ function update_prepare_d7_bootstrap() {
   drupal_install_init_database();
   spl_autoload_unregister('drupal_autoload_class');
   spl_autoload_unregister('drupal_autoload_interface');
-  // The new {blocked_ips} table is used in Drupal 7 to store a list of
-  // banned IP addresses. If this table doesn't exist then we are still
-  // running on a Drupal 6 database, so suppress the unavoidable errors
-  // that occur.
-  try {
-    drupal_bootstrap(DRUPAL_BOOTSTRAP_ACCESS);
-  }
-  catch (Exception $e) {
-    if (db_table_exists('blocked_ips')) {
-      throw $e;
-    }
+
+  if (!db_table_exists('blocked_ips')) {
+    global $conf;
+    
+    $conf = isset($conf) ? array() : $conf;
+    $conf+= array('blocked_ips' => array());
   }
+  
+  drupal_bootstrap(DRUPAL_BOOTSTRAP_ACCESS);
 }
 
 /**
@@ -567,6 +564,9 @@ function update_fix_d7_requirements() {
     $schema['cache_path'] = drupal_get_schema_unprocessed('system', 'cache');
     $schema['cache_path']['description'] = 'Cache table used for path alias lookups.';
     db_create_table($ret, 'cache_path', $schema['cache_path']);
+    
+    $schema['role_permission'] = drupal_get_schema_unprocessed('user', 'role_permission');
+    db_create_table($ret, 'role_permission', $schema['role_permission']);
     variable_set('update_d7_requirements', TRUE);
 
     // Add column for locale context.
