diff --git a/modules/content_migrate/content_migrate.module b/modules/content_migrate/content_migrate.module
index f088150..7cbe6f9 100644
--- a/modules/content_migrate/content_migrate.module
+++ b/modules/content_migrate/content_migrate.module
@@ -137,6 +137,7 @@ function content_migrate_old_columns($field_value, $instance_value) {
   }
   return $columns;
 }
+
 /**
  * Helper function for figuring out column names
  * to be used when storing D7 field data.
@@ -161,64 +162,6 @@ function content_migrate_new_columns($field) {
 }
 
 /**
- * Implements hook_content_migrate_field_alter().
- * 
- * Use this to tweak the conversion of field settings
- * from the D6 style to the D7 style for specific
- * situations not handled by basic conversion,
- * as when field types or settings are changed.
- */
-function content_migrate_content_migrate_field_alter(&$field_value, $instance_value) {
-
-  module_load_include('inc', 'content_migrate', 'modules/content_migrate.filefield');
-  content_migrate_filefield_field_alter($field_value, $instance_value);
-
-  module_load_include('inc', 'content_migrate', 'modules/content_migrate.text');
-  content_migrate_text_field_alter($field_value, $instance_value);
-
-  module_load_include('inc', 'content_migrate', 'modules/content_migrate.number');
-  content_migrate_number_field_alter($field_value, $instance_value);
-
-}
-
-/**
- * Implements hook_content_migrate_instance_alter().
- * 
- * Use this to tweak the conversion of instance or widget settings
- * from the D6 style to the D7 style for specific
- * situations not handled by basic conversion, as when
- * formatter or widget names or settings are changed.
- */
-function content_migrate_content_migrate_instance_alter(&$instance_value, $field_value) {
-
-  module_load_include('inc', 'content_migrate', 'modules/content_migrate.filefield');
-  content_migrate_filefield_instance_alter($instance_value, $field_value);
-
-  module_load_include('inc', 'content_migrate', 'modules/content_migrate.text');
-  content_migrate_text_instance_alter($instance_value, $field_value);
-
-  module_load_include('inc', 'content_migrate', 'modules/content_migrate.number');
-  content_migrate_number_instance_alter($instance_value, $field_value);
-
-  module_load_include('inc', 'content_migrate', 'modules/content_migrate.optionwidgets');
-  content_migrate_optionwidgets_instance_alter($instance_value, $field_value); 
-
-}
-
-
-/**
- * Implements hook_content_migrate_data_record_alter().
- *
- * Tweaks individual records in a field.
- */
-function content_migrate_content_migrate_data_record_alter(&$record, $field, $instance) {
-
-  module_load_include('inc', 'content_migrate', 'modules/content_migrate.filefield');
-  content_migrate_filefield_data_record_alter($record, $field, $instance);
-
-}
-
-/**
  * Helper function for migrating D6-style allowed values into D7 arrays.
  *
  * We could just use list_extract_allowed_values() for this, but we don't
@@ -244,12 +187,6 @@ function content_migrate_content_migrate_data_record_alter(&$record, $field, $in
 function content_migrate_extract_allowed_values($legacy_values, $field_type) {
   $allowed_values = array();
 
-  if ($field_type == 'list_boolean') {
-    // Initialize these so the order is proper, even if both keys aren't
-    // defined in the legacy string.
-    $allowed_values = array(0 => 0, 1 => 1);
-  }
-
   if (!empty($legacy_values)) {
     foreach (explode("\n", $legacy_values) as $value) {
       $value = trim($value);
@@ -264,5 +201,38 @@ function content_migrate_extract_allowed_values($legacy_values, $field_type) {
     }
   }
 
+  // Fix boolean fields. In D6 the boolean selector used the first value as the
+  // 'no' option, the second as the 'yes' option; if there was only one value
+  // the field did not work correctly and it was not possible to save a 'yes'
+  // value. As a result, it is safe to always use the first value as 'no' and
+  // the second value as 'yes'.
+  if ($field_type == 'list_boolean') {
+    // Work with a copy of the fields.
+    $new_values = $allowed_values;
+
+    // D7 requires boolean fields to have the keys 0 and 1. Also save the
+    // partially converted legacy data from above.
+    $allowed_values = array(
+      0 => 0,
+      1 => 1,
+      'legacy_values' => $new_values,
+    );
+
+    // Get the keys of the converted data.
+    $keys = array_keys($new_values);
+
+    // Replace the 'no' value. If no value was found, it will default to '0'.
+    if (!empty($keys)) {
+      $key = array_shift($keys);
+      $allowed_values[0] = $new_values[$key];
+    }
+
+    // Replace the 'yes' value. If no value was found, it will default to '1'.
+    if (!empty($keys)) {
+      $key = array_shift($keys);
+      $allowed_values[1] = $new_values[$key];
+    }
+  }
+
   return $allowed_values;
 }
diff --git a/modules/content_migrate/includes/content_migrate.admin.inc b/modules/content_migrate/includes/content_migrate.admin.inc
index afe3124..bd18e78 100644
--- a/modules/content_migrate/includes/content_migrate.admin.inc
+++ b/modules/content_migrate/includes/content_migrate.admin.inc
@@ -4,6 +4,13 @@
  * Code to process field data migration, moved into a separate file for efficiency.
  */
 
+// Load the include files for each supported module. It is safe to do this here
+// as this file is loaded for all actual processing.
+include_once(dirname(__FILE__) . '/../modules/content_migrate.file.inc');
+include_once(dirname(__FILE__) . '/../modules/content_migrate.number.inc');
+include_once(dirname(__FILE__) . '/../modules/content_migrate.options.inc');
+include_once(dirname(__FILE__) . '/../modules/content_migrate.text.inc');
+
 /**
  * Determine which fields can be migrated, have already been migrated, and are
  * unable to be migrated due to missing modules.
@@ -392,7 +399,8 @@ function _content_migrate_batch_process_migrate_data($field_name, &$context) {
     $result = $query->execute();
 
     foreach ($result as $record) {
-  
+      module_load_include('inc', 'content_migrate', 'modules/content_migrate.' . $field['module']);
+
       // Let modules alter this before the insert.
       drupal_alter('content_migrate_data_record', $record, $field, $instance);
 
diff --git a/modules/content_migrate/includes/content_migrate.values.inc b/modules/content_migrate/includes/content_migrate.values.inc
index c3ba4e5..7519829 100644
--- a/modules/content_migrate/includes/content_migrate.values.inc
+++ b/modules/content_migrate/includes/content_migrate.values.inc
@@ -264,4 +264,4 @@ function _content_migrate_get_instance_values($bundle = NULL, $field_name = NULL
     return $instance_values['fields'][$field_name];
   }
   return $instance_values;
-}
\ No newline at end of file
+}
diff --git a/modules/content_migrate/modules/content_migrate.filefield.inc b/modules/content_migrate/modules/content_migrate.file.inc
similarity index 95%
rename from modules/content_migrate/modules/content_migrate.filefield.inc
rename to modules/content_migrate/modules/content_migrate.file.inc
index 61fcc7e..bb70372 100644
--- a/modules/content_migrate/modules/content_migrate.filefield.inc
+++ b/modules/content_migrate/modules/content_migrate.file.inc
@@ -1,8 +1,7 @@
 <?php
 /**
- * @file content_migrate.filefield.inc
- * Code to implement hook_content_migrate_field_alter, content_migrate_instance_alter() and content_migrate_data_record_alter()
- * on behalf of the former filefield and imagefield modules, moved into a separate file for efficiency.
+ * @file content_migrate.file.inc
+ * Code to implement Content Migrate hooks on behalf of the File module.
  */
 
 /**
@@ -13,7 +12,7 @@
  * situations not handled by basic conversion,
  * as when field types or settings are changed.
  */
-function content_migrate_filefield_field_alter(&$field_value, $instance_value) {
+function file_content_migrate_field_alter(&$field_value, $instance_value) {
 
   // There are a bunch of custom imagefield widgets. If they at least start the widget name with 'imagefield' this will work.
   if (substr($instance_value['widget']['type'], 0, 10) == 'imagefield') {
@@ -46,7 +45,7 @@ function content_migrate_filefield_field_alter(&$field_value, $instance_value) {
  * situations not handled by basic conversion, as when
  * formatter or widget names or settings are changed.
  */
-function content_migrate_filefield_instance_alter(&$instance_value, $field_value) {
+function file_content_migrate_instance_alter(&$instance_value, $field_value) {
   // Translate formatters.
   // There are a bunch of custom imagefield / filefield widgets. If they at
   // least start the widget name with 'imagefield' / 'filefield', we can detect
@@ -202,7 +201,7 @@ function content_migrate_filefield_instance_alter(&$instance_value, $field_value
  *
  * Tweaks individual records in a field.
  */
-function content_migrate_filefield_data_record_alter(&$record, $field, $instance) {
+function file_content_migrate_data_record_alter(&$record, $field, $instance) {
 
   switch($field['type']) {
     case 'image':
diff --git a/modules/content_migrate/modules/content_migrate.number.inc b/modules/content_migrate/modules/content_migrate.number.inc
index 0115f70..aa9d262 100644
--- a/modules/content_migrate/modules/content_migrate.number.inc
+++ b/modules/content_migrate/modules/content_migrate.number.inc
@@ -1,8 +1,7 @@
 <?php
 /**
  * @file content_migrate.number.inc
- * Code to implement hook_content_migrate_field_alter, content_migrate_instance_alter() and content_migrate_data_record_alter()
- * on behalf of the former number module, moved into a separate file for efficiency.
+ * Code to implement Content Migrate hooks on behalf of the Number module.
  */
 
 /**
@@ -13,7 +12,7 @@
  * situations not handled by basic conversion,
  * as when field types or settings are changed.
  */
-function content_migrate_number_field_alter(&$field_value, $instance_value) {
+function number_content_migrate_field_alter(&$field_value, $instance_value) {
   switch ($field_value['type']) {
    
     case 'number_integer':
@@ -72,7 +71,7 @@ function content_migrate_number_field_alter(&$field_value, $instance_value) {
  * situations not handled by basic conversion, as when
  * formatter or widget names or settings are changed.
  */
-function content_migrate_number_instance_alter(&$instance_value, $field_value) {
+function number_content_migrate_instance_alter(&$instance_value, $field_value) {
   switch ($field_value['module']) {
     case 'number':
       // The number formatters and formatter settings
diff --git a/modules/content_migrate/modules/content_migrate.optionwidgets.inc b/modules/content_migrate/modules/content_migrate.options.inc
similarity index 70%
rename from modules/content_migrate/modules/content_migrate.optionwidgets.inc
rename to modules/content_migrate/modules/content_migrate.options.inc
index d9a0db3..bf5ceeb 100644
--- a/modules/content_migrate/modules/content_migrate.optionwidgets.inc
+++ b/modules/content_migrate/modules/content_migrate.options.inc
@@ -1,8 +1,7 @@
 <?php
 /**
- * @file content_migrate.optionwidgets.inc
- * Code to implement hook_content_migrate_field_alter, content_migrate_instance_alter() and content_migrate_data_record_alter()
- * on behalf of the former optionwidgets module, moved into a separate file for efficiency.
+ * @file content_migrate.options.inc
+ * Code to implement Content Migrate hooks on behalf of the Options module.
  */
 
 /**
@@ -13,8 +12,7 @@
  * situations not handled by basic conversion, as when
  * formatter or widget names or settings are changed.
  */
-function content_migrate_optionwidgets_instance_alter(&$instance_value, $field_value) {
-
+function options_content_migrate_instance_alter(&$instance_value, $field_value) {
   switch ($instance_value['widget']['module']) {
     // Optionswidgets module became Options module
     // and widget type names changed.
@@ -28,5 +26,4 @@ function content_migrate_optionwidgets_instance_alter(&$instance_value, $field_v
       $instance_value['widget']['type'] = strtr($instance_value['widget']['type'], $replace);
       break;
   }
- 
 }
diff --git a/modules/content_migrate/modules/content_migrate.text.inc b/modules/content_migrate/modules/content_migrate.text.inc
index 00c5b82..0ad7bd0 100644
--- a/modules/content_migrate/modules/content_migrate.text.inc
+++ b/modules/content_migrate/modules/content_migrate.text.inc
@@ -1,8 +1,7 @@
 <?php
 /**
  * @file content_migrate.text.inc
- * Code to implement hook_content_migrate_field_alter, content_migrate_instance_alter() and content_migrate_data_record_alter()
- * on behalf of the former text module, moved into a separate file for efficiency.
+ * Code to implement Content Migrate hooks on behalf of the Text module.
  */
 
 /**
@@ -13,7 +12,7 @@
  * situations not handled by basic conversion,
  * as when field types or settings are changed.
  */
-function content_migrate_text_field_alter(&$field_value, $instance_value) {
+function text_content_migrate_field_alter(&$field_value, $instance_value) {
   switch ($field_value['type']) {
     case 'text':
 
@@ -78,10 +77,17 @@ function content_migrate_text_field_alter(&$field_value, $instance_value) {
         case 'list_text':
         case 'list_boolean':
           $allowed_values = array();
+          $legacy_values = array();
           if (!empty($field_value['settings']['allowed_values'])) {
             $allowed_values = content_migrate_extract_allowed_values($field_value['settings']['allowed_values'], $field_value['type']);
+            // Keep a copy of the legacy values.
+            if (isset($allowed_values['legacy_values'])) {
+              $legacy_values = $allowed_values['legacy_values'];
+            }
+            unset($allowed_values['legacy_values']);
           }
           $field_value['settings']['allowed_values'] = $allowed_values;
+          $field_value['settings']['legacy_values'] = $legacy_values;
           break;
 
       }
@@ -99,7 +105,7 @@ function content_migrate_text_field_alter(&$field_value, $instance_value) {
  * situations not handled by basic conversion, as when
  * formatter or widget names or settings are changed.
  */
-function content_migrate_text_instance_alter(&$instance_value, $field_value) {
+function text_content_migrate_instance_alter(&$instance_value, $field_value) {
   switch ($field_value['module']) {
     case 'text':
 
@@ -122,13 +128,13 @@ function content_migrate_text_instance_alter(&$instance_value, $field_value) {
  *
  * Tweaks individual records in a field.
  */
-function content_migrate_text_data_record_alter(&$record, $field, $instance) {
+function text_content_migrate_data_record_alter(&$record, $field, $instance) {
   $existing_formats = &drupal_static(__FUNCTION__);
   if (empty($existing_formats)) {
     $existing_formats = db_query("SELECT format FROM {filter_format}")->fetchCol();
   }
 
-  switch($field_value['module']) {
+  switch($field['module']) {
     case 'text':
       if (!empty($instance['settings']['text_processing'])) {
         // Adapted from node_update_7006(), to adjust the filter format values 
@@ -137,5 +143,6 @@ function content_migrate_text_data_record_alter(&$record, $field, $instance) {
           $record[$field['field_name'] . '_format'] = variable_get('filter_default_format', 1);
         }
       }
+      break;
   }
-}
\ No newline at end of file
+}
