diff --git a/core/modules/field/field.module b/core/modules/field/field.module
index 272ca5d..8f5cacc 100644
--- a/core/modules/field/field.module
+++ b/core/modules/field/field.module
@@ -139,7 +139,7 @@ function field_help($path, $arg) {
       $output .= '<h3>' . t('Uses') . '</h3>';
       $output .= '<dl>';
       $output .= '<dt>' . t('Enabling field types') . '</dt>';
-      $output .= '<dd>' . t('The Field module provides the infrastructure for fields and field attachment; the field types and input widgets themselves are provided by additional modules. Some of the modules are required; the optional modules can be enabled from the <a href="@modules">Modules administration page</a>. Drupal core includes the following field type modules: Number (required), Text (required), List (required), Taxonomy (optional), Image (optional), and File (optional); the required Options module provides input widgets for other field modules. Additional fields and widgets may be provided by contributed modules, which you can find in the <a href="@contrib">contributed module section of Drupal.org</a>. Currently enabled field and input widget modules:', array('@modules' => url('admin/modules'), '@contrib' => 'http://drupal.org/project/modules', '@options' => url('admin/help/options')));
+      $output .= '<dd>' . t('The Field module provides the infrastructure for fields and field attachment; the field types and input widgets themselves are provided by additional modules. Some of the modules are required; the optional modules can be enabled from the <a href="@modules">Modules administration page</a>. Drupal core includes the following field type modules: Number (required), Text (required), Options (required), Taxonomy (optional), Image (optional), and File (optional); the required Options module provides input widgets for other field modules. Additional fields and widgets may be provided by contributed modules, which you can find in the <a href="@contrib">contributed module section of Drupal.org</a>. Currently enabled field and input widget modules:', array('@modules' => url('admin/modules'), '@contrib' => 'http://drupal.org/project/modules', '@options' => url('admin/help/options')));
 
       // Make a list of all widget and field modules currently enabled, in
       // order by displayed module name (module names are not translated).
diff --git a/core/modules/field/field.views.inc b/core/modules/field/field.views.inc
index 90f539d..10809e4 100644
--- a/core/modules/field/field.views.inc
+++ b/core/modules/field/field.views.inc
@@ -443,26 +443,3 @@ function field_views_field_default_views_data($field) {
 
   return $data;
 }
-
-/**
- * Have a different filter handler for lists. This should allow to select values of the list.
- */
-function list_field_views_data($field) {
-  $data = field_views_field_default_views_data($field);
-  foreach ($data as $table_name => $table_data) {
-    foreach ($table_data as $field_name => $field_data) {
-      if (isset($field_data['filter']) && $field_name != 'delta') {
-        $data[$table_name][$field_name]['filter']['id'] = 'field_list';
-      }
-      if (isset($field_data['argument']) && $field_name != 'delta') {
-        if ($field['type'] == 'list_text') {
-          $data[$table_name][$field_name]['argument']['id'] = 'field_list_string';
-        }
-        else {
-          $data[$table_name][$field_name]['argument']['id'] = 'field_list';
-        }
-      }
-    }
-  }
-  return $data;
-}
diff --git a/core/modules/field/lib/Drupal/field/Plugin/views/argument/FieldList.php b/core/modules/field/lib/Drupal/field/Plugin/views/argument/FieldList.php
deleted file mode 100644
index d6ddcac..0000000
--- a/core/modules/field/lib/Drupal/field/Plugin/views/argument/FieldList.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of views_handler_argument_field_list.
- */
-
-namespace Drupal\field\Plugin\views\argument;
-
-use Drupal\views\ViewExecutable;
-use Drupal\views\Plugin\views\display\DisplayPluginBase;
-use Drupal\views\Plugin\views\argument\Numeric;
-use Drupal\Component\Annotation\PluginID;
-
-/**
- * Argument handler for list field to show the human readable name in the
- * summary.
- *
- * @ingroup views_argument_handlers
- *
- * @PluginID("field_list")
- */
-class FieldList extends Numeric {
-
-  /**
-   * Stores the allowed values of this field.
-   *
-   * @var array
-   */
-  var $allowed_values = NULL;
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\argument\ArgumentPluginBase::init().
-   */
-  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
-    parent::init($view, $display, $options);
-
-    $field = field_info_field($this->definition['field_name']);
-    $this->allowed_values = options_allowed_values($field);
-  }
-
-  protected function defineOptions() {
-    $options = parent::defineOptions();
-    $options['summary']['contains']['human'] = array('default' => FALSE, 'bool' => TRUE);
-
-    return $options;
-  }
-
-  public function buildOptionsForm(&$form, &$form_state) {
-    parent::buildOptionsForm($form, $form_state);
-
-    $form['summary']['human'] = array(
-      '#title' => t('Display list value as human readable'),
-      '#type' => 'checkbox',
-      '#default_value' => $this->options['summary']['human'],
-      '#states' => array(
-        'visible' => array(
-          ':input[name="options[default_action]"]' => array('value' => 'summary'),
-        ),
-      ),
-    );
-  }
-
-  public function summaryName($data) {
-    $value = $data->{$this->name_alias};
-    // If the list element has a human readable name show it,
-    if (isset($this->allowed_values[$value]) && !empty($this->options['summary']['human'])) {
-      return field_filter_xss($this->allowed_values[$value]);
-    }
-    // else fallback to the key.
-    else {
-      return check_plain($value);
-    }
-  }
-
-}
diff --git a/core/modules/field/lib/Drupal/field/Plugin/views/argument/ListString.php b/core/modules/field/lib/Drupal/field/Plugin/views/argument/ListString.php
deleted file mode 100644
index 0c34d1b..0000000
--- a/core/modules/field/lib/Drupal/field/Plugin/views/argument/ListString.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Drupal\field\Plugin\views\argument\ListString.
- */
-
-namespace Drupal\field\Plugin\views\argument;
-
-use Drupal\views\ViewExecutable;
-use Drupal\views\Plugin\views\display\DisplayPluginBase;
-use Drupal\views\Plugin\views\argument\String;
-use Drupal\Component\Annotation\PluginID;
-
-/**
- * Argument handler for list field to show the human readable name in the
- * summary.
- *
- * @ingroup views_argument_handlers
- *
- * @PluginID("field_list_string")
- */
-class ListString extends String {
-
-  /**
-   * Stores the allowed values of this field.
-   *
-   * @var array
-   */
-  var $allowed_values = NULL;
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\argument\String::init().
-   */
-  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
-    parent::init($view, $display, $options);
-
-    $field = field_info_field($this->definition['field_name']);
-    $this->allowed_values = options_allowed_values($field);
-  }
-
-  protected function defineOptions() {
-    $options = parent::defineOptions();
-
-    $options['summary']['contains']['human'] = array('default' => FALSE, 'bool' => TRUE);
-
-    return $options;
-  }
-
-  public function buildOptionsForm(&$form, &$form_state) {
-    parent::buildOptionsForm($form, $form_state);
-
-    $form['summary']['human'] = array(
-      '#title' => t('Display list value as human readable'),
-      '#type' => 'checkbox',
-      '#default_value' => $this->options['summary']['human'],
-      '#states' => array(
-        'visible' => array(
-          ':input[name="options[default_action]"]' => array('value' => 'summary'),
-        ),
-      ),
-    );
-  }
-
-
-  public function summaryName($data) {
-    $value = $data->{$this->name_alias};
-    // If the list element has a human readable name show it,
-    if (isset($this->allowed_values[$value]) && !empty($this->options['summary']['human'])) {
-      return $this->caseTransform(field_filter_xss($this->allowed_values[$value]), $this->options['case']);
-    }
-    // else fallback to the key.
-    else {
-      return $this->caseTransform(check_plain($value), $this->options['case']);
-    }
-  }
-
-}
diff --git a/core/modules/field/lib/Drupal/field/Plugin/views/filter/FieldList.php b/core/modules/field/lib/Drupal/field/Plugin/views/filter/FieldList.php
deleted file mode 100644
index cfd2f6c..0000000
--- a/core/modules/field/lib/Drupal/field/Plugin/views/filter/FieldList.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Drupal\field\Plugin\views\filter\FieldList.
- */
-
-namespace Drupal\field\Plugin\views\filter;
-
-use Drupal\views\Plugin\views\filter\ManyToOne;
-use Drupal\Component\Annotation\PluginID;
-
-/**
- * Filter handler which uses list-fields as options.
- *
- * @ingroup views_filter_handlers
- *
- * @PluginID("field_list")
- */
-class FieldList extends ManyToOne {
-
-  public function getValueOptions() {
-    $field = field_info_field($this->definition['field_name']);
-    $this->value_options = list_allowed_values($field);
-  }
-
-}
diff --git a/core/modules/options/lib/Drupal/options/Plugin/views/argument/NumberListField.php b/core/modules/options/lib/Drupal/options/Plugin/views/argument/NumberListField.php
new file mode 100644
index 0000000..b1a9475
--- /dev/null
+++ b/core/modules/options/lib/Drupal/options/Plugin/views/argument/NumberListField.php
@@ -0,0 +1,121 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\options\Plugin\views\argument\NumberListField.
+ */
+
+namespace Drupal\options\Plugin\views\argument;
+
+use Drupal\Core\Entity\EntityManager;
+use Drupal\views\ViewExecutable;
+use Drupal\views\Plugin\views\display\DisplayPluginBase;
+use Drupal\views\Plugin\views\argument\Numeric;
+use Drupal\Component\Annotation\PluginID;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Argument handler for list field to show the human readable name in the
+ * summary.
+ *
+ * @ingroup views_argument_handlers
+ *
+ * @PluginID("number_list_field")
+ */
+class NumberListField extends Numeric {
+
+  /**
+   * The field storage controller.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageControllerInterface
+   */
+  protected $storageController;
+
+
+  /**
+   * Stores the allowed values of this field.
+   *
+   * @var array
+   */
+  var $allowed_values = NULL;
+
+  /**
+   * Constructs a NumberListField object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin ID for the plugin instance.
+   * @param array $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Entity\EntityManager $entity_manager
+   *   The entity manager.
+   */
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityManager $entity_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->storageController = $entity_manager->getStorageController('field_entity');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('plugin.manager.entity')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
+    parent::init($view, $display, $options);
+
+    $field = $this->storageController->load($this->definition['field_name']);
+    $this->allowed_values = options_regular_allowed_values($field);
+  }
+
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+    $options['summary']['contains']['human'] = array('default' => FALSE, 'bool' => TRUE);
+
+    return $options;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildOptionsForm(&$form, &$form_state) {
+    parent::buildOptionsForm($form, $form_state);
+
+    $form['summary']['human'] = array(
+      '#title' => t('Display list value as human readable'),
+      '#type' => 'checkbox',
+      '#default_value' => $this->options['summary']['human'],
+      '#states' => array(
+        'visible' => array(
+          ':input[name="options[default_action]"]' => array('value' => 'summary'),
+        ),
+      ),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function summaryName($data) {
+    $value = $data->{$this->name_alias};
+    // If the list element has a human readable name show it,
+    if (isset($this->allowed_values[$value]) && !empty($this->options['summary']['human'])) {
+      return field_filter_xss($this->allowed_values[$value]);
+    }
+    // else fallback to the key.
+    else {
+      return String::checkPlain($value);
+    }
+  }
+
+}
diff --git a/core/modules/options/lib/Drupal/options/Plugin/views/argument/TextListField.php b/core/modules/options/lib/Drupal/options/Plugin/views/argument/TextListField.php
new file mode 100644
index 0000000..0de4057
--- /dev/null
+++ b/core/modules/options/lib/Drupal/options/Plugin/views/argument/TextListField.php
@@ -0,0 +1,125 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\options\Plugin\views\argument\TextListField.
+ */
+
+namespace Drupal\options\Plugin\views\argument;
+
+use Drupal\Core\Entity\EntityManager;
+use Drupal\views\ViewExecutable;
+use Drupal\views\Plugin\views\display\DisplayPluginBase;
+use Drupal\views\Plugin\views\argument\String;
+use Drupal\Component\Annotation\PluginID;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Argument handler for list field to show the human readable name in the
+ * summary.
+ *
+ * @ingroup views_argument_handlers
+ *
+ * @PluginID("text_list_field")
+ */
+class TextListField extends String {
+
+  /**
+   * The field storage controller.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageControllerInterface
+   */
+  protected $storageController;
+
+
+  /**
+   * Stores the allowed values of this field.
+   *
+   * @var array
+   */
+  var $allowed_values = NULL;
+
+  /**
+   * Constructs a TextListField object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin ID for the plugin instance.
+   * @param array $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Entity\EntityManager $entity_manager
+   *   The entity manager.
+   */
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityManager $entity_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->storageController = $entity_manager->getStorageController('field_entity');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('plugin.manager.entity')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
+    parent::init($view, $display, $options);
+
+    $field = $this->storageController->load($this->definition['field_name']);
+    $this->allowed_values = options_regular_allowed_values($field);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function defineOptions() {
+    $options = parent::defineOptions();
+
+    $options['summary']['contains']['human'] = array('default' => FALSE, 'bool' => TRUE);
+
+    return $options;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildOptionsForm(&$form, &$form_state) {
+    parent::buildOptionsForm($form, $form_state);
+
+    $form['summary']['human'] = array(
+      '#title' => t('Display list value as human readable'),
+      '#type' => 'checkbox',
+      '#default_value' => $this->options['summary']['human'],
+      '#states' => array(
+        'visible' => array(
+          ':input[name="options[default_action]"]' => array('value' => 'summary'),
+        ),
+      ),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function summaryName($data) {
+    $value = $data->{$this->name_alias};
+    // If the list element has a human readable name show it,
+    if (isset($this->allowed_values[$value]) && !empty($this->options['summary']['human'])) {
+      return $this->caseTransform(field_filter_xss($this->allowed_values[$value]), $this->options['case']);
+    }
+    // else fallback to the key.
+    else {
+      return $this->caseTransform(String::checkPlain($value), $this->options['case']);
+    }
+  }
+
+}
diff --git a/core/modules/options/lib/Drupal/options/Plugin/views/filter/ListField.php b/core/modules/options/lib/Drupal/options/Plugin/views/filter/ListField.php
new file mode 100644
index 0000000..4c28b55
--- /dev/null
+++ b/core/modules/options/lib/Drupal/options/Plugin/views/filter/ListField.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\field\Plugin\views\filter\ListField.
+ */
+
+namespace Drupal\options\Plugin\views\filter;
+
+use Drupal\Core\Entity\EntityManager;
+use Drupal\views\Plugin\views\filter\ManyToOne;
+use Drupal\Component\Annotation\PluginID;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Filter handler which uses list-fields as options.
+ *
+ * @ingroup views_filter_handlers
+ *
+ * @PluginID("list_field")
+ */
+class ListField extends ManyToOne {
+
+  /**
+   * The field storage controller.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageControllerInterface
+   */
+  protected $storageController;
+
+  /**
+   * Constructs a ListField object.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin ID for the plugin instance.
+   * @param array $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Entity\EntityManager $entity_manager
+   *   The entity manager.
+   */
+  public function __construct(array $configuration, $plugin_id, array $plugin_definition, EntityManager $entity_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->storageController = $entity_manager->getStorageController('field_entity');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, array $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('plugin.manager.entity')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getValueOptions() {
+    $field = $this->storageController->load($this->definition['field_name']);
+    if (!isset($this->value_options)) {
+      $this->value_options = options_regular_allowed_values($field);
+    }
+  }
+
+}
diff --git a/core/modules/options/lib/Drupal/options/Tests/Views/OptionsListArgumentTest.php b/core/modules/options/lib/Drupal/options/Tests/Views/OptionsListArgumentTest.php
new file mode 100644
index 0000000..f0e8fe7
--- /dev/null
+++ b/core/modules/options/lib/Drupal/options/Tests/Views/OptionsListArgumentTest.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\options\Tests\Views\OptionsListArgumentTest.
+ *
+ * See \Drupal\options\Plugin\views\argument\NumberListField.
+ */
+
+namespace Drupal\options\Tests\Views;
+
+/**
+ * Tests options list argument for views.
+ */
+class OptionsListArgumentTest extends OptionsTestBase {
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = array('test_options_list_argument');
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Options: Options list argument',
+      'description' => 'Tests the options integer list field view filter.',
+      'group' => 'Views module integration',
+    );
+  }
+
+  /**
+   * Tests the options field argument.
+   */
+  function testViewsTestOptionsListArgument() {
+    $view = views_get_view('test_options_list_argument');
+    $this->executeView($view);
+    $resultset = array(
+      array(
+        'nid' => $this->nodes[0]->nid,
+      ),
+      array(
+        'nid' => $this->nodes[1]->nid,
+      ),
+    );
+    $this->column_map = array('nid' => 'nid');
+    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
+  }
+
+}
diff --git a/core/modules/options/lib/Drupal/options/Tests/Views/OptionsListFilterTest.php b/core/modules/options/lib/Drupal/options/Tests/Views/OptionsListFilterTest.php
new file mode 100644
index 0000000..9588e52
--- /dev/null
+++ b/core/modules/options/lib/Drupal/options/Tests/Views/OptionsListFilterTest.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\options\Tests\Views\OptionsListFilterTest.
+ *
+ * See \Drupal\field\Plugin\views\filter\ListField.
+ */
+
+namespace Drupal\options\Tests\Views;
+
+/**
+ * Tests options list filter for views.
+ */
+class OptionsListFilterTest extends OptionsTestBase {
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = array('test_options_list_filter');
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Options: Options list filter',
+      'description' => 'Tests the options text list field view filter.',
+      'group' => 'Views module integration',
+    );
+  }
+
+  /**
+   * Tests options list field filter.
+   */
+  function testViewsTestOptionsListFilter() {
+    $view = views_get_view('test_options_list_filter');
+    $this->executeView($view);
+    $resultset = array(
+      array(
+        'nid' => $this->nodes[0]->nid,
+      ),
+      array(
+        'nid' => $this->nodes[1]->nid,
+      ),
+    );
+    $this->column_map = array('nid' => 'nid');
+    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
+  }
+
+}
diff --git a/core/modules/options/lib/Drupal/options/Tests/Views/OptionsTestBase.php b/core/modules/options/lib/Drupal/options/Tests/Views/OptionsTestBase.php
new file mode 100644
index 0000000..860642f
--- /dev/null
+++ b/core/modules/options/lib/Drupal/options/Tests/Views/OptionsTestBase.php
@@ -0,0 +1,123 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\options\Tests\Views\OptionsTestBase.
+ */
+
+namespace Drupal\options\Tests\Views;
+
+use Drupal\Core\Language\Language;
+use Drupal\views\Tests\ViewTestBase;
+use Drupal\views\Tests\ViewTestData;
+
+/**
+ * Base class for options views tests.
+ */
+abstract class OptionsTestBase extends ViewTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('options', 'options_test_views');
+
+  /**
+   * Stores the nodes used for the different tests.
+   *
+   * @var array
+   */
+  protected $nodes = array();
+
+  /**
+   * Stores the field values used for the different tests.
+   *
+   * @var array
+   */
+  protected $field_values = array();
+
+  function setUp() {
+    parent::setUp();
+    $this->mockStandardInstall();
+
+    ViewTestData::importTestViews(get_class($this), array('options_test_views'));
+
+    $node = array();
+    $node['type'] = 'article';
+    $node['field_test_list_text'][]['value'] = $this->field_values[0];
+    $node['field_test_list_integer'][]['value'] = '0';
+    $this->nodes[] = $this->drupalCreateNode($node);
+    $this->nodes[] = $this->drupalCreateNode($node);
+  }
+
+  /**
+   * Provides a workaround for the inability to use the standard profile.
+   *
+   * @see http://drupal.org/node/1708692
+   */
+  protected function mockStandardInstall() {
+    $type = $this->drupalCreateContentType(array(
+      'type' => 'article',
+    ));
+    $this->field_values = array(
+      $this->randomName(),
+      $this->randomName(),
+    );
+
+    $this->field_names = array('field_test_list_text', 'field_test_list_integer');
+
+    // Create two field entities.
+    entity_create('field_entity', array(
+      'field_name' => $this->field_names[0],
+      'type' => 'list_text',
+      'cardinality' => 1,
+      'settings' => array(
+        'allowed_values' => array(
+          $this->field_values[0] => $this->field_values[0],
+          $this->field_values[1] => $this->field_values[1],
+        ),
+      ),
+    ))->save();
+    entity_create('field_entity', array(
+      'field_name' => $this->field_names[1],
+      'type' => 'list_integer',
+      'cardinality' => 1,
+      'settings' => array(
+        'allowed_values' => array(
+          $this->field_values[0],
+          $this->field_values[1],
+        ),
+      ),
+    ))->save();
+    foreach ($this->field_names as $this->field_name) {
+      $instance = entity_create('field_instance', array(
+        'field_name' => $this->field_name,
+        'entity_type' => 'node',
+        'label' => 'Test options list field',
+        'bundle' => 'article',
+      ))->save();
+
+      entity_get_form_display('node', 'article', 'default')
+        ->setComponent($this->field_name, array(
+          'type' => 'options_select',
+          'weight' => -4,
+        ))
+        ->save();
+
+      entity_get_display('node', 'article', 'default')
+        ->setComponent($this->field_name, array(
+          'type' => 'list_default',
+          'weight' => 10,
+        ))
+        ->save();
+      entity_get_display('node', 'article', 'teaser')
+        ->setComponent($this->field_name, array(
+          'type' => 'list_default',
+          'weight' => 10,
+        ))
+        ->save();
+    }
+
+  }
+}
diff --git a/core/modules/options/options.module b/core/modules/options/options.module
index e6ebdbe..121b3f5 100644
--- a/core/modules/options/options.module
+++ b/core/modules/options/options.module
@@ -10,6 +10,7 @@
 use Drupal\Core\Entity\Field\FieldDefinitionInterface;
 use Drupal\field\FieldInterface;
 use Drupal\field\FieldUpdateForbiddenException;
+use Drupal\field\FieldException;
 
 /**
  * Implements hook_help().
@@ -271,6 +272,43 @@ function options_allowed_values(FieldDefinitionInterface $field_definition, Enti
 }
 
 /**
+ * Returns the array of allowed values for a regular list field.
+ *
+ * 'Regular list field' means this field doesn't make use of dynamic allowed
+ * values. All list fields created from default field UI are regular list
+ * fields. On the other hand, if contrib modules have updated regular list
+ * fields into special list fields, which uses dynamic allowed values,
+ * options_allowed_values() should be used.
+ *
+ * The strings are not safe for output. Keys and values of the array should be
+ * sanitized through field_filter_xss() before being displayed.
+ *
+ * @param \Drupal\Core\Entity\Field\FieldDefinitionInterface $field_definition
+ *   The field definition.
+ *
+ * @return
+ *   The array of allowed values. Keys of the array are the raw stored values
+ *   (number or text), values of the array are the display labels.
+ *
+ * @see options_allowed_values()
+ */
+function options_regular_allowed_values(FieldDefinitionInterface $field_definition) {
+  $allowed_values = &drupal_static(__FUNCTION__, array());
+
+  if (!isset($allowed_values[$field_definition->getFieldName()])) {
+    // Check whether this is a regular list field.
+    $function = $field_definition->getFieldSetting('allowed_values_function');
+    if(!empty($function)) {
+      throw new FieldException("Attempt to get special list fields' allowed values in regular way.");
+    }
+    $values = $field_definition->getFieldSetting('allowed_values');
+    $allowed_values[$field_definition->getFieldName()] = $values;
+  }
+
+  return $allowed_values[$field_definition->getFieldName()];
+}
+
+/**
  * Parses a string of 'allowed values' into an array.
  *
  * @param $string
diff --git a/core/modules/options/options.views.inc b/core/modules/options/options.views.inc
new file mode 100644
index 0000000..f603c1f
--- /dev/null
+++ b/core/modules/options/options.views.inc
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * @file
+ * Provide Views data for options.module.
+ *
+ * @ingroup views_module_handlers
+ */
+
+/**
+ * Implements hook_field_views_data().
+ *
+ * Views integration for list fields. Have a different filter handler and
+ * argument handlers for list fields. This should allow to select values of
+ * the list.
+ */
+function options_field_views_data($field) {
+  $data = field_views_field_default_views_data($field);
+
+  $function = $field->getFieldSetting('allowed_values_function');
+  // If this field makes use of dynamic allowed options, we ignore the views setting.
+  if(!empty($function)) {
+    return $data;
+  }
+  foreach ($data as $table_name => $table_data) {
+    foreach ($table_data as $field_name => $field_data) {
+      if (isset($field_data['filter']) && $field_name != 'delta') {
+        $data[$table_name][$field_name]['filter']['id'] = 'list_field';
+      }
+      if (isset($field_data['argument']) && $field_name != 'delta') {
+        if ($field['type'] == 'list_text') {
+          $data[$table_name][$field_name]['argument']['id'] = 'text_list_field';
+        }
+        else {
+          $data[$table_name][$field_name]['argument']['id'] = 'number_list_field';
+        }
+      }
+    }
+  }
+  return $data;
+}
diff --git a/core/modules/options/tests/options_test_views/options_test_views.info.yml b/core/modules/options/tests/options_test_views/options_test_views.info.yml
new file mode 100644
index 0000000..be38cb2
--- /dev/null
+++ b/core/modules/options/tests/options_test_views/options_test_views.info.yml
@@ -0,0 +1,10 @@
+name: 'Options test views'
+type: module
+description: 'Provides default views for views options tests.'
+package: Testing
+version: VERSION
+core: 8.x
+dependencies:
+  - options
+  - views
+hidden: true
diff --git a/core/modules/options/tests/options_test_views/options_test_views.module b/core/modules/options/tests/options_test_views/options_test_views.module
new file mode 100644
index 0000000..b3d9bbc
--- /dev/null
+++ b/core/modules/options/tests/options_test_views/options_test_views.module
@@ -0,0 +1 @@
+<?php
diff --git a/core/modules/options/tests/options_test_views/test_views/views.view.test_options_list_argument.yml b/core/modules/options/tests/options_test_views/test_views/views.view.test_options_list_argument.yml
new file mode 100644
index 0000000..3d4c488
--- /dev/null
+++ b/core/modules/options/tests/options_test_views/test_views/views.view.test_options_list_argument.yml
@@ -0,0 +1,201 @@
+base_field: nid
+base_table: node
+core: 8.x
+description: ''
+status: '1'
+display:
+  block_1:
+    display_plugin: block
+    id: block_1
+    display_title: Block
+    position: '1'
+    display_options:
+      field:
+        title:
+          link_to_node: '1'
+  default:
+    display_plugin: default
+    id: default
+    display_title: Master
+    position: '1'
+    display_options:
+      access:
+        type: perm
+        options:
+          perm: 'access content'
+      cache:
+        type: none
+        options: {  }
+      query:
+        type: views_query
+        options:
+          disable_sql_rewrite: '0'
+          distinct: '0'
+          slave: '0'
+          query_comment: ''
+          query_tags: {  }
+      exposed_form:
+        type: basic
+        options:
+          submit_button: Apply
+          reset_button: '0'
+          reset_button_label: Reset
+          exposed_sorts_label: 'Sort by'
+          expose_sort_order: '1'
+          sort_asc_label: Asc
+          sort_desc_label: Desc
+      pager:
+        type: some
+        options:
+          items_per_page: '5'
+          offset: '0'
+      style:
+        type: default
+      row:
+        type: fields
+      fields:
+        title:
+          id: title
+          table: node_field_data
+          field: title
+          provider: node
+          label: ''
+          alter:
+            alter_text: '0'
+            make_link: '0'
+            absolute: '0'
+            trim: '0'
+            word_boundary: '0'
+            ellipsis: '0'
+            strip_tags: '0'
+            html: '0'
+          hide_empty: '0'
+          empty_zero: '0'
+          link_to_node: '1'
+          relationship: none
+          group_type: group
+          admin_label: ''
+          exclude: '0'
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: '1'
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: '1'
+          empty: ''
+          hide_alter_empty: '1'
+      filters:
+        status:
+          value: '1'
+          table: node_field_data
+          field: status
+          provider: node
+          id: status
+          expose:
+            operator: '0'
+          group: '1'
+        type:
+          id: type
+          table: node_field_data
+          field: type
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: in
+          value:
+            article: article
+          group: '1'
+          exposed: '0'
+          expose:
+            operator_id: '0'
+            label: ''
+            description: ''
+            use_operator: '0'
+            operator: ''
+            identifier: ''
+            required: '0'
+            remember: '0'
+            multiple: '0'
+            remember_roles:
+              authenticated: authenticated
+            reduce: '0'
+          is_grouped: '0'
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: '1'
+            widget: select
+            multiple: '0'
+            remember: '0'
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          plugin_id: bundle
+          provider: views
+      sorts:
+        created:
+          id: created
+          table: node_field_data
+          field: created
+          order: DESC
+          relationship: none
+          group_type: group
+          admin_label: ''
+          exposed: '0'
+          expose:
+            label: ''
+          granularity: second
+      title: 'test options list argument'
+      header: {  }
+      footer: {  }
+      empty: {  }
+      relationships: {  }
+      arguments:
+        field_test_list_integer_value:
+          id: field_test_list_integer_value
+          table: field_data_field_test_list_integer
+          field: field_test_list_integer_value
+          relationship: none
+          group_type: group
+          admin_label: ''
+          default_action: summary
+          exception:
+            value: all
+            title_enable: '0'
+            title: All
+          title_enable: '0'
+          title: ''
+          breadcrumb_enable: '0'
+          breadcrumb: ''
+          default_argument_type: fixed
+          default_argument_options:
+            argument: '0'
+          default_argument_skip_url: '0'
+          summary_options:
+            base_path: ''
+            items_per_page: '25'
+            count: '0'
+            override: '0'
+          summary:
+            sort_order: asc
+            number_of_records: '0'
+            format: default_summary
+            human: '1'
+          specify_validation: '0'
+          validate:
+            type: none
+            fail: 'not found'
+          validate_options: {  }
+          break_phrase: '0'
+          not: '0'
+          plugin_id: number_list_field
+          provider: options
+label: 'test options list argument'
+module: views
+id: test_options_list_argument
+tag: ''
+uuid: 985a6d87-50aa-4b64-9750-80aa69339dcb
+langcode: en
diff --git a/core/modules/options/tests/options_test_views/test_views/views.view.test_options_list_filter.yml b/core/modules/options/tests/options_test_views/test_views/views.view.test_options_list_filter.yml
new file mode 100644
index 0000000..d33ee75
--- /dev/null
+++ b/core/modules/options/tests/options_test_views/test_views/views.view.test_options_list_filter.yml
@@ -0,0 +1,203 @@
+base_field: nid
+base_table: node
+core: 8.x
+description: ''
+status: '1'
+display:
+  default:
+    display_plugin: default
+    id: default
+    display_title: Master
+    position: '1'
+    display_options:
+      access:
+        type: perm
+        options:
+          perm: 'access content'
+      cache:
+        type: none
+        options: {  }
+      query:
+        type: views_query
+        options:
+          disable_sql_rewrite: '0'
+          distinct: '0'
+          slave: '0'
+          query_comment: ''
+          query_tags: {  }
+      exposed_form:
+        type: basic
+        options:
+          submit_button: Apply
+          reset_button: '0'
+          reset_button_label: Reset
+          exposed_sorts_label: 'Sort by'
+          expose_sort_order: '1'
+          sort_asc_label: Asc
+          sort_desc_label: Desc
+      pager:
+        type: some
+        options:
+          items_per_page: '5'
+          offset: '0'
+      style:
+        type: default
+      row:
+        type: fields
+      fields:
+        title:
+          id: title
+          table: node_field_data
+          field: title
+          provider: node
+          label: ''
+          alter:
+            alter_text: '0'
+            make_link: '0'
+            absolute: '0'
+            trim: '0'
+            word_boundary: '0'
+            ellipsis: '0'
+            strip_tags: '0'
+            html: '0'
+          hide_empty: '0'
+          empty_zero: '0'
+          link_to_node: '1'
+          relationship: none
+          group_type: group
+          admin_label: ''
+          exclude: '0'
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: '1'
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: '1'
+          empty: ''
+          hide_alter_empty: '1'
+      filters:
+        status:
+          value: '1'
+          table: node_field_data
+          field: status
+          provider: node
+          id: status
+          expose:
+            operator: '0'
+          group: '1'
+        field_test_list_text_value:
+          id: field_test_list_text_value
+          table: field_data_field_test_list_text
+          field: field_test_list_text_value
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: or
+          value:
+            man: man
+            woman: woman
+          group: '1'
+          exposed: '0'
+          expose:
+            operator_id: '0'
+            label: ''
+            description: ''
+            use_operator: '0'
+            operator: ''
+            identifier: ''
+            required: '0'
+            remember: '0'
+            multiple: '0'
+            remember_roles:
+              authenticated: authenticated
+            reduce: '0'
+          is_grouped: '0'
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: '1'
+            widget: select
+            multiple: '0'
+            remember: '0'
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          reduce_duplicates: '0'
+          plugin_id: list_field
+          provider: options
+        type:
+          id: type
+          table: node_field_data
+          field: type
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: in
+          value:
+            article: article
+          group: '1'
+          exposed: '0'
+          expose:
+            operator_id: '0'
+            label: ''
+            description: ''
+            use_operator: '0'
+            operator: ''
+            identifier: ''
+            required: '0'
+            remember: '0'
+            multiple: '0'
+            remember_roles:
+              authenticated: authenticated
+            reduce: '0'
+          is_grouped: '0'
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: '1'
+            widget: select
+            multiple: '0'
+            remember: '0'
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          plugin_id: bundle
+          provider: views
+      sorts:
+        created:
+          id: created
+          table: node_field_data
+          field: created
+          order: DESC
+          relationship: none
+          group_type: group
+          admin_label: ''
+          exposed: '0'
+          expose:
+            label: ''
+          granularity: second
+      title: test_options_list_filter
+      header: {  }
+      footer: {  }
+      empty: {  }
+      relationships: {  }
+      arguments: {  }
+  block_1:
+    display_plugin: block
+    id: block_1
+    display_title: Block
+    position: '1'
+    display_options:
+      field:
+        title:
+          link_to_node: '1'
+label: test_options_list_filter
+module: views
+id: test_options_list_filter
+tag: ''
+uuid: 5afd0658-9744-428d-b400-0d98428a558c
+langcode: en
