diff --git a/core/lib/Drupal/Core/Field/Annotation/FieldType.php b/core/lib/Drupal/Core/Field/Annotation/FieldType.php
index 90d0cf7..5bf9bb1 100644
--- a/core/lib/Drupal/Core/Field/Annotation/FieldType.php
+++ b/core/lib/Drupal/Core/Field/Annotation/FieldType.php
@@ -101,13 +101,6 @@ class FieldType extends DataType {
   public $default_formatter;
 
   /**
-   * A boolean stating that fields of this type are configurable.
-   *
-   * @var boolean
-   */
-  public $configurable = TRUE;
-
-  /**
    * A boolean stating that fields of this type cannot be created through the UI.
    *
    * @var boolean
diff --git a/core/lib/Drupal/Core/Field/FieldTypePluginManager.php b/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
index 75ea2fd..04f068f 100644
--- a/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
+++ b/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
@@ -52,11 +52,12 @@ public function __construct(\Traversable $namespaces, CacheBackendInterface $cac
   public function processDefinition(&$definition, $plugin_id) {
     parent::processDefinition($definition, $plugin_id);
     if (!isset($definition['list_class'])) {
-      if ($definition['configurable']) {
-        $definition['list_class'] = '\Drupal\Core\Field\ConfigFieldItemList';
+      // Do not allow to configure a default value if "no_ui" is TRUE.
+      if ($definition['no_ui']) {
+        $definition['list_class'] = '\Drupal\Core\Field\FieldItemList';
       }
       else {
-        $definition['list_class'] = '\Drupal\Core\Field\FieldItemList';
+        $definition['list_class'] = '\Drupal\Core\Field\ConfigFieldItemList';
       }
     }
   }
@@ -77,14 +78,4 @@ public function getDefaultInstanceSettings($type) {
     return isset($info['instance_settings']) ? $info['instance_settings'] : array();
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getConfigurableDefinitions() {
-    $definitions = $this->getDefinitions();
-    return array_filter($definitions, function ($definition) {
-      return $definition['configurable'];
-    });
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php b/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php
index 4d2d747..f3f40e8 100644
--- a/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php
+++ b/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php
@@ -38,12 +38,4 @@ public function getDefaultInstanceSettings($type);
    */
   public function getDefaultSettings($type);
 
-  /**
-   * Gets the definition of all field types that are configurable.
-   *
-   * @return array
-   *   An array of field type definitions.
-   */
-  public function getConfigurableDefinitions();
-
 }
diff --git a/core/lib/Drupal/Core/Field/FormatterPluginManager.php b/core/lib/Drupal/Core/Field/FormatterPluginManager.php
index c30ab0e..8c2a959 100644
--- a/core/lib/Drupal/Core/Field/FormatterPluginManager.php
+++ b/core/lib/Drupal/Core/Field/FormatterPluginManager.php
@@ -95,8 +95,8 @@ public function createInstance($plugin_id, array $configuration) {
    *     - settings: (array) Settings specific to the formatter. Each setting
    *       defaults to the default value specified in the formatter definition.
    *
-   * @return \Drupal\Core\Field\FormatterInterface
-   *   A formatter object.
+   * @return \Drupal\Core\Field\FormatterInterface|null
+   *   A formatter object or NULL when plugin is not found.
    */
   public function getInstance(array $options) {
     $configuration = $options['configuration'];
@@ -117,6 +117,9 @@ public function getInstance(array $options) {
     if (!isset($definition['class']) || !in_array($field_type, $definition['field_types'])) {
       // Grab the default widget for the field type.
       $field_type_definition = $this->fieldTypeManager->getDefinition($field_type);
+      if (empty($field_type_definition['default_formatter'])) {
+        return NULL;
+      }
       $plugin_id = $field_type_definition['default_formatter'];
     }
 
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/BooleanItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/BooleanItem.php
index 1d9884f..560d3a9 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/BooleanItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/BooleanItem.php
@@ -18,7 +18,7 @@
  *   id = "boolean",
  *   label = @Translation("Boolean"),
  *   description = @Translation("An entity field containing a boolean value."),
- *   configurable = FALSE
+ *   no_ui = TRUE
  * )
  */
 class BooleanItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/DateItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/DateItem.php
index c1276dd..075bbfd 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/DateItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/DateItem.php
@@ -17,7 +17,7 @@
  *   id = "date",
  *   label = @Translation("Date"),
  *   description = @Translation("An entity field containing a date value."),
- *   configurable = FALSE
+ *   no_ui = TRUE
  * )
  */
 class DateItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EmailItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EmailItem.php
index 9e68719..c48664b 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EmailItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EmailItem.php
@@ -18,7 +18,7 @@
  *   id = "email",
  *   label = @Translation("E-mail"),
  *   description = @Translation("An entity field containing an e-mail value."),
- *   configurable = FALSE
+ *   no_ui = TRUE
  * )
  */
 class EmailItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
index 31a7d8e..a54f8bb 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
@@ -24,7 +24,7 @@
  *   id = "entity_reference",
  *   label = @Translation("Entity reference"),
  *   description = @Translation("An entity field containing an entity reference."),
- *   configurable = FALSE,
+ *   no_ui = TRUE,
  *   constraints = {"ValidReference" = TRUE}
  * )
  */
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/FloatItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/FloatItem.php
index 045af1c..31e2f28 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/FloatItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/FloatItem.php
@@ -18,7 +18,7 @@
  *   id = "float",
  *   label = @Translation("Float"),
  *   description = @Translation("An entity field containing an float value."),
- *   configurable = FALSE
+ *   no_ui = TRUE
  * )
  */
 class FloatItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/IntegerItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/IntegerItem.php
index ec49cdb..1c7a5a8 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/IntegerItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/IntegerItem.php
@@ -18,7 +18,7 @@
  *   id = "integer",
  *   label = @Translation("Integer"),
  *   description = @Translation("An entity field containing an integer value."),
- *   configurable = FALSE
+ *   no_ui = TRUE
  * )
  */
 class IntegerItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php
index 3bae65b..63cb645 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/LanguageItem.php
@@ -19,7 +19,7 @@
  *   id = "language",
  *   label = @Translation("Language"),
  *   description = @Translation("An entity field referencing a language."),
- *   configurable = FALSE,
+ *   no_ui = TRUE,
  *   constraints = {
  *     "ComplexData" = {
  *       "value" = {"Length" = {"max" = 12}}
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/MapItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/MapItem.php
index 698e5b8..ee19099 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/MapItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/MapItem.php
@@ -17,7 +17,7 @@
  *   id = "map",
  *   label = @Translation("Map"),
  *   description = @Translation("An entity field containing a map value."),
- *   configurable = FALSE
+ *   no_ui = TRUE
  * )
  */
 class MapItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php
index c5f6c77..62babc9 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItem.php
@@ -21,7 +21,7 @@
  *   settings = {
  *     "max_length" = "255"
  *   },
- *   configurable = FALSE
+ *   no_ui = TRUE
  * )
  */
 class StringItem extends FieldItemBase {
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php
index d8c0b32..602a149 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UriItem.php
@@ -24,7 +24,7 @@
  *   settings = {
  *     "max_length" = "2048"
  *   },
- *   configurable = FALSE
+ *   no_ui = TRUE
  * )
  */
 class UriItem extends StringItem {
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UuidItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UuidItem.php
index 27ca9e9..90b0bca 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UuidItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/UuidItem.php
@@ -19,7 +19,7 @@
  *   settings = {
  *     "max_length" = "128"
  *   },
- *   configurable = FALSE
+ *   no_ui = TRUE
  * )
  */
 class UuidItem extends StringItem {
diff --git a/core/lib/Drupal/Core/Field/WidgetPluginManager.php b/core/lib/Drupal/Core/Field/WidgetPluginManager.php
index 5ca455a..10ec063 100644
--- a/core/lib/Drupal/Core/Field/WidgetPluginManager.php
+++ b/core/lib/Drupal/Core/Field/WidgetPluginManager.php
@@ -75,8 +75,8 @@ public function __construct(\Traversable $namespaces, CacheBackendInterface $cac
    *     - settings: (array) Settings specific to the widget. Each setting
    *       defaults to the default value specified in the widget definition.
    *
-   * @return \Drupal\Core\Field\WidgetInterface
-   *   A Widget object.
+   * @return \Drupal\Core\Field\WidgetInterface|null
+   *   A Widget object or NULL when plugin is not found.
    */
   public function getInstance(array $options) {
     // Fill in defaults for missing properties.
@@ -103,6 +103,9 @@ public function getInstance(array $options) {
     if (!isset($definition['class']) || !in_array($field_type, $definition['field_types'])) {
       // Grab the default widget for the field type.
       $field_type_definition = $this->fieldTypeManager->getDefinition($field_type);
+      if (empty($field_type_definition['default_widget'])) {
+        return NULL;
+      }
       $plugin_id = $field_type_definition['default_widget'];
     }
 
diff --git a/core/modules/email/email.module b/core/modules/email/email.module
index f74da6f..f2d9df4 100644
--- a/core/modules/email/email.module
+++ b/core/modules/email/email.module
@@ -31,7 +31,7 @@ function email_help($path, $arg) {
  * Implements hook_field_info_alter().
  */
 function email_field_info_alter(&$info) {
-  $info['email']['configurable'] = TRUE;
+  $info['email']['no_ui'] = FALSE;
   $info['email']['class'] = '\Drupal\email\ConfigurableEmailItem';
   $info['email']['list_class'] = '\Drupal\Core\Field\ConfigFieldItemList';
   $info['email']['default_widget'] = 'email_default';
diff --git a/core/modules/entity_reference/entity_reference.module b/core/modules/entity_reference/entity_reference.module
index 7f79580..33412a1 100644
--- a/core/modules/entity_reference/entity_reference.module
+++ b/core/modules/entity_reference/entity_reference.module
@@ -40,7 +40,7 @@ function entity_reference_help($path, $arg) {
  */
 function entity_reference_field_info_alter(&$info) {
   // Make the entity reference field configurable.
-  $info['entity_reference']['configurable'] = TRUE;
+  $info['entity_reference']['no_ui'] = FALSE;
   $info['entity_reference']['class'] = '\Drupal\entity_reference\ConfigurableEntityReferenceItem';
   $info['entity_reference']['list_class'] = '\Drupal\entity_reference\Plugin\Field\FieldType\ConfigurableEntityReferenceFieldItemList';
   $info['entity_reference']['settings']['target_type'] = \Drupal::moduleHandler()->moduleExists('node') ? 'node' : 'user';
diff --git a/core/modules/field/field.module b/core/modules/field/field.module
index 6a8b941..e687d7b 100644
--- a/core/modules/field/field.module
+++ b/core/modules/field/field.module
@@ -92,7 +92,7 @@ function field_help($path, $arg) {
       $items = array();
       $info = system_get_info('module');
       $field_widgets = \Drupal::service('plugin.manager.field.widget')->getDefinitions();
-      $field_types = \Drupal::service('plugin.manager.field.field_type')->getConfigurableDefinitions();
+      $field_types = \Drupal::service('plugin.manager.field.field_type')->getDefinitions();
       foreach (array_merge($field_types, $field_widgets) as $plugin) {
         $providers[] = $plugin['provider'];
       }
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
index 8b67798..28a6919 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
@@ -24,7 +24,7 @@ function testFieldInfo() {
     // Test that field_test module's fields, widgets, and formatters show up.
 
     $field_test_info = $this->getExpectedFieldTypeDefinition();
-    $entity_type = \Drupal::service('plugin.manager.field.field_type')->getConfigurableDefinitions();
+    $entity_type = \Drupal::service('plugin.manager.field.field_type')->getDefinitions();
     foreach ($field_test_info as $t_key => $field_type) {
       foreach ($field_type as $key => $val) {
         $this->assertEqual($entity_type[$t_key][$key], $val, format_string('Field type %t_key key %key is %value', array('%t_key' => $t_key, '%key' => $key, '%value' => print_r($val, TRUE))));
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php
index de4ddd9..7d3299e 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php
@@ -136,7 +136,7 @@ protected function getPluginOptions($field_type) {
    * {@inheritdoc}
    */
   protected function getDefaultPlugin($field_type) {
-    return $this->fieldTypes[$field_type]['default_formatter'];
+    return isset($this->fieldTypes[$field_type]['default_formatter']) ? $this->fieldTypes[$field_type]['default_formatter'] : NULL;
   }
 
   /**
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php
index 2ed54e8..e81f1c6 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php
@@ -53,7 +53,7 @@
   public function __construct(EntityManagerInterface $entity_manager, FieldTypePluginManagerInterface $field_type_manager, PluginManagerBase $plugin_manager) {
     parent::__construct($entity_manager);
 
-    $this->fieldTypes = $field_type_manager->getConfigurableDefinitions();
+    $this->fieldTypes = $field_type_manager->getDefinitions();
     $this->pluginManager = $plugin_manager;
   }
 
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FieldListController.php b/core/modules/field_ui/lib/Drupal/field_ui/FieldListController.php
index 9ccfe22..f5eeb9e 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldListController.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldListController.php
@@ -63,7 +63,7 @@ public function __construct(EntityTypeInterface $entity_type, EntityManagerInter
     $this->entityManager = $entity_manager;
     $this->bundles = entity_get_bundles();
     $this->fieldTypeManager = $field_type_manager;
-    $this->fieldTypes = $this->fieldTypeManager->getConfigurableDefinitions();
+    $this->fieldTypes = $this->fieldTypeManager->getDefinitions();
   }
 
   /**
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
index e281f0e..93ff08c 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
@@ -89,7 +89,7 @@ public function buildForm(array $form, array &$form_state, $entity_type_id = NUL
 
     // Gather bundle information.
     $instances = field_info_instances($this->entity_type, $this->bundle);
-    $field_types = $this->fieldTypeManager->getConfigurableDefinitions();
+    $field_types = $this->fieldTypeManager->getDefinitions();
 
     // Field prefix.
     $field_prefix = \Drupal::config('field_ui.settings')->get('field_prefix');
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php
index 870436f..6c8e91e 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php
@@ -8,6 +8,7 @@
 namespace Drupal\field_ui\Form;
 
 use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Field\ConfigFieldItemListInterface;
 use Drupal\Core\Form\FormBase;
 use Drupal\Component\Utility\String;
 use Drupal\field\FieldInstanceInterface;
@@ -137,8 +138,8 @@ public function buildForm(array $form, array &$form_state, FieldInstanceInterfac
     $form['instance']['settings'] = $items[0]->instanceSettingsForm($form, $form_state);
     $form['instance']['settings']['#weight'] = 10;
 
-    // Add handling for default value.
-    if ($element = $items->defaultValuesForm($form, $form_state)) {
+    // Configure a default value if field implements.
+    if ($items instanceof ConfigFieldItemListInterface && ($element = $items->defaultValuesForm($form, $form_state))) {
       $element += array(
         '#type' => 'details',
         '#title' => $this->t('Default value'),
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php
index 0b52981..1978429 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php
@@ -103,7 +103,7 @@ protected function getPluginOptions($field_type) {
    * {@inheritdoc}
    */
   protected function getDefaultPlugin($field_type) {
-    return $this->fieldTypes[$field_type]['default_widget'];
+    return isset($this->fieldTypes[$field_type]['default_widget']) ? $this->fieldTypes[$field_type]['default_widget'] : NULL;
   }
 
   /**
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
index f86f50a..4487f9f 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
@@ -462,7 +462,7 @@ function testHiddenFields() {
     // Check that non-configurable fields are not available.
     $field_types = \Drupal::service('plugin.manager.field.field_type')->getDefinitions();
     foreach ($field_types as $field_type => $definition) {
-      if ($definition['configurable'] && empty($definition['no_ui'])) {
+      if (empty($definition['no_ui'])) {
         $this->assertTrue($this->xpath('//select[@id="edit-fields-add-new-field-type"]//option[@value=:field_type]', array(':field_type' => $field_type)), String::format('Configurable field type @field_type is available.', array('@field_type' => $field_type)));
       }
       else {
diff --git a/core/modules/path/lib/Drupal/path/Plugin/Field/FieldType/PathItem.php b/core/modules/path/lib/Drupal/path/Plugin/Field/FieldType/PathItem.php
index 6d75cac..75212fc 100644
--- a/core/modules/path/lib/Drupal/path/Plugin/Field/FieldType/PathItem.php
+++ b/core/modules/path/lib/Drupal/path/Plugin/Field/FieldType/PathItem.php
@@ -18,7 +18,7 @@
  *   id = "path",
  *   label = @Translation("Path"),
  *   description = @Translation("An entity field containing a path alias and related data."),
- *   configurable = FALSE
+ *   no_ui = TRUE
  * )
  */
 class PathItem extends FieldItemBase {
