diff --git a/domain.admin.inc b/domain.admin.inc
index fb69145..bd142a6 100644
--- a/domain.admin.inc
+++ b/domain.admin.inc
@@ -1145,3 +1145,61 @@ function theme_domain_overview_form($variables) {
   $output .= drupal_render_children($form);
   return $output;
 }
+
+/**
+ * Repairs and updates instances of domain_id 0 after the update to 7.x.3.
+ */
+function domain_repair_form($form, &$form_state) {
+  $list = domain_update_module_check();
+  if (empty($list)) {
+    $form['list'] = array(
+      '#markup' => '<p>' . t('No updates are required. <a href="!url">return to domain administration</a>.', array('!url' => url('admin/structure/domain'))) . '</p>',
+    );
+  }
+  else {
+    $form['intro'] = array(
+      '#markup' => '<p>' . t('The following modules have data that references domain_id 0 and will be updated:') . '</p>',
+    );
+    $form['list'] = array(
+      '#markup' => theme('item_list', array('items' => $list)),
+    );
+    $form['outro'] = array(
+      '#markup' => '<p>' . t('All records marked with domain_id 0 will be assigned to the default domain.') .'</p>',
+    );
+    $form['tables'] = array(
+      '#type' => 'value',
+      '#value' => array_keys($list),
+    );
+    $form['submit'] = array(
+      '#type' => 'submit',
+      '#value' => t('Update database tables'),
+    );
+  }
+  return $form;
+}
+
+/**
+ * Repairs references to domain_id 0.
+ */
+function domain_repair_form_submit($form, &$form_state) {
+  $tables = $form_state['values']['tables'];
+  domain_update_zero_records($tables);
+  drupal_set_message(t('!count database table(s) were updated.', array('!count' => count($form_state['values']['tables']))));
+  $form_state['redirect'] = 'admin/structure/domain';
+}
+
+/**
+ * Turns a domain_id of 0 into the default domain.
+ *
+ * @param $tables
+ *  An array of database tables to update.
+ */
+function domain_update_zero_records($tables) {
+  $default_id = domain_default_id();
+  foreach ($tables as $table) {
+    db_update($table)
+      ->fields(array('domain_id' => $default_id))
+      ->condition('domain_id', 0)
+      ->execute();
+  }
+}
diff --git a/domain.install b/domain.install
index 1e076d7..63c545f 100644
--- a/domain.install
+++ b/domain.install
@@ -318,3 +318,47 @@ function domain_update_7306(&$sandbox) {
 function domain_update_machine_name($subdomain) {
   return preg_replace('/[^a-z0-9_]+/', '_', $subdomain);
 }
+
+/**
+ * Checks module requirements.
+ */
+function domain_requirements($phase) {
+  if ($phase != 'runtime') {
+    return;
+  }
+
+  $message = array();
+  $severity = REQUIREMENT_ERROR;
+  // Ensure we have a primary domain.
+  $check = domain_default();
+  if ($check['domain_id'] == 0) {
+    $updated = t('set by an administrator');
+    if (user_access('administer domains')) {
+      $updated = l(t('set properly'), 'admin/structure/domain');
+    }
+    $message[] = t('The site has no primary domain and needs to be !updated.', array('!updated' => $updated));
+  }
+  // Check for domain_id 0.
+  $list = domain_update_module_check();
+  foreach($list as $module => $name) {
+    $updated = t('updated by an administrator');
+    if (user_access('administer domains')) {
+      $updated = l(t('updated for compatibility'), 'admin/structure/domain/repair');
+    }
+    $message[] = t('%module has a domain_id of 0 and needs to be !updated.', array('%module' => $name, '!updated' => $updated));
+  }
+
+  // Now report.
+  $t = get_t();
+  if (empty($message)) {
+    $severity = REQUIREMENT_OK;
+    $message[] = t('Module installed correctly.');
+  }
+  $requirements['domain'] = array(
+    'title' => $t('Domain Access'),
+    'value' => theme('item_list', array('items' => $message)),
+    'severity' => $severity,
+  );
+
+  return $requirements;
+}
diff --git a/domain.module b/domain.module
index 4b96767..890b6be 100644
--- a/domain.module
+++ b/domain.module
@@ -289,6 +289,14 @@ function domain_menu() {
     'file' => 'domain.admin.inc',
     'weight' => 50,
   );
+  $items['admin/structure/domain/repair'] = array(
+    'title' => 'Domain update database',
+    'access arguments' => array('administer domains'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('domain_repair_form'),
+    'type' => MENU_CALLBACK,
+    'file' => 'domain.admin.inc',
+  );
   return $items;
 }
 
@@ -1169,7 +1177,6 @@ function domain_set_primary_domain() {
       'valid' => 1,
       'is_default' => 1,
       'machine_name' => domain_machine_name($root),
-      'export_status' => DOMAIN_EXPORT_STATUS_DATABASE,
     );
     drupal_write_record('domain_export', $domain);
     drupal_write_record('domain', $domain);
@@ -3276,3 +3283,49 @@ function domain_features_selection($data) {
   return $list;
 }
 
+/**
+ * Checks to see if any dependent modules have a domain_id 0 record left.
+ *
+ * @return
+ *  An array of matching modules, in the format 'machine_name' => Human Name.
+ */
+function domain_update_module_check() {
+  $list = array();
+  $modules = system_rebuild_module_data();
+  $dependencies = $modules['domain']->required_by;
+  $enabled_dependencies = array_intersect_key($dependencies, module_list());
+  if (empty($enabled_dependencies)) {
+    return $list;
+  }
+  foreach($enabled_dependencies as $module => $data) {
+    module_load_install($module);
+    if ($schema = module_invoke($module, 'schema')) {
+      if (domain_test_schema($schema)) {
+        $list[$module] = $modules[$module]->info['name'];
+      }
+    }
+  }
+  return $list;
+}
+
+
+/**
+ * Checks a dependent module's tables for a domain_id of 0.
+ *
+ * @param $tables
+ *  An array of table schemas, using the SchemaAPI.
+ *
+ * @return
+ *  TRUE if a 0 record exists; FALSE if not.
+ */
+function domain_test_schema($tables) {
+  foreach ($tables as $name => $table) {
+    if (isset($table['fields']['domain_id']) && $table['fields']['domain_id']['type'] == 'int') {
+      $check = db_query("SELECT COUNT(1) FROM {$name} WHERE domain_id = 0")->fetchField();
+      if ($check) {
+        return TRUE;
+      }
+    }
+  }
+  return FALSE;
+}
