diff --git a/title.admin.inc b/title.admin.inc
index 05e23db..3cc7d24 100644
--- a/title.admin.inc
+++ b/title.admin.inc
@@ -66,6 +66,7 @@ function title_field_replacement_form_submit($form, &$form_state) {
   if ($form_state['values']['enabled'] != $form['enabled']['#default_value']) {
     if (title_field_replacement_toggle($form['#entity_type'], $form['#bundle'], $form['#field_name'])) {
       drupal_set_message(t('%field replaced with a field instance.', array('%field' => $form['#field_name'])));
+      title_field_replacement_batch_set($form['#entity_type'], $form['#bundle'], $form['#field_name']);
     }
     else {
       drupal_set_message(t('Field replacement removed.'));
diff --git a/title.module b/title.module
index 7b7ea0e..52a6516 100644
--- a/title.module
+++ b/title.module
@@ -169,7 +169,8 @@ function title_field_attach_load($entity_type, $entities, $age, $options) {
  */
 function title_entity_load($entities, $type) {
   foreach ($entities as &$entity) {
-    title_entity_sync($type, $entity);
+    // Synchronize values from the regular field unless we are intializing it.
+    title_entity_sync($type, $entity, NULL, empty($GLOBALS['title_field_replacement_init']));
   }
 }
 
@@ -180,9 +181,7 @@ function title_entity_load($entities, $type) {
  * synchronization will not be performed on entity load.
  */
 function title_entitycache_load($entities, $type) {
-  foreach ($entities as &$entity) {
-    title_entity_sync($type, $entity);
-  }
+  title_entity_load($entities, $type);
 }
 
 /**
@@ -258,6 +257,92 @@ function title_field_replacement_toggle($entity_type, $bundle, $legacy_field) {
 }
 
 /**
+ * Set a batch process to initialize replacing field values.
+ *
+ * @param $entity_type
+ *   The type of $entity.
+ * @param $bundle
+ *   The bundle the legacy field belongs to.
+ * @param $legacy_field
+ *   The name of the legacy field to be replaced.
+ */
+function title_field_replacement_batch_set($entity_type, $bundle, $legacy_field) {
+  $batch = array(
+    'title' => t('Replacing field values for %field', array('%field' => $legacy_field)),
+    'operations' => array(
+      array('title_field_replacement_batch', array($entity_type, $bundle, $legacy_field)),
+    ),
+  );
+  batch_set($batch);
+}
+
+/**
+ * Batch operation: initialize a batch of replacing field values.
+ */
+function title_field_replacement_batch($entity_type, $bundle, $legacy_field, &$context) {
+  if (empty($context['sandbox'])) {
+    $query = new EntityFieldQuery();
+    $total = $query
+      ->entityCondition('entity_type', $entity_type)
+      ->entityCondition('bundle', $bundle)
+      ->count()
+      ->execute();
+
+    $context['sandbox']['steps'] = 0;
+    $context['sandbox']['progress'] = 0;
+    $context['sandbox']['total'] = $total;
+  }
+
+  $step = 10;
+  $context['sandbox']['progress'] += title_field_replacement_init($entity_type, $bundle, $legacy_field, $step * $context['sandbox']['steps']++, $step);
+
+  if ($context['sandbox']['progress'] != $context['sandbox']['total']) {
+    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['total'];
+  }
+}
+
+/**
+ * Initialize a batch of replacing field values.
+ *
+ * @param $entity_type
+ *   The type of $entity.
+ * @param $bundle
+ *   The bundle the legacy field belongs to.
+ * @param $legacy_field
+ *   The name of the legacy field to be replaced.
+ * @param $start
+ *   The first entity from the result set to return.
+ * @param $length
+ *   The number of entities to return from the result set.
+ *
+ * @return
+ *   The number of entities processed.
+ */
+function title_field_replacement_init($entity_type, $bundle, $legacy_field, $start = 0, $length = 10) {
+  $info = entity_get_info($entity_type);
+  $query = new EntityFieldQuery();
+
+  $results = $query
+    ->entityCondition('entity_type', $entity_type)
+    ->entityCondition('bundle', $bundle)
+    ->range($start, $length)
+    ->propertyOrderBy($info['entity keys']['id'])
+    ->execute();
+
+  if (!empty($results[$entity_type])) {
+    $GLOBALS['title_field_replacement_init'] = TRUE;
+    $entities = entity_load($entity_type, array_keys($results[$entity_type]));
+    foreach ($entities as $id => $entity) {
+      field_attach_update($entity_type, $entity);
+    }
+    unset($GLOBALS['title_field_replacement_init']);
+    return count($results[$entity_type]);
+  }
+
+  return 0;
+}
+
+/**
  * Synchronize replaced fields with the regular field values.
  *
  * @param $entity_type
