diff --git a/core/modules/migrate_drupal/config/migrate.migration.d6_view_modes.yml b/core/modules/migrate_drupal/config/migrate.migration.d6_view_modes.yml
index 4465e2f..d9a350c 100644
--- a/core/modules/migrate_drupal/config/migrate.migration.d6_view_modes.yml
+++ b/core/modules/migrate_drupal/config/migrate.migration.d6_view_modes.yml
@@ -13,7 +13,7 @@ destinationIds:
     length: 255
 
 source:
-  plugin: drupal6_field_instance_per_view_mode
+  plugin: drupal6_field_instance_view_mode
 
 process:
   mode:
diff --git a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Plugin/migrate/source/d6/FieldInstanceViewMode.php b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Plugin/migrate/source/d6/FieldInstanceViewMode.php
new file mode 100644
index 0000000..fc3a4f3
--- /dev/null
+++ b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Plugin/migrate/source/d6/FieldInstanceViewMode.php
@@ -0,0 +1,109 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Plugin\migrate\source\d6\FieldInstanceViewMode.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\source\d6;
+
+use Drupal\migrate\Entity\MigrationInterface;
+use Drupal\migrate\Row;
+
+/**
+ * A base class for field instances which all require the same data and fields.
+ *
+ * @PluginID("drupal6_field_instance_view_mode")
+ */
+class FieldInstanceViewMode extends Drupal6SqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function runQuery() {
+    // @TODO add tags https://drupal.org/node/2165287
+    $rows = array();
+    $result = $this->query()->execute();
+    while ($field_row = $result->fetchAssoc()) {
+      $field_row['display_settings'] = unserialize($field_row['display_settings']);
+      foreach ($this->getViewModes() as $view_mode) {
+        if (isset($field_row['display_settings'][$view_mode]) && !$field_row['display_settings'][$view_mode]['exclude']) {
+          if (!isset($rows[$view_mode])) {
+            $rows[$view_mode]['entity_type'] = 'node';
+            $rows[$view_mode]['view_mode'] = $view_mode;
+          }
+        }
+      }
+    }
+
+    return new \ArrayIterator($rows);
+  }
+
+
+  /**
+   * {@inheritdoc}
+   */
+  public function count() {
+    return count($this->runQuery());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $query = $this->select('content_node_field_instance', 'cnfi')
+      ->fields('cnfi', array(
+        'display_settings',
+      ));
+
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return array(
+      'field_name' => t('The machine name of field.'),
+      'type_name' => t('Content type where this field is used.'),
+      'weight' => t('Weight.'),
+      'label' => t('A name to show.'),
+      'widget_type' => t('Widget type.'),
+      'widget_settings' => t('Serialize data with widget settings.'),
+      'display_settings' => t('Serialize data with display settings.'),
+      'description' => t('A description of field.'),
+      'widget_module' => t('Module that implements widget.'),
+      'widget_active' => t('Status of widget'),
+    );
+  }
+
+  /**
+   * Get a list of D6 view modes.
+   *
+   * Drupal 6 supported the following view modes.
+   * NODE_BUILD_NORMAL = 0
+   * NODE_BUILD_PREVIEW = 1
+   * NODE_BUILD_SEARCH_INDEX = 2
+   * NODE_BUILD_SEARCH_RESULT = 3
+   * NODE_BUILD_RSS = 4
+   * NODE_BUILD_PRINT = 5
+   * teaser
+   * full
+   *
+   * @return array
+   *   The view mode names.
+   */
+  public function getViewModes() {
+    return array(
+      0,
+      1,
+      2,
+      3,
+      4,
+      5,
+      'teaser',
+      'full',
+    );
+  }
+
+}
diff --git a/core/modules/migrate_drupal/tests/Drupal/migrate_drupal/Tests/source/d6/FieldInstanceViewModeSourceTest.php b/core/modules/migrate_drupal/tests/Drupal/migrate_drupal/Tests/source/d6/FieldInstanceViewModeSourceTest.php
new file mode 100644
index 0000000..3d09d19
--- /dev/null
+++ b/core/modules/migrate_drupal/tests/Drupal/migrate_drupal/Tests/source/d6/FieldInstanceViewModeSourceTest.php
@@ -0,0 +1,102 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Tests\source\d6\FieldInstanceViewModeSourceTest.
+ */
+
+namespace Drupal\migrate_drupal\Tests\source\d6;
+
+use Drupal\migrate\Tests\MigrateSqlSourceTestCase;
+
+/**
+ * Tests per view mode sources from D6 to D8.
+ *
+ * @group migrate_drupal
+ * @group Drupal
+ */
+class FieldInstanceViewModeSourceTest extends MigrateSqlSourceTestCase {
+
+  // The plugin system is not working during unit testing so the source plugin
+  // class needs to be manually specified.
+  const PLUGIN_CLASS = 'Drupal\migrate_drupal\Plugin\migrate\source\d6\FieldInstanceViewMode';
+
+  /**
+   * @var bool
+   */
+  protected $mapJoinable = FALSE;
+
+  // The fake Migration configuration entity.
+  protected $migrationConfiguration = array(
+    // The ID of the entity, can be any string.
+    'id' => 'view_mode_test',
+    // Leave it empty for now.
+    'idlist' => array(),
+    'source' => array(
+      'plugin' => 'drupal6_field_instance_view_mode',
+    ),
+    'sourceIds' => array(
+      'view_mode' => array(
+        'alias' => 'cnfi',
+      ),
+    ),
+    'destinationIds' => array(
+      'id' => array(
+        // This is where the field schema would go.
+      ),
+    ),
+  );
+
+  protected $expectedResults = array(
+    array(
+      'entity_type' => 'node',
+      'view_mode' => '4',
+    ),
+    array(
+      'entity_type' => 'node',
+      'view_mode' => 'teaser',
+    ),
+    array(
+      'entity_type' => 'node',
+      'view_mode' => 'full',
+    ),
+  );
+
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'D6 view mode source functionality',
+      'description' => 'Tests D6 view mode source plugin.',
+      'group' => 'Migrate Drupal',
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+
+    $this->databaseContents['content_node_field_instance'][] = array(
+      'display_settings' => 'a:6:{s:6:"weight";s:2:"31";s:6:"parent";s:0:"";s:5:"label";a:1:{s:6:"format";s:5:"above";}s:6:"teaser";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}s:4:"full";a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}i:4;a:2:{s:6:"format";s:7:"default";s:7:"exclude";i:0;}}',
+    );
+
+    parent::setUp();
+  }
+
+}
+
+use Drupal\Core\Database\Connection;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\migrate_drupal\Plugin\migrate\source\d6\FieldInstanceViewMode;
+
+class TestFieldInstanceViewMode extends FieldInstanceViewMode {
+  function setDatabase(Connection $database) {
+    $this->database = $database;
+  }
+  function setModuleHandler(ModuleHandlerInterface $module_handler) {
+    $this->moduleHandler = $module_handler;
+  }
+}
