diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml
index 3e6edbf..7689458 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field.yml
@@ -16,50 +16,108 @@ process:
       bypass: true
       source:
         - type
+        - widget_type
       map:
-        number_integer: integer
-        number_decimal: decimal
-        number_float: float
-        text: text
-        email: email
-        link: link
-        date: datetime
-        datestamp: datetime
-        datetime: datetime
-        fr_phone: telephone
-        be_phone: telephone
-        it_phone: telephone
-        el_phone: telephone
-        ch_phone: telephone
-        ca_phone: telephone
-        cr_phone: telephone
-        pa_phone: telephone
-        gb_phone: telephone
-        ru_phone: telephone
-        ua_phone: telephone
-        es_phone: telephone
-        au_phone: telephone
-        cs_phone: telephone
-        hu_phone: telephone
-        pl_phone: telephone
-        nl_phone: telephone
-        se_phone: telephone
-        za_phone: telephone
-        il_phone: telephone
-        nz_phone: telephone
-        br_phone: telephone
-        cl_phone: telephone
-        cn_phone: telephone
-        hk_phone: telephone
-        mo_phone: telephone
-        ph_phone: telephone
-        sg_phone: telephone
-        jo_phone: telephone
-        eg_phone: telephone
-        pk_phone: telephone
-        int_phone: telephone
+        number_integer:
+          number: integer
+          optionwidgets_select: list_integer
+          optionwidgets_buttons: list_integer
+          optionwidgets_onoff: boolean
+        number_decimal:
+          number: decimal
+          optionwidgets_select: list_float
+          optionwidgets_buttons: list_float
+          optionwidgets_onoff: boolean
+        number_float:
+          number: float
+          optionwidgets_select: list_float
+          optionwidgets_buttons: list_float
+          optionwidgets_onoff: boolean
+        text:
+          optionwidgets_select: list_text
+          optionwidgets_buttons: list_text
+          optionwidgets_onoff: boolean
+          text_textfield: text
+          text_textarea: text_long
+        email:
+          email_textfield: email
+        link:
+          link: link
+        filefield:
+          imagefield_widget: image
+          filefield_widget: file
+        date:
+          date_select: datetime
+        datestamp:
+          date_select: datetime
+        datetime:
+          date_select: datetime
+        fr_phone:
+          phone_textfield: telephone
+        be_phone:
+          phone_textfield: telephone
+        it_phone:
+          phone_textfield: telephone
+        el_phone:
+          phone_textfield: telephone
+        ch_phone:
+          phone_textfield: telephone
+        ca_phone:
+          phone_textfield: telephone
+        cr_phone:
+          phone_textfield: telephone
+        pa_phone:
+          phone_textfield: telephone
+        gb_phone:
+          phone_textfield: telephone
+        ru_phone:
+          phone_textfield: telephone
+        ua_phone:
+          phone_textfield: telephone
+        es_phone:
+          phone_textfield: telephone
+        au_phone:
+          phone_textfield: telephone
+        cs_phone:
+          phone_textfield: telephone
+        hu_phone:
+          phone_textfield: telephone
+        pl_phone:
+          phone_textfield: telephone
+        nl_phone:
+          phone_textfield: telephone
+        se_phone:
+          phone_textfield: telephone
+        za_phone:
+          phone_textfield: telephone
+        il_phone:
+          phone_textfield: telephone
+        nz_phone:
+          phone_textfield: telephone
+        br_phone:
+          phone_textfield: telephone
+        cl_phone:
+          phone_textfield: telephone
+        cn_phone:
+          phone_textfield: telephone
+        hk_phone:
+          phone_textfield: telephone
+        mo_phone:
+          phone_textfield: telephone
+        ph_phone:
+          phone_textfield: telephone
+        sg_phone:
+          phone_textfield: telephone
+        jo_phone:
+          phone_textfield: telephone
+        eg_phone:
+          phone_textfield: telephone
+        pk_phone:
+          phone_textfield: telephone
+        int_phone:
+          phone_textfield: telephone
     -
-      plugin: file_image_handler
+      plugin: unsupported_field_handler
   cardinality:
     plugin: static_map
     bypass: true
diff --git a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml
index 2d76591..646815f 100644
--- a/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml
+++ b/core/modules/migrate_drupal/config/install/migrate.migration.d6_field_formatter_settings.yml
@@ -47,6 +47,9 @@ process:
           text:
             default: text_default
             trimmed: text_trimmed
+            plain: string
+            unformatted: string
+            us_0: number_decimal
           number_integer:
             default: number_integer
             us_0: number_integer
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldSettings.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldSettings.php
index cf84ef8..8dca53a 100644
--- a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldSettings.php
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FieldSettings.php
@@ -48,6 +48,42 @@ public function getSettings($field_type, $global_settings, $widget_settings) {
     $title_label = isset($widget_settings['title']) ? $widget_settings['title'] : '';
     $max_length = isset($global_settings['max_length']) ? $global_settings['max_length'] : '';
     $max_length = empty($max_length) ? 255 : $max_length;
+    if (isset($global_settings['allowed_values'])) {
+      $d6_allowed_values = preg_split("/[\r\n,]+/", $global_settings['allowed_values']);
+      if ($field_type == 'list_text' || $field_type == 'list_integer') {
+        foreach ($d6_allowed_values as $value) {
+          $value = explode("|", $value);
+          if (isset($value[1])) {
+            $allowed_values[$value[0]] = $value[1];
+          }
+          else {
+            $allowed_values[$value[0]] = $value[0];
+          }
+        }
+      }
+      elseif ($field_type == 'list_float') {
+        foreach ($d6_allowed_values as $value) {
+          $value = explode("|", $value);
+          $allowed_values_key = implode('_', explode('.', $value[0]));
+          if (isset($value[1])) {
+            $allowed_values[$allowed_values_key] = $value[1];
+          }
+          else {
+            $allowed_values[$allowed_values_key] = $value[0];
+          }
+        }
+      }
+      else {
+        $counter = 0;
+        foreach ($d6_allowed_values as $value) {
+          $allowed_values[$counter++] = $value;
+        }
+        unset($counter);
+      }
+    }
+    else {
+      $allowed_values = '';
+    }
 
     $settings = array(
       'text' => array(
@@ -60,6 +96,18 @@ public function getSettings($field_type, $global_settings, $widget_settings) {
         ),
       ),
       'datetime' => array('datetime_type' => 'datetime'),
+      'list_text' => array(
+        'allowed_values' => $allowed_values,
+      ),
+      'list_integer' => array(
+        'allowed_values' => $allowed_values,
+      ),
+      'list_float' => array(
+        'allowed_values' => $allowed_values,
+      ),
+      'boolean' => array(
+        'allowed_values' => $allowed_values,
+      ),
     );
 
     return isset($settings[$field_type]) ? $settings[$field_type] : array();
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FileImageHandler.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FileImageHandler.php
deleted file mode 100644
index b188bee..0000000
--- a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/FileImageHandler.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\migrate_drupal\Plugin\migrate\Process\d6\system_update_7000.
- */
-
-namespace Drupal\migrate_drupal\Plugin\migrate\process\d6;
-
-use Drupal\migrate\MigrateExecutable;
-use Drupal\migrate\MigrateSkipRowException;
-use Drupal\migrate\ProcessPluginBase;
-use Drupal\migrate\Row;
-
-/**
- * Decide if it's an image or a file when coming from a D6 filefield.
- *
- * @MigrateProcessPlugin(
- *   id = "file_image_handler"
- * )
- */
-class FileImageHandler extends ProcessPluginBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function transform($value, MigrateExecutable $migrate_executable, Row $row, $destination_property) {
-
-    // If it's an array then the map missed.
-    if (is_array($value)) {
-
-      // Filefields in D6 have no way to tell if it's an image or file so we
-      // have to look at the widget type as well.
-      if ($row->getSourceProperty('module') == 'filefield') {
-        $widget_type = $row->getSourceProperty('widget_type');
-        $value = $widget_type == "imagefield_widget" ? "image" : "file";
-      }
-      else {
-        throw new MigrateSkipRowException();
-      }
-    }
-
-    return $value;
-  }
-
-}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/UnsupportedFieldHandler.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/UnsupportedFieldHandler.php
new file mode 100644
index 0000000..b5e904c
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/UnsupportedFieldHandler.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Plugin\migrate\Process\d6\unsupported_field_handler.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\process\d6;
+
+use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate\MigrateSkipRowException;
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\Row;
+
+/**
+ * Skip importing the field if it is not in the field map.
+ *
+ * @MigrateProcessPlugin(
+ *   id = "unsupported_field_handler"
+ * )
+ */
+class UnsupportedFieldHandler extends ProcessPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutable $migrate_executable, Row $row, $destination_property) {
+
+    // If it's an array then the map missed.
+    if (is_array($value)) {
+      throw new MigrateSkipRowException();
+    }
+    return $value;
+  }
+
+}
diff --git a/core/modules/migrate_drupal/src/Tests/Dump/Drupal6FieldInstance.php b/core/modules/migrate_drupal/src/Tests/Dump/Drupal6FieldInstance.php
index 25e5910..5cfe5bf 100644
--- a/core/modules/migrate_drupal/src/Tests/Dump/Drupal6FieldInstance.php
+++ b/core/modules/migrate_drupal/src/Tests/Dump/Drupal6FieldInstance.php
@@ -626,6 +626,134 @@ public function load() {
       )),
       'description' => 'An example datetime field.',
     ))
+    ->values(array(
+      'field_name' => 'field_test_decimal_radio_buttons',
+      'type_name' => 'story',
+      'weight' => 13,
+      'label' => 'Decimal Radio Buttons Field',
+      'widget_type' => 'optionwidgets_buttons',
+      'widget_settings' => 'a:2:{s:13:"default_value";a:1:{i:0;a:1:{s:5:"value";s:0:"";}}s:17:"default_value_php";N;}',
+      'display_settings' => serialize(array(
+        'weight' => 13,
+        'parent' => '',
+        'label' => array(
+          'format' => 'above',
+        ),
+        'teaser' => array(
+          'format' => 'unformatted',
+          'exclude' => 0,
+        ),
+        'full' => array(
+          'format' => 'us_0',
+          'exclude' => 0,
+        ),
+        4 => array(
+          'format' => 'unformatted',
+          'exclude' => 0,
+        ),
+        5 => array(
+          'format' => 'default',
+          'exclude' => 1,
+        ),
+      )),
+      'description' => 'An example deciaml field using radio buttons.',
+    ))
+    ->values(array(
+      'field_name' => 'field_test_float_single_checkbox',
+      'type_name' => 'story',
+      'weight' => 14,
+      'label' => 'Float Single Checkbox Field',
+      'widget_type' => 'optionwidgets_onoff',
+      'widget_settings' => 'a:2:{s:13:"default_value";a:1:{i:0;a:1:{s:5:"value";N;}}s:17:"default_value_php";N;}',
+      'display_settings' => serialize(array(
+        'weight' => 14,
+        'parent' => '',
+        'label' => array(
+          'format' => 'above',
+        ),
+        'teaser' => array(
+          'format' => 'unformatted',
+          'exclude' => 0,
+        ),
+        'full' => array(
+          'format' => 'us_0',
+          'exclude' => 0,
+        ),
+        4 => array(
+          'format' => 'unformatted',
+          'exclude' => 0,
+        ),
+        5 => array(
+          'format' => 'default',
+          'exclude' => 1,
+        ),
+      )),
+      'description' => 'An example float field using a single on/off checkbox.',
+    ))
+    ->values(array(
+      'field_name' => 'field_test_integer_selectlist',
+      'type_name' => 'story',
+      'weight' => 15,
+      'label' => 'Integer Select List Field',
+      'widget_type' => 'optionwidgets_select',
+      'widget_settings' => 'a:2:{s:13:"default_value";a:1:{i:0;a:1:{s:5:"value";s:0:"";}}s:17:"default_value_php";N;}',
+      'display_settings' => serialize(array(
+        'weight' => 15,
+        'parent' => '',
+        'label' => array(
+          'format' => 'above',
+        ),
+        'teaser' => array(
+          'format' => 'unformatted',
+          'exclude' => 0,
+        ),
+        'full' => array(
+          'format' => 'us_0',
+          'exclude' => 0,
+        ),
+        4 => array(
+          'format' => 'unformatted',
+          'exclude' => 0,
+        ),
+        5 => array(
+          'format' => 'default',
+          'exclude' => 1,
+        ),
+      )),
+      'description' => 'An example integer field using a select list.',
+    ))
+    ->values(array(
+      'field_name' => 'field_test_text_single_checkbox',
+      'type_name' => 'story',
+      'weight' => 16,
+      'label' => 'Text Single Checkbox Field',
+      'widget_type' => 'optionwidgets_onoff',
+      'widget_settings' => 'a:2:{s:13:"default_value";a:1:{i:0;a:1:{s:5:"value";N;}}s:17:"default_value_php";N;}',
+      'display_settings' => serialize(array(
+        'weight' => 16,
+        'parent' => '',
+        'label' => array(
+          'format' => 'above',
+        ),
+        'teaser' => array(
+          'format' => 'unformatted',
+          'exclude' => 0,
+        ),
+        'full' => array(
+          'format' => 'us_0',
+          'exclude' => 0,
+        ),
+        4 => array(
+          'format' => 'unformatted',
+          'exclude' => 0,
+        ),
+        5 => array(
+          'format' => 'default',
+          'exclude' => 1,
+        ),
+      )),
+      'description' => 'An example text field using a single on/off checkbox.',
+    ))
     ->execute();
 
     // Create the field table.
@@ -856,6 +984,52 @@ public function load() {
       'db_columns' => 'a:0:{}',
       'active' => 0,
     ))
+    ->values(array(
+      'field_name' => 'field_test_decimal_radio_buttons',
+      'module' => 'number',
+      'type' => 'number_decimal',
+      'global_settings' => 'a:9:{s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:3:"min";s:0:"";s:3:"max";s:0:"";s:14:"allowed_values";s:7:"1.2
+2.1";s:18:"allowed_values_php";s:0:"";s:9:"precision";s:2:"10";s:5:"scale";s:1:"2";s:7:"decimal";s:1:".";}',
+      'multiple' => 0,
+      'db_storage' => 1,
+      'db_columns' => 'a:0:{}',
+      'active' => 1,
+    ))
+    ->values(array(
+      'field_name' => 'field_test_float_single_checkbox',
+      'module' => 'number',
+      'type' => 'number_float',
+      'global_settings' => 'a:6:{s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:3:"min";s:0:"";s:3:"max";s:0:"";s:14:"allowed_values";s:11:"3.142
+1.234";s:18:"allowed_values_php";s:0:"";}',
+      'multiple' => 0,
+      'db_storage' => 1,
+      'db_columns' => 'a:0:{}',
+      'active' => 1,
+    ))
+    ->values(array(
+      'field_name' => 'field_test_integer_selectlist',
+      'module' => 'number',
+      'type' => 'number_integer',
+      'global_settings' => 'a:6:{s:6:"prefix";s:0:"";s:6:"suffix";s:0:"";s:3:"min";s:0:"";s:3:"max";s:0:"";s:14:"allowed_values";s:19:"1234
+2341
+3412
+4123";s:18:"allowed_values_php";s:0:"";}',
+      'multiple' => 0,
+      'db_storage' => 1,
+      'db_columns' => 'a:0:{}',
+      'active' => 1,
+    ))
+    ->values(array(
+      'field_name' => 'field_test_text_single_checkbox',
+      'module' => 'text',
+      'type' => 'text',
+      'global_settings' => 'a:4:{s:15:"text_processing";s:1:"0";s:10:"max_length";s:0:"";s:14:"allowed_values";s:13:"Hello
+Goodbye";s:18:"allowed_values_php";s:0:"";}',
+      'multiple' => 0,
+      'db_storage' => 1,
+      'db_columns' => 'a:0:{}',
+      'active' => 1,
+    ))
     ->execute();
 
     $this->createTable('content_field_test', array(
diff --git a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldTest.php b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldTest.php
index b891231..77790b3 100644
--- a/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldTest.php
+++ b/core/modules/migrate_drupal/src/Tests/d6/MigrateFieldTest.php
@@ -20,7 +20,7 @@ class MigrateFieldTest extends MigrateDrupalTestBase {
    *
    * @var array
    */
-  public static $modules = array('field', 'telephone', 'link', 'file', 'image', 'datetime', 'node');
+  public static $modules = array('field', 'telephone', 'link', 'file', 'image', 'datetime', 'node', 'options');
 
   /**
    * {@inheritdoc}
@@ -55,29 +55,29 @@ public function testFields() {
     // Text field.
     $field = entity_load('field_config', 'node.field_test');
     $expected = array('max_length' => 255);
-    $this->assertEqual($field->type, "text", "Field type is text.");
+    $this->assertEqual($field->type, "text",  t('Field type is @fieldtype. It should be text.', array('@fieldtype' => $field->type)));
     $this->assertEqual($field->status(), TRUE, "Status is TRUE");
     $this->assertEqual($field->settings, $expected, "Field type text settings are correct");
 
     // Integer field.
     $field = entity_load('field_config', 'node.field_test_two');
-    $this->assertEqual($field->type, "integer", "Field type is integer.");
+    $this->assertEqual($field->type, "integer",  t('Field type is @fieldtype. It should be integer.', array('@fieldtype' => $field->type)));
 
     // Float field.
     $field = entity_load('field_config', 'node.field_test_three');
-    $this->assertEqual($field->type, "decimal", "Field type is decimal.");
+    $this->assertEqual($field->type, "decimal",  t('Field type is @fieldtype. It should be decimal.', array('@fieldtype' => $field->type)));
 
     // Link field.
     $field = entity_load('field_config', 'node.field_test_link');
-    $this->assertEqual($field->type, "link", "Field type is link.");
+    $this->assertEqual($field->type, "link",  t('Field type is @fieldtype. It should be link.', array('@fieldtype' => $field->type)));
 
     // File field.
     $field = entity_load('field_config', 'node.field_test_filefield');
-    $this->assertEqual($field->type, "file", "Field type is file.");
+    $this->assertEqual($field->type, "file",  t('Field type is @fieldtype. It should be file.', array('@fieldtype' => $field->type)));
 
     /** @var \Drupal\field\Entity\FieldConfig $field */
     $field = entity_load('field_config', 'node.field_test_imagefield');
-    $this->assertEqual($field->type, "image", "Field type is image.");
+    $this->assertEqual($field->type, "image",  t('Field type is @fieldtype. It should be image.', array('@fieldtype' => $field->type)));
     $settings = $field->getSettings();
     $this->assertEqual($settings['column_groups']['alt']['label'], 'Test alt');
     $this->assertEqual($settings['column_groups']['title']['label'], 'Test title');
@@ -88,12 +88,29 @@ public function testFields() {
 
     // Phone field.
     $field = entity_load('field_config', 'node.field_test_phone');
-    $this->assertEqual($field->type, "telephone", "Field type is telephone.");
+    $this->assertEqual($field->type, "telephone",  t('Field type is @fieldtype. It should be telephone.', array('@fieldtype' => $field->type)));
 
     // Date field.
     $field = entity_load('field_config', 'node.field_test_datetime');
-    $this->assertEqual($field->type, "datetime", "Field type is datetime.");
+    $this->assertEqual($field->type, "datetime",  t('Field type is @fieldtype. It should be datetime.', array('@fieldtype' => $field->type)));
     $this->assertEqual($field->status(), FALSE, "Status is FALSE");
+
+    // Decimal field with radio buttons.
+    $field = entity_load('field_config', 'node.field_test_decimal_radio_buttons');
+    $this->assertEqual($field->type, "list_float",  t('Field type is @fieldtype. It should be list_float.', array('@fieldtype' => $field->type)));
+
+    // Float field with a single checkbox.
+    $field = entity_load('field_config', 'node.field_test_float_single_checkbox');
+    $this->assertEqual($field->type, "boolean",  t('Field type is @fieldtype. It should be boolean.', array('@fieldtype' => $field->type)));
+
+    // Integer field with a select list.
+    $field = entity_load('field_config', 'node.field_test_integer_selectlist');
+    $this->assertEqual($field->type, "list_integer",  t('Field type is @fieldtype. It should be list_integer.', array('@fieldtype' => $field->type)));
+
+    // Text field with a single checkbox.
+    $field = entity_load('field_config', 'node.field_test_text_single_checkbox');
+    $this->assertEqual($field->type, "boolean",  t('Field type is @fieldtype. It should be boolean.', array('@fieldtype' => $field->type)));
+
   }
 
 }
