diff --git a/core/lib/Drupal/Core/Field/FieldTypePluginManager.php b/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
index 07aaceb..25484a2 100644
--- a/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
+++ b/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
@@ -19,6 +19,13 @@
 class FieldTypePluginManager extends DefaultPluginManager implements FieldTypePluginManagerInterface {
 
   /**
+   * An array of field type options.
+   *
+   * @var array
+   */
+  protected $fieldTypeOptions = array();
+
+  /**
    * Constructs the FieldTypePluginManager object
    *
    * @param \Traversable $namespaces
@@ -81,4 +88,25 @@ public function getUiDefinitions() {
     });
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getOptions($type = NULL) {
+    if (empty($this->fieldTypeOptions)) {
+      $options = array();
+      // Gather valid field types.
+      foreach ($this->getUiDefinitions() as $field_type => $definition) {
+        $options[$field_type] = $definition['label'];
+      }
+      asort($options);
+      $this->fieldTypeOptions = $options;
+    }
+
+    if (isset($type)) {
+      return !empty($this->fieldTypeOptions[$type]) ? $this->fieldTypeOptions[$type] : array();
+    }
+
+    return $this->fieldTypeOptions;
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php b/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php
index f9883b8..66ac5a3 100644
--- a/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php
+++ b/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php
@@ -46,4 +46,14 @@ public function getDefaultSettings($type);
    */
   public function getUiDefinitions();
 
+  /**
+   * Returns an array of field type options for a field type.
+   * This will only return fields that can be added in the UI and have a default
+   * widget and formatter.
+   *
+   * @return array
+   *   Nested array of all field labels keyed by field type machine name.
+   */
+  public function getOptions();
+
 }
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 3c48dfb..4da9089 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
@@ -165,15 +165,7 @@ public function buildForm(array $form, array &$form_state, $entity_type_id = NUL
       }
     }
 
-    // Gather valid field types.
-    $field_type_options = array();
-    foreach ($field_types as $name => $field_type) {
-      // Skip field types which should not be added via user interface.
-      if (empty($field_type['no_ui'])) {
-        $field_type_options[$name] = $field_type['label'];
-      }
-    }
-    asort($field_type_options);
+    $field_type_options = $this->fieldTypeManager->getOptions();
 
     // Additional row: add new field.
     if ($field_type_options) {
