diff --git a/recruiter_resume/recruiter_resume.install b/recruiter_resume/recruiter_resume.install
new file mode 100644
index 0000000..2798da5
--- /dev/null
+++ b/recruiter_resume/recruiter_resume.install
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Migrate firstname, lastname data from address field to separate text fields.
+ *
+ * Implements hook_update_N().
+ */
+function recruiter_resume_update_7100() {
+  $addresses = db_select('field_data_field_resume_address', 'a')
+    ->fields('a', array('entity_type', 'bundle', 'deleted', 'entity_id', 'revision_id', 'language', 'delta', 'field_resume_address_first_name', 'field_resume_address_last_name'))
+    ->execute();
+
+  foreach ($addresses as $address) {
+    $fields = array(
+      'entity_type' => $address->entity_type,
+      'bundle' => $address->bundle,
+      'deleted' => $address->deleted,
+      'entity_id' => $address->entity_id,
+      'revision_id' => $address->revision_id,
+      'language' => $address->language,
+      'delta' => $address->delta,
+    );
+
+    recruiter_resume_update_7100_insert(
+      'field_data_field_resume_firstname',
+      $fields + array('field_resume_firstname_value' => $address->field_resume_address_first_name)
+    );
+    recruiter_resume_update_7100_insert(
+      'field_revision_field_resume_firstname',
+      $fields + array('field_resume_firstname_value' => $address->field_resume_address_first_name)
+    );
+
+    recruiter_resume_update_7100_insert(
+      'field_data_field_resume_lastname',
+      $fields + array('field_resume_lastname_value' => $address->field_resume_address_last_name)
+    );
+    recruiter_resume_update_7100_insert(
+      'field_revision_field_resume_lastname',
+      $fields + array('field_resume_lastname_value' => $address->field_resume_address_last_name)
+    );
+  }
+  return t('Resume firstname and lastname extracted from address field.');
+}
+
+function recruiter_resume_update_7100_insert($table, $fields) {
+  // Only insert if value doesn't exist.
+  try {
+    $query = db_select($table, 'f')
+      ->fields('f', array('entity_id'))
+      ->condition('entity_id', $fields['entity_id'], '=')
+      ->execute();
+    if ($query->rowCount() == 0) {
+      db_insert($table)->fields($fields)->execute();
+    }
+  }
+  catch (Exception $e) {
+    throw new DrupalUpdateException(t('Unable to migrate firstname, lastname data from address field to separate text fields: !msg.', array('!msg' => $e->getMessage())));
+  }
+}
diff --git a/recruiter_resume/recruiter_resume.module b/recruiter_resume/recruiter_resume.module
index 5e9f5a5..7ab40a3 100644
--- a/recruiter_resume/recruiter_resume.module
+++ b/recruiter_resume/recruiter_resume.module
@@ -81,56 +81,3 @@ function recruiter_resume_preprocess(&$variables, $hook) {
     }
   }
 }
-
-/**
- * Migrate firstname, lastname data from address field to separate text fields.
- *
- * Implements hook_update_N().
- */
-function recruiter_resume_update_7100() {
-  $addresses = db_select('field_data_field_resume_address', 'a')
-    ->fields('a', array('entity_type', 'bundle', 'deleted', 'entity_id', 'revision_id', 'language', 'delta', 'field_resume_address_first_name', 'field_resume_address_last_name'))
-    ->execute();
-
-  foreach ($addresses as $address) {
-    $fields = array(
-      'entity_type' => $address->entity_type,
-      'bundle' => $address->bundle,
-      'deleted' => $address->deleted,
-      'entity_id' => $address->entity_id,
-      'revision_id' => $address->revision_id,
-      'language' => $address->language,
-      'delta' => $address->delta,
-    );
-
-    recruiter_resume_update_7100_insert(
-      'field_data_field_resume_firstname',
-      $fields + array('field_resume_firstname_value' => $address->field_resume_address_first_name)
-    );
-    recruiter_resume_update_7100_insert(
-      'field_revision_field_resume_firstname',
-      $fields + array('field_resume_firstname_value' => $address->field_resume_address_first_name)
-    );
-
-    recruiter_resume_update_7100_insert(
-      'field_data_field_resume_lastname',
-      $fields + array('field_resume_lastname_value' => $address->field_resume_address_last_name)
-    );
-    recruiter_resume_update_7100_insert(
-      'field_revision_field_resume_lastname',
-      $fields + array('field_resume_lastname_value' => $address->field_resume_address_last_name)
-    );
-  }
-  return t('Resume firstname and lastname extracted from address field.');
-}
-
-function recruiter_resume_update_7100_insert($table, $fields) {
-  // Only insert if value doesn't exist.
-  $query = db_select($table, 'f')
-    ->fields('f', array('entity_id'))
-    ->condition('entity_id', $fields['entity_id'], '=')
-    ->execute();
-  if ($query->rowCount() == 0) {
-    db_insert($table)->fields($fields)->execute();
-  }
-}
