diff --git a/core/lib/Drupal/Core/Entity/Field/FieldTypePluginManager.php b/core/lib/Drupal/Core/Entity/Field/FieldTypePluginManager.php
index a8c1ef5dd1de6653c56014f1021d7c4ea825afb7..0be215e2c4fe652e69426850dc11e4a092a214fe 100644
--- a/core/lib/Drupal/Core/Entity/Field/FieldTypePluginManager.php
+++ b/core/lib/Drupal/Core/Entity/Field/FieldTypePluginManager.php
@@ -54,4 +54,34 @@ public function __construct(\Traversable $namespaces, CacheBackendInterface $cac
     $this->discovery = new LegacyFieldTypeDiscoveryDecorator($this->discovery, $module_handler);
   }
 
+  /**
+   * Returns the default field-level settings for a field type.
+   *
+   * @param string $type
+   *   A field type name.
+   *
+   * @return array
+   *   The type's default settings, as provided by the plugin
+   *   definition, or an empty array if type or settings are undefined.
+   */
+  public function getDefaultSettings($type) {
+    $info = $this->getDefinition($type);
+    return isset($info['settings']) ? $info['settings'] : array();
+  }
+
+  /**
+   * Returns the default instance-level settings for a field type.
+   *
+   * @param string $type
+   *   A field type name.
+   *
+   * @return array
+   *   The instance's default settings, as provided by the plugin
+   *   definition, or an empty array if type or settings are undefined.
+   */
+  public function getDefaultInstanceSettings($type) {
+    $info = $this->getDefinition($type);
+    return isset($info['instance_settings']) ? $info['instance_settings'] : array();
+  }
+
 }
diff --git a/core/modules/edit/edit.services.yml b/core/modules/edit/edit.services.yml
index eb8677e12556711c308175606b86e2ab0e6bb3f1..646878ec5e5a8d520c5a074c1d6d85285519e898 100644
--- a/core/modules/edit/edit.services.yml
+++ b/core/modules/edit/edit.services.yml
@@ -12,7 +12,7 @@ services:
       - { name: access_check }
   edit.editor.selector:
     class: Drupal\edit\EditorSelector
-    arguments: ['@plugin.manager.edit.editor']
+    arguments: ['@plugin.manager.edit.editor', '@plugin.manager.field.formatter']
   edit.metadata.generator:
     class: Drupal\edit\MetadataGenerator
     arguments: ['@access_check.edit.entity_field', '@edit.editor.selector', '@plugin.manager.edit.editor']
diff --git a/core/modules/edit/lib/Drupal/edit/EditorSelector.php b/core/modules/edit/lib/Drupal/edit/EditorSelector.php
index 2636f381b615ee8e4ed8dadac69a4d16fe8f1967..b59a68c95f24697b6fdddfa2dee030681f9ab376 100644
--- a/core/modules/edit/lib/Drupal/edit/EditorSelector.php
+++ b/core/modules/edit/lib/Drupal/edit/EditorSelector.php
@@ -10,6 +10,7 @@
 use Drupal\Component\Plugin\PluginManagerInterface;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Entity\Field\FieldDefinitionInterface;
+use Drupal\field\Plugin\Type\Formatter\FormatterPluginManager;
 
 /**
  * Selects an in-place editor (an Editor plugin) for a field.
@@ -23,6 +24,13 @@ class EditorSelector implements EditorSelectorInterface {
    */
   protected $editorManager;
 
+  /**
+   * The manager for formatter plugins.
+   *
+   * @var \Drupal\field\Plugin\Type\Formatter\FormatterPluginManager.
+   */
+  protected $formatterManager;
+
   /**
    * A list of alternative editor plugin IDs, keyed by editor plugin ID.
    *
@@ -35,9 +43,12 @@ class EditorSelector implements EditorSelectorInterface {
    *
    * @param \Drupal\Component\Plugin\PluginManagerInterface
    *   The manager for editor plugins.
+   * @param \Drupal\field\Plugin\Type\Formatter\FormatterPluginManager
+   *   The manager for formatter plugins.
    */
-  public function __construct(PluginManagerInterface $editor_manager) {
+  public function __construct(PluginManagerInterface $editor_manager, FormatterPluginManager $formatter_manager) {
     $this->editorManager = $editor_manager;
+    $this->formatterManager = $formatter_manager;
   }
 
   /**
@@ -62,7 +73,7 @@ public function getEditor($formatter_type, FieldDefinitionInterface $field_defin
     // 'direct' editor. If the formatter doesn't specify, fall back to the
     // 'form' editor, since that can work for any field. Formatter definitions
     // can use 'disabled' to explicitly opt out of in-place editing.
-    $formatter_info = field_info_formatter_types($formatter_type);
+    $formatter_info = $this->formatterManager->getDefinition($formatter_type);
     $editor_id = $formatter_info['edit']['editor'];
     if ($editor_id === 'disabled') {
       return;
diff --git a/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php b/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
index c1982c5b6f4ffbbc7817e455392421b7073ca846..c04733a8b938553be39c8eaca7d4a598fc20ed45 100644
--- a/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
+++ b/core/modules/edit/lib/Drupal/edit/Tests/EditorSelectionTest.php
@@ -41,7 +41,7 @@ function setUp() {
     parent::setUp();
 
     $this->editorManager = $this->container->get('plugin.manager.edit.editor');
-    $this->editorSelector = new EditorSelector($this->editorManager);
+    $this->editorSelector = new EditorSelector($this->editorManager, $this->container->get('plugin.manager.field.formatter'));
   }
 
   /**
diff --git a/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php b/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
index a9309884102b889a1e378f88b565e551e594a495..5860065abb7acb8b8b404eb975fa07f8a2e7fdaf 100644
--- a/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
+++ b/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
@@ -59,7 +59,7 @@ function setUp() {
 
     $this->editorManager = $this->container->get('plugin.manager.edit.editor');
     $this->accessChecker = new MockEditEntityFieldAccessCheck();
-    $this->editorSelector = new EditorSelector($this->editorManager);
+    $this->editorSelector = new EditorSelector($this->editorManager, $this->container->get('plugin.manager.field.formatter'));
     $this->metadataGenerator = new MetadataGenerator($this->accessChecker, $this->editorSelector, $this->editorManager);
   }
 
diff --git a/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php b/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php
index d2ec5e6abd98d2d8549976a2906fdf92a637b67d..463964c161715c1bcbf28cde9ef973dd7b625b78 100644
--- a/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php
+++ b/core/modules/editor/lib/Drupal/editor/Tests/EditIntegrationTest.php
@@ -124,7 +124,7 @@ protected function getSelectedEditor($items, $field_name, $view_mode = 'default'
    */
   function testEditorSelection() {
     $this->editorManager = new InPlaceEditorManager($this->container->get('container.namespaces'));
-    $this->editorSelector = new EditorSelector($this->editorManager);
+    $this->editorSelector = new EditorSelector($this->editorManager, $this->container->get('plugin.manager.field.formatter'));
 
     // Pretend there is an entity with these items for the field.
     $items = array(array('value' => 'Hello, world!', 'format' => 'filtered_html'));
@@ -149,7 +149,7 @@ function testEditorSelection() {
   function testMetadata() {
     $this->editorManager = new InPlaceEditorManager($this->container->get('container.namespaces'));
     $this->accessChecker = new MockEditEntityFieldAccessCheck();
-    $this->editorSelector = new EditorSelector($this->editorManager);
+    $this->editorSelector = new EditorSelector($this->editorManager, $this->container->get('plugin.manager.field.formatter'));
     $this->metadataGenerator = new MetadataGenerator($this->accessChecker, $this->editorSelector, $this->editorManager);
 
     // Create an entity with values for the field.
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
index 6a0ddc55d98c9449e26c9d2a5c87270259483fc5..fdeaa1bd8d03cb3a5505031d0955ccee9c70a5bf 100644
--- a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
@@ -155,21 +155,21 @@ public function testFieldComponent() {
 
     // Check that providing no options results in default values being used.
     $display->setComponent($field_name);
-    $field_type_info = field_info_field_types($field->type);
+    $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field->type);
     $default_formatter = $field_type_info['default_formatter'];
-    $default_settings = field_info_formatter_settings($default_formatter);
+    $formatter_settings =  \Drupal::service('plugin.manager.field.formatter')->getDefinition($default_formatter);
     $expected = array(
       'weight' => 0,
       'label' => 'above',
       'type' => $default_formatter,
-      'settings' => $default_settings,
+      'settings' => $formatter_settings['settings'],
     );
     $this->assertEqual($display->getComponent($field_name), $expected);
 
     // Check that the getFormatter() method returns the correct formatter plugin.
     $formatter = $display->getRenderer($field_name);
     $this->assertEqual($formatter->getPluginId(), $default_formatter);
-    $this->assertEqual($formatter->getSettings(), $default_settings);
+    $this->assertEqual($formatter->getSettings(), $formatter_settings['settings']);
 
     // Check that the formatter is statically persisted, by assigning an
     // arbitrary property and reading it back.
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php
index a74c96699a7f162a14ac9e483ec45e11c81bd564..8d7df462a65f58bacf4e511f4c28bb48f37346e0 100644
--- a/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityFormDisplayTest.php
@@ -77,20 +77,20 @@ public function testFieldComponent() {
 
     // Check that providing no options results in default values being used.
     $form_display->setComponent($field_name);
-    $field_type_info = field_info_field_types($field->type);
+    $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field->type);
     $default_widget = $field_type_info['default_widget'];
-    $default_settings = field_info_widget_settings($default_widget);
+    $widget_settings = \Drupal::service('plugin.manager.field.widget')->getDefinition($default_widget);
     $expected = array(
       'weight' => 0,
       'type' => $default_widget,
-      'settings' => $default_settings,
+      'settings' => $widget_settings['settings'],
     );
     $this->assertEqual($form_display->getComponent($field_name), $expected);
 
     // Check that the getWidget() method returns the correct widget plugin.
     $widget = $form_display->getRenderer($field_name);
     $this->assertEqual($widget->getPluginId(), $default_widget);
-    $this->assertEqual($widget->getSettings(), $default_settings);
+    $this->assertEqual($widget->getSettings(), $widget_settings['settings']);
 
     // Check that the widget is statically persisted, by assigning an
     // arbitrary property and reading it back.
diff --git a/core/modules/entity_reference/entity_reference.module b/core/modules/entity_reference/entity_reference.module
index a13d5cddb4aaffc22f171badb3ddc53a2a04ae96..52bb75f5de3e61dd6a18950a0ecbedc5c0efa387 100644
--- a/core/modules/entity_reference/entity_reference.module
+++ b/core/modules/entity_reference/entity_reference.module
@@ -389,7 +389,7 @@ function entity_reference_query_entity_reference_alter(AlterableInterface $query
  */
 function entity_reference_create_instance($entity_type, $bundle, $field_name, $field_label, $target_entity_type, $selection_handler = 'default', $selection_handler_settings = array()) {
   // If a field type we know should exist isn't found, clear the field cache.
-  if (!field_info_field_types('entity_reference')) {
+  if (!\Drupal::service('plugin.manager.entity.field.field_type')->getDefinition('entity_reference')) {
     field_cache_clear();
   }
 
diff --git a/core/modules/field/field.info.inc b/core/modules/field/field.info.inc
index 0ef47abf94cac9bfa02f7bd43dba3356ef56d671..824d74e7b66c04610b2ffce94326620b6be1b835 100644
--- a/core/modules/field/field.info.inc
+++ b/core/modules/field/field.info.inc
@@ -130,7 +130,7 @@ function _field_info_collate_types_reset() {
 function field_behaviors_widget($op, $instance) {
   $info = array();
   if ($component = entity_get_form_display($instance['entity_type'], $instance['bundle'], 'default')->getComponent($instance['field_name'])) {
-    $info = field_info_widget_types($component['type']);
+    $info = \Drupal::service('plugin.manager.field.widget')->getDefinition($component['type']);
   }
   return isset($info[$op]) ? $info[$op] : FIELD_BEHAVIOR_DEFAULT;
 }
@@ -503,13 +503,11 @@ function field_info_extra_fields($entity_type, $bundle, $context) {
  *   The field type's default settings, or an empty array if type or settings
  *   are not defined.
  *
- * @deprecated as of Drupal 8.0. Use the 'settings' property in the definition
- *   array returned by
- *   Drupal::service('plugin.manager.entity.field.field_type')->getDefinition()
+ * @deprecated as of Drupal 8.0. Use
+ *   Drupal::service('plugin.manager.entity.field.field_type')->getDefaultSettings()
  */
 function field_info_field_settings($type) {
-  $info = field_info_field_types($type);
-  return isset($info['settings']) ? $info['settings'] : array();
+  return \Drupal::service('plugin.manager.entity.field.field_type')->getDefaultSettings($type);
 }
 
 /**
@@ -522,13 +520,11 @@ function field_info_field_settings($type) {
  *   The field type's default instance settings, or an empty array if type or
  *   settings are not defined.
  *
- * @deprecated as of Drupal 8.0. Use the 'instance_settings' property in the
- *   definition array returned by
- *   Drupal::service('plugin.manager.entity.field.field_type')->getDefinition()
+ * @deprecated as of Drupal 8.0. Use
+ *   Drupal::service('plugin.manager.entity.field.field_type')->getDefaultInstanceSettings()
  */
 function field_info_instance_settings($type) {
-  $info = field_info_field_types($type);
-  return isset($info['instance_settings']) ? $info['instance_settings'] : array();
+  return \Drupal::service('plugin.manager.entity.field.field_type')->getDefaultInstanceSettings($type);
 }
 
 /**
@@ -542,13 +538,11 @@ function field_info_instance_settings($type) {
  *   hook_field_widget_info(), or an empty array if type or settings are
  *   undefined.
  *
- * @deprecated as of Drupal 8.0. Use the 'settings' property in the definition
- *   array returned by
- *   Drupal::service('plugin.manager.field.widget')->getDefinition()
+ * @deprecated as of Drupal 8.0. Use
+ *   Drupal::service('plugin.manager.field.widget')->getDefaultSettings()
  */
 function field_info_widget_settings($type) {
-  $info = field_info_widget_types($type);
-  return isset($info['settings']) ? $info['settings'] : array();
+  return \Drupal::service('plugin.manager.field.widget')->getDefaultSettings($type);
 }
 
 /**
@@ -562,13 +556,11 @@ function field_info_widget_settings($type) {
  *   hook_field_formatter_info(), or an empty array if type or settings are
  *   undefined.
  *
- * @deprecated as of Drupal 8.0. Use the 'settings' property in the definition
- *   array returned by
- *   Drupal::service('plugin.manager.field.formatter')->getDefinition()
+ * @deprecated as of Drupal 8.0. Use
+ *   Drupal::service('plugin.manager.field.formatter')->getDefaultSettings()
  */
 function field_info_formatter_settings($type) {
-  $info = field_info_formatter_types($type);
-  return isset($info['settings']) ? $info['settings'] : array();
+  return \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings($type);
 }
 
 /**
diff --git a/core/modules/field/field.module b/core/modules/field/field.module
index ffbd069904fd0645c7be1cde676b87eadd29e151..e1ed6ed99b8d8c29f353c8bb5b5563225a80278f 100644
--- a/core/modules/field/field.module
+++ b/core/modules/field/field.module
@@ -328,7 +328,7 @@ function _field_generate_entity_field_definition(FieldInterface $field, FieldIns
  */
 function field_field_widget_info_alter(&$info) {
   // Add the Hidden widget to all field types.
-  $info['hidden']['field_types'] = array_keys(field_info_field_types());
+  $info['hidden']['field_types'] = array_keys(\Drupal::service('plugin.manager.entity.field.field_type')->getDefinitions());
 }
 
 /**
diff --git a/core/modules/field/field.services.yml b/core/modules/field/field.services.yml
index 6b8c4b8a07b9fa2415575fdce79dba401b837806..c6ef5da277a44ef5f3b264d2e0c8d549e30f3a7c 100644
--- a/core/modules/field/field.services.yml
+++ b/core/modules/field/field.services.yml
@@ -1,13 +1,13 @@
 services:
   plugin.manager.field.widget:
     class: Drupal\field\Plugin\Type\Widget\WidgetPluginManager
-    arguments: ['@container.namespaces', '@cache.field', '@module_handler', '@language_manager']
+    arguments: ['@container.namespaces', '@cache.field', '@module_handler', '@language_manager', '@plugin.manager.entity.field.field_type']
   plugin.manager.field.formatter:
     class: Drupal\field\Plugin\Type\Formatter\FormatterPluginManager
-    arguments: ['@container.namespaces', '@cache.field', '@module_handler', '@language_manager']
+    arguments: ['@container.namespaces', '@cache.field', '@module_handler', '@language_manager', '@plugin.manager.entity.field.field_type']
   field.info:
     class: Drupal\field\FieldInfo
-    arguments: ['@cache.field', '@config.factory', '@module_handler']
+    arguments: ['@cache.field', '@config.factory', '@module_handler', '@plugin.manager.entity.field.field_type']
   cache.field:
     class: Drupal\Core\Cache\CacheBackendInterface
     tags:
diff --git a/core/modules/field/field.views.inc b/core/modules/field/field.views.inc
index 90f539d4e3dae28653d6b9c97c461d5c711b64bd..e5dea3ba45ad7091fcff9034ed322d6f9de399c8 100644
--- a/core/modules/field/field.views.inc
+++ b/core/modules/field/field.views.inc
@@ -90,7 +90,7 @@ function field_views_field_label($field_name) {
  * Default views data implementation for a field.
  */
 function field_views_field_default_views_data($field) {
-  $field_types = field_info_field_types();
+  $field_types = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinitions();
 
   // Check the field module is available.
   if (!isset($field_types[$field['type']])) {
diff --git a/core/modules/field/lib/Drupal/field/FieldInfo.php b/core/modules/field/lib/Drupal/field/FieldInfo.php
index e7e46b955ffe824e53eced58485c42560c2576a3..2639c25bb7430116c73e4c91547c0f7a84b83db9 100644
--- a/core/modules/field/lib/Drupal/field/FieldInfo.php
+++ b/core/modules/field/lib/Drupal/field/FieldInfo.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Config\ConfigFactory;
+use Drupal\Core\Entity\Field\FieldTypePluginManager;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 
 /**
@@ -44,6 +45,13 @@ class FieldInfo {
    */
   protected $moduleHandler;
 
+  /**
+   * The field type manager to define field.
+   *
+   * @var \Drupal\Core\Entity\Field\FieldTypePluginManager
+   */
+  protected $fieldTypeManager;
+
   /**
    * The config factory.
    *
@@ -123,11 +131,14 @@ class FieldInfo {
    *   The configuration factory object to use.
    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
    *   The module handler class to use for invoking hooks.
+   * @param \Drupal\Core\Entity\Field\FieldTypePluginManager $field_type_manager
+   *   The 'field type' plugin manager.
    */
-  public function __construct(CacheBackendInterface $cache_backend, ConfigFactory $config, ModuleHandlerInterface $module_handler) {
+  public function __construct(CacheBackendInterface $cache_backend, ConfigFactory $config, ModuleHandlerInterface $module_handler, FieldTypePluginManager $field_type_manager) {
     $this->cacheBackend = $cache_backend;
     $this->moduleHandler = $module_handler;
     $this->config = $config;
+    $this->fieldTypeManager = $field_type_manager;
   }
 
   /**
@@ -553,7 +564,7 @@ public function getBundleExtraFields($entity_type, $bundle) {
    */
   public function prepareField($field) {
     // Make sure all expected field settings are present.
-    $field['settings'] += field_info_field_settings($field['type']);
+    $field['settings'] += $this->fieldTypeManager->getDefaultSettings($field['type']);
     $field['storage']['settings'] += field_info_storage_settings($field['storage']['type']);
 
     return $field;
@@ -572,7 +583,7 @@ public function prepareField($field) {
    */
   public function prepareInstance($instance, $field_type) {
     // Make sure all expected instance settings are present.
-    $instance['settings'] += field_info_instance_settings($field_type);
+    $instance['settings'] += $this->fieldTypeManager->getDefaultInstanceSettings($field_type);
 
     // Set a default value for the instance.
     if (field_behaviors_widget('default value', $instance) == FIELD_BEHAVIOR_DEFAULT && !isset($instance['default_value'])) {
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php
index 46023992a9a7c23a248122dc4e6182cb8e766af9..bccc64b9ace21f1f94ec9d40b3d9175d4fe202d6 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Field.php
@@ -352,7 +352,7 @@ protected function saveNew() {
     }
 
     // Check that the field type is known.
-    $field_type = field_info_field_types($this->type);
+    $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type);
     if (!$field_type) {
       throw new FieldException(format_string('Attempt to create a field of unknown type %type.', array('%type' => $this->type)));
     }
@@ -579,7 +579,7 @@ public function getFieldSettings() {
     //   maintains its own static cache. However, do some CPU and memory
     //   profiling to see if it's worth statically caching $field_type_info, or
     //   the default field and instance settings, within $this.
-    $field_type_info = field_info_field_types($this->type);
+    $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type);
 
     $settings = $field_type_info['instance_settings'] + $this->settings + $field_type_info['settings'];
     return $settings;
@@ -590,7 +590,7 @@ public function getFieldSettings() {
    */
   public function getFieldSetting($setting_name) {
     // @todo See getFieldSettings() about potentially statically caching this.
-    $field_type_info = field_info_field_types($this->type);
+    $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->type);
 
     // We assume here that consecutive array_key_exists() is more efficient than
     // calling getFieldSettings() when all we need is a single setting.
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php
index cbfb63670a1af5c7fbd01026c3bf84cf7dffadcd..5fbfe65e0dff55a2421b17efb7926f271011671e 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/FieldInstance.php
@@ -425,7 +425,7 @@ protected function saveUpdated() {
    * Prepares the instance definition for saving.
    */
   protected function prepareSave() {
-    $field_type_info = field_info_field_types($this->field->type);
+    $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->field->type);
 
     // Set the default instance settings.
     $this->settings += $field_type_info['instance_settings'];
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php
index 5747fd1783d55407204077d71f3cd39a6b5ed512..3b5c813e018c848185d7906eb3fa7cb87f65a771 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Formatter/FormatterPluginManager.php
@@ -10,6 +10,7 @@
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
 use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Entity\Field\FieldTypePluginManager;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Language\LanguageManager;
 use Drupal\Core\Plugin\DefaultPluginManager;
@@ -30,6 +31,13 @@ class FormatterPluginManager extends DefaultPluginManager {
    */
   protected $formatterOptions;
 
+  /**
+   * The field type manager to define field.
+   *
+   * @var \Drupal\Core\Entity\Field\FieldTypePluginManager
+   */
+  protected $fieldTypeManager;
+
   /**
    * Constructs a FormatterPluginManager object.
    *
@@ -42,14 +50,17 @@ class FormatterPluginManager extends DefaultPluginManager {
    *   The module handler.
    * @param \Drupal\Core\Language\LanguageManager $language_manager
    *   The language manager.
+   * @param \Drupal\Core\Entity\Field\FieldTypePluginManager $field_type_manager
+   *   The 'field type' plugin manager.
    */
-  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, LanguageManager $language_manager) {
+  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, LanguageManager $language_manager, FieldTypePluginManager $field_type_manager) {
     $annotation_namespaces = array('Drupal\field\Annotation' => $namespaces['Drupal\field']);
 
     parent::__construct('Plugin/field/formatter', $namespaces, $annotation_namespaces, 'Drupal\field\Annotation\FieldFormatter');
 
     $this->setCacheBackend($cache_backend, $language_manager, 'field_formatter_types');
     $this->alterInfo($module_handler, 'field_formatter_info');
+    $this->fieldTypeManager = $field_type_manager;
   }
 
   /**
@@ -112,7 +123,7 @@ public function getInstance(array $options) {
     $definition = $this->getDefinition($configuration['type']);
     if (!isset($definition['class']) || !in_array($field_type, $definition['field_types'])) {
       // Grab the default widget for the field type.
-      $field_type_definition = field_info_field_types($field_type);
+      $field_type_definition = $this->fieldTypeManager->getDefinition($field_type);
       $plugin_id = $field_type_definition['default_formatter'];
     }
 
@@ -142,11 +153,11 @@ public function prepareConfiguration($field_type, array $configuration) {
     );
     // If no formatter is specified, use the default formatter.
     if (!isset($configuration['type'])) {
-      $field_type = field_info_field_types($field_type);
+      $field_type = $this->fieldTypeManager->getDefinition($field_type);
       $configuration['type'] = $field_type['default_formatter'];
     }
     // Fill in default settings values for the formatter.
-    $configuration['settings'] += field_info_formatter_settings($configuration['type']);
+    $configuration['settings'] += $this->getDefaultSettings($configuration['type']);
 
     return $configuration;
   }
@@ -163,7 +174,7 @@ public function prepareConfiguration($field_type, array $configuration) {
    */
   public function getOptions($field_type = NULL) {
     if (!isset($this->formatterOptions)) {
-      $field_types = field_info_field_types();
+      $field_types = $this->fieldTypeManager->getDefinitions();
       $options = array();
       foreach ($this->getDefinitions() as $name => $formatter) {
         foreach ($formatter['field_types'] as $formatter_field_type) {
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetPluginManager.php b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetPluginManager.php
index f8ea9b7d8237dbc044c7cca329fff2239b4f2022..12bb296fa5a5a228a931391d9753c13130054a6e 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetPluginManager.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/Widget/WidgetPluginManager.php
@@ -11,6 +11,7 @@
 use Drupal\Component\Plugin\PluginManagerBase;
 use Drupal\Component\Plugin\Discovery\ProcessDecorator;
 use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Entity\Field\FieldTypePluginManager;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Language\LanguageManager;
 use Drupal\Core\Plugin\DefaultPluginManager;
@@ -23,6 +24,13 @@
  */
 class WidgetPluginManager extends DefaultPluginManager {
 
+  /**
+   * The field type manager to define field.
+   *
+   * @var \Drupal\Core\Entity\Field\FieldTypePluginManager
+   */
+  protected $fieldTypeManager;
+
   /**
    * An array of widget options for each field type.
    *
@@ -42,8 +50,10 @@ class WidgetPluginManager extends DefaultPluginManager {
    *   The module handler.
    * @param \Drupal\Core\Language\LanguageManager $language_manager
    *   The language manager.
+   * @param \Drupal\Core\Entity\Field\FieldTypePluginManager $field_type_manager
+   *   The 'field type' plugin manager.
    */
-  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, LanguageManager $language_manager) {
+  public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler, LanguageManager $language_manager, FieldTypePluginManager $field_type_manager) {
     $annotation_namespaces = array('Drupal\field\Annotation' => $namespaces['Drupal\field']);
 
     parent::__construct('Plugin/field/widget', $namespaces, $annotation_namespaces, 'Drupal\field\Annotation\FieldWidget');
@@ -52,6 +62,7 @@ public function __construct(\Traversable $namespaces, CacheBackendInterface $cac
     $this->alterInfo($module_handler, 'field_widget_info');
 
     $this->factory = new WidgetFactory($this);
+    $this->fieldTypeManager = $field_type_manager;
   }
 
   /**
@@ -93,7 +104,7 @@ public function getInstance(array $options) {
     $definition = $this->getDefinition($configuration['type']);
     if (!isset($definition['class']) || !in_array($field_type, $definition['field_types'])) {
       // Grab the default widget for the field type.
-      $field_type_definition = field_info_field_types($field_type);
+      $field_type_definition = $this->fieldTypeManager->getDefinition($field_type);
       $plugin_id = $field_type_definition['default_widget'];
     }
 
@@ -137,11 +148,11 @@ public function prepareConfiguration($field_type, array $configuration) {
     );
     // If no widget is specified, use the default widget.
     if (!isset($configuration['type'])) {
-      $field_type = field_info_field_types($field_type);
+      $field_type = $this->fieldTypeManager->getDefinition($field_type);
       $configuration['type'] = $field_type['default_widget'];
     }
     // Fill in default settings values for the widget.
-    $configuration['settings'] += field_info_widget_settings($configuration['type']);
+    $configuration['settings'] += $this->getDefaultSettings($configuration['type']);
 
     return $configuration;
   }
@@ -160,7 +171,7 @@ public function prepareConfiguration($field_type, array $configuration) {
   public function getOptions($field_type = NULL) {
     if (!isset($this->widgetOptions)) {
       $options = array();
-      $field_types = field_info_field_types();
+      $field_types = $this->fieldTypeManager->getDefinitions();
       $widget_types = $this->getDefinitions();
       uasort($widget_types, 'drupal_sort_weight');
       foreach ($widget_types as $name => $widget_type) {
diff --git a/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php b/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php
index 7ce432ba3f3323fe49e20f7af4799bcfaa999e34..fdfea106282529079e912fe8b276c1e02265ad5c 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/views/field/Field.php
@@ -299,7 +299,7 @@ protected function defineOptions() {
 
     // defineOptions runs before init/construct, so no $this->field_info
     $field = field_info_field($this->definition['field_name']);
-    $field_type = field_info_field_types($field['type']);
+    $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field['type']);
     $column_names = array_keys($field['columns']);
     $default_column = '';
     // Try to determine a sensible default.
@@ -424,7 +424,7 @@ public function buildOptionsForm(&$form, &$form_state) {
     // Get the currently selected formatter.
     $format = $this->options['type'];
 
-    $settings = $this->options['settings'] + field_info_formatter_settings($format);
+    $settings = $this->options['settings'] + \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings($format);
 
     $options = array(
       'field_definition' => $field,
diff --git a/core/modules/field/lib/Drupal/field/Tests/CrudTest.php b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
index b7b7d580166cd8ba6dcbd5f4371c62408244c58b..8f3a995873c891fd34284ec3cdcfac5187d61a36 100644
--- a/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php
@@ -60,7 +60,7 @@ function testCreateField() {
     $this->assertEqual($field_config['cardinality'], 1, 'Cardinality defaults to 1.');
 
     // Ensure that default settings are present.
-    $field_type = field_info_field_types($field_definition['type']);
+    $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field_definition['type']);
     $this->assertEqual($field_config['settings'], $field_type['settings'], 'Default field settings have been written.');
 
     // Ensure that default storage was set.
diff --git a/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php b/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php
index 70195d355ab89bce12780fbff13bfc988ce5b214..e2fb2f9778a2014fc97166cc9cb678ccb8c3a9da 100644
--- a/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/DisplayApiTest.php
@@ -121,7 +121,7 @@ function testFieldViewField() {
     // No display settings: check that default display settings are used.
     $output = field_view_field($this->entity, $this->field_name);
     $this->content = drupal_render($output);
-    $settings = field_info_formatter_settings('field_test_default');
+    $settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings('field_test_default');
     $setting = $settings['test_formatter_setting'];
     $this->assertText($this->label, 'Label was displayed.');
     foreach ($this->values as $delta => $value) {
@@ -193,7 +193,7 @@ function testFieldViewField() {
    */
   function testFieldViewValue() {
     // No display settings: check that default display settings are used.
-    $settings = field_info_formatter_settings('field_test_default');
+    $settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings('field_test_default');
     $setting = $settings['test_formatter_setting'];
     foreach ($this->values as $delta => $value) {
       $item = $this->entity->{$this->field_name}[$delta]->getValue();
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php
index 16cfcd1cf5c68b2ec6eea133a0f4f9e78f479a26..70f99f128f3e93b674388b48873c47950131067a 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 = field_test_field_info();
-    $info = field_info_field_types();
+    $info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinitions();
     foreach ($field_test_info as $t_key => $field_type) {
       foreach ($field_type as $key => $val) {
         $this->assertEqual($info[$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))));
@@ -139,7 +139,7 @@ function testFieldPrepare() {
     $field = field_info_field($field_definition['field_name']);
 
     // Check that all expected settings are in place.
-    $field_type = field_info_field_types($field_definition['type']);
+    $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field_definition['type']);
     $this->assertEqual($field['settings'], $field_type['settings'], 'All expected default field settings are present.');
   }
 
@@ -172,7 +172,7 @@ function testInstancePrepare() {
     $instance = field_info_instance($instance_definition['entity_type'], $instance_definition['field_name'], $instance_definition['bundle']);
 
     // Check that all expected instance settings are in place.
-    $field_type = field_info_field_types($field_definition['type']);
+    $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($field_definition['type']);
     $this->assertEqual($instance['settings'], $field_type['instance_settings'] , 'All expected instance settings are present.');
   }
 
@@ -279,18 +279,9 @@ function testFieldMap() {
   function testSettingsInfo() {
     $info = field_test_field_info();
     foreach ($info as $type => $data) {
-      $this->assertIdentical(field_info_field_settings($type), $data['settings'], format_string("field_info_field_settings returns %type's field settings", array('%type' => $type)));
-      $this->assertIdentical(field_info_instance_settings($type), $data['instance_settings'], format_string("field_info_field_settings returns %type's field instance settings", array('%type' => $type)));
-    }
-
-    foreach (array('test_field_widget', 'test_field_widget_multiple') as $type) {
-      $info = field_info_widget_types($type);
-      $this->assertIdentical(field_info_widget_settings($type), $info['settings'], format_string("field_info_widget_settings returns %type's widget settings", array('%type' => $type)));
-    }
-
-    foreach (array('field_test_default', 'field_test_multiple', 'field_test_with_prepare_view') as $type) {
-      $info = field_info_formatter_types($type);
-      $this->assertIdentical(field_info_formatter_settings($type), $info['settings'], format_string("field_info_formatter_settings returns %type's formatter settings", array('%type' => $type)));
+      $field_type_manager = \Drupal::service('plugin.manager.entity.field.field_type');
+      $this->assertIdentical($field_type_manager->getDefaultSettings($type), $data['settings'], format_string("field settings service returns %type's field settings", array('%type' => $type)));
+      $this->assertIdentical($field_type_manager->getDefaultInstanceSettings($type), $data['instance_settings'], format_string("field instance settings service returns %type's field instance settings", array('%type' => $type)));
     }
   }
 
@@ -323,7 +314,7 @@ function testFieldInfoCache() {
    * Test that the widget definition functions work.
    */
   function testWidgetDefinition() {
-    $widget_definition = field_info_widget_types('test_field_widget_multiple');
+    $widget_definition = \Drupal::service('plugin.manager.field.widget')->getDefinition('test_field_widget_multiple');
 
     // Test if hook_field_widget_info_alter is beïng called.
     $this->assertTrue(in_array('test_field', $widget_definition['field_types']), "The 'test_field_widget_multiple' widget is enabled for the 'test_field' field type in field_test_field_widget_info_alter().");
diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
index 29e6cb2d5c88ca8fa91efa609ae15515cc1b9bb8..cade864d7fb73b20f1f165aaa0003a595ad2b89f 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php
@@ -74,7 +74,7 @@ function testCreateFieldInstance() {
     // applied on write.
     $config = \Drupal::config('field.instance.' . $instance->id())->get();
 
-    $field_type = field_info_field_types($this->field_definition['type']);
+    $field_type = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->field_definition['type']);
 
     // Check that default values are set.
     $this->assertEqual($config['required'], FALSE, 'Required defaults to false.');
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 5a45c21f77cdf4a4bc912c0df236cf69c77e03d4..8e727a6204b640e5172b6f863bb6d49db345b919 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php
@@ -45,7 +45,7 @@ public function __construct(EntityManager $entity_manager, PluginManagerBase $pl
     parent::__construct($entity_manager);
 
     $this->pluginManager = $plugin_manager;
-    $this->fieldTypes = field_info_field_types();
+    $this->fieldTypes = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinitions();
   }
 
   /**
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 7485f885b3f3a57013bd257000f4f40c93b36c0c..514e966f9a8ba3b81999c2b81c8b78ae915b5472 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldListController.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldListController.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Config\Entity\ConfigEntityListController;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManager;
+use Drupal\Core\Entity\Field\FieldTypePluginManager;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\field\FieldInfo;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -47,6 +48,13 @@ class FieldListController extends ConfigEntityListController {
    */
   protected $bundles;
 
+  /**
+   * The field type manager.
+   *
+   * @var \Drupal\Core\Entity\Field\FieldTypePluginManager
+   */
+  protected $fieldTypeManager;
+
   /**
    * Constructs a new EntityListController object.
    *
@@ -60,14 +68,17 @@ class FieldListController extends ConfigEntityListController {
    *   The module handler to invoke hooks on.
    * @param \Drupal\field\FieldInfo $field_info
    *   The field info service.
+   * @param \Drupal\Core\Entity\Field\FieldTypePluginManager $field_type_manager
+   *   The 'field type' plugin manager.
    */
-  public function __construct($entity_type, array $entity_info, EntityManager $entity_manager, ModuleHandlerInterface $module_handler, FieldInfo $field_info) {
+  public function __construct($entity_type, array $entity_info, EntityManager $entity_manager, ModuleHandlerInterface $module_handler, FieldInfo $field_info, FieldTypePluginManager $field_type_manager) {
     parent::__construct($entity_type, $entity_info, $entity_manager->getStorageController($entity_type), $module_handler);
 
-    $this->fieldTypes = field_info_field_types();
     $this->fieldInfo = $field_info->getFieldMap();
     $this->entityManager = $entity_manager;
     $this->bundles = entity_get_bundles();
+    $this->fieldTypeManager = $field_type_manager;
+    $this->fieldTypes = $this->fieldTypeManager->getDefinitions();
   }
 
   /**
@@ -79,7 +90,8 @@ public static function createInstance(ContainerInterface $container, $entity_typ
       $entity_info,
       $container->get('plugin.manager.entity'),
       $container->get('module_handler'),
-      $container->get('field.info')
+      $container->get('field.info'),
+      $container->get('plugin.manager.entity.field.field_type')
     );
   }
 
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 8e7e770fe183792b72eeb0d3ea9494909be64ca8..d4c392ca6aaae71b57ad5b077662ebcb7e5da34a 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\field_ui;
 
+use Drupal\Core\Entity\EntityManager;
+use Drupal\Core\Entity\Field\FieldTypePluginManager;
 use Drupal\field_ui\OverviewBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\field\Plugin\Core\Entity\Field;
@@ -16,6 +18,36 @@
  */
 class FieldOverview extends OverviewBase {
 
+  /**
+   *  The field type manager.
+   *
+   * @var \Drupal\Core\Entity\Field\FieldTypePluginManager
+   */
+  protected $fieldTypeManager;
+
+  /**
+   * Constructs a new FieldOverview.
+   *
+   * @param \Drupal\Core\Entity\EntityManager $entity_manager
+   *   The entity manager.
+   * @param \Drupal\Core\Entity\Field\FieldTypePluginManager $field_type_manager
+   *   The field type manager
+   */
+  public function __construct(EntityManager $entity_manager, FieldTypePluginManager $field_type_manager) {
+    $this->entityManager = $entity_manager;
+    $this->fieldTypeManager = $field_type_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('plugin.manager.entity'),
+      $container->get('plugin.manager.entity.field.field_type')
+    );
+  }
+
   /**
    * {@inheritdoc}
    */
@@ -45,7 +77,7 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL,
 
     // Gather bundle information.
     $instances = field_info_instances($this->entity_type, $this->bundle);
-    $field_types = field_info_field_types();
+    $field_types = $this->fieldTypeManager->getDefinitions();
 
     // Field prefix.
     $field_prefix = config('field_ui.settings')->get('field_prefix');
@@ -445,7 +477,7 @@ public function submitForm(array &$form, array &$form_state) {
    */
   protected function getExistingFieldOptions() {
     $info = array();
-    $field_types = field_info_field_types();
+    $field_types = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinitions();
 
     foreach (field_info_instances() as $existing_entity_type => $bundles) {
       foreach ($bundles as $existing_bundle => $instances) {
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 48a5bd76309ed77961312aabc3532f73373a7e37..046e012ef3a136f5152cc05edfb5c7bcdfff9099 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
@@ -11,6 +11,7 @@
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManager;
 use Drupal\Core\Entity\EntityNG;
+use Drupal\Core\Entity\Field\FieldTypePluginManager;
 use Drupal\Core\Form\FormInterface;
 use Drupal\Core\Language\Language;
 use Drupal\field\FieldInstanceInterface;
@@ -44,6 +45,13 @@ class FieldInstanceEditForm implements FormInterface, ControllerInterface {
    */
   protected $entityManager;
 
+  /**
+   *  The field type manager.
+   *
+   * @var \Drupal\Core\Entity\Field\FieldTypePluginManager
+   */
+  protected $fieldTypeManager;
+
   /**
    * Constructs a new field instance form.
    *
@@ -51,10 +59,13 @@ class FieldInstanceEditForm implements FormInterface, ControllerInterface {
    *   The entity manager.
    * @param \Drupal\field\Plugin\Type\Widget\WidgetPluginManager $widget_manager
    *   The field widget plugin manager.
+   * @param \Drupal\Core\Entity\Field\FieldTypePluginManager $field_type_manager
+   *   The field type manager.
    */
-  public function __construct(EntityManager $entity_manager, WidgetPluginManager $widget_manager) {
+  public function __construct(EntityManager $entity_manager, WidgetPluginManager $widget_manager, FieldTypePluginManager $field_type_manager) {
     $this->entityManager = $entity_manager;
     $this->widgetManager = $widget_manager;
+    $this->fieldTypeManager = $field_type_manager;
   }
 
   /**
@@ -63,7 +74,8 @@ public function __construct(EntityManager $entity_manager, WidgetPluginManager $
   public static function create(ContainerInterface $container) {
     return new static(
       $container->get('plugin.manager.entity'),
-      $container->get('plugin.manager.field.widget')
+      $container->get('plugin.manager.field.widget'),
+      $container->get('plugin.manager.entity.field.field_type')
     );
   }
 
@@ -272,7 +284,7 @@ protected function getDefaultValueWidget($field, array &$form, &$form_state) {
     // @todo Clean this up since we don't have $this->instance['widget'] anymore.
     //   see https://drupal.org/node/2028759
     if ($this->instance['widget']['type'] == 'hidden') {
-      $field_type = field_info_field_types($field['type']);
+      $field_type = $this->fieldTypeManager->getDefinition($field['type']);
       $default_widget = $this->widgetManager->getDefinition($field_type['default_widget']);
 
       $this->instance['widget'] = array(
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php
index a5d8790ba8c05d97d7c406c81eef6577f93d93b7..d1edd6df5b2f6f8fd2065d454a4c8393d1b3c6f4 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageDisplayTest.php
@@ -47,7 +47,7 @@ function testFormatterUI() {
     $display = entity_get_display('node', $this->type, 'default');
     $display_options = $display->getComponent('field_test');
     $format = $display_options['type'];
-    $default_settings = field_info_formatter_settings($format);
+    $default_settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings($format);
     $setting_name = key($default_settings);
     $setting_value = $display_options['settings'][$setting_name];
 
@@ -61,7 +61,7 @@ function testFormatterUI() {
     $edit = array('fields[field_test][type]' => 'field_test_multiple', 'refresh_rows' => 'field_test');
     $this->drupalPostAJAX(NULL, $edit, array('op' => t('Refresh')));
     $format = 'field_test_multiple';
-    $default_settings = field_info_formatter_settings($format);
+    $default_settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings($format);
     $setting_name = key($default_settings);
     $setting_value = $default_settings[$setting_name];
     $this->assertFieldByName('fields[field_test][type]', $format, 'The expected formatter is selected.');
@@ -113,7 +113,7 @@ public function testWidgetUI() {
     $display = entity_get_form_display('node', $this->type, 'default');
     $display_options = $display->getComponent('field_test');
     $widget_type = $display_options['type'];
-    $default_settings = field_info_widget_settings($widget_type);
+    $default_settings = \Drupal::service('plugin.manager.field.widget')->getDefaultSettings($widget_type);
     $setting_name = key($default_settings);
     $setting_value = $display_options['settings'][$setting_name];
 
@@ -127,7 +127,7 @@ public function testWidgetUI() {
     $edit = array('fields[field_test][type]' => 'test_field_widget_multiple', 'refresh_rows' => 'field_test');
     $this->drupalPostAJAX(NULL, $edit, array('op' => t('Refresh')));
     $widget_type = 'test_field_widget_multiple';
-    $default_settings = field_info_widget_settings($widget_type);
+    $default_settings = \Drupal::service('plugin.manager.field.widget')->getDefaultSettings($widget_type);
     $setting_name = key($default_settings);
     $setting_value = $default_settings[$setting_name];
     $this->assertFieldByName('fields[field_test][type]', $widget_type, 'The expected widget is selected.');
@@ -181,7 +181,7 @@ function testViewModeCustom() {
     $node = $this->drupalCreateNode($settings);
 
     // Gather expected output values with the various formatters.
-    $formatters = field_info_formatter_types();
+    $formatters = \Drupal::service('plugin.manager.field.formatter')->getDefinitions();
     $output = array(
       'field_test_default' => $formatters['field_test_default']['settings']['test_formatter_setting'] . '|' . $value,
       'field_test_with_prepare_view' => $formatters['field_test_with_prepare_view']['settings']['test_formatter_setting_additional'] . '|' . $value. '|' . ($value + 1),
diff --git a/core/modules/file/file.field.inc b/core/modules/file/file.field.inc
index d3dc0a09c77cb13c067131416e603cd1e78b05ee..6445527149593e1c7807948295b3a59aa3019413 100644
--- a/core/modules/file/file.field.inc
+++ b/core/modules/file/file.field.inc
@@ -38,7 +38,7 @@ function file_field_info() {
  * Implements hook_field_settings_form().
  */
 function file_field_settings_form($field, $instance) {
-  $defaults = field_info_field_settings($field['type']);
+  $defaults = \Drupal::service('plugin.manager.entity.field.field_type')->getDefaultSettings($field['type']);
   $settings = array_merge($defaults, $field['settings']);
 
   $form['#attached']['library'][] = array('file', 'drupal.file');
diff --git a/core/modules/image/image.field.inc b/core/modules/image/image.field.inc
index 1f0e87b5394541f10ac8a7e1ec6fa7918561f811..2465e04ebcc1dbf38b6cf2bbb92c418e2f1d316f 100644
--- a/core/modules/image/image.field.inc
+++ b/core/modules/image/image.field.inc
@@ -57,7 +57,7 @@ function image_field_info() {
  * Implements hook_field_settings_form().
  */
 function image_field_settings_form($field, $instance) {
-  $defaults = field_info_field_settings($field['type']);
+  $defaults = \Drupal::service('plugin.manager.entity.field.field_type')->getDefaultSettings($field['type']);
   $settings = array_merge($defaults, $field['settings']);
 
   $scheme_options = array();
diff --git a/core/modules/node/node.tokens.inc b/core/modules/node/node.tokens.inc
index f12836d376d5f417653b886546448f27759c4c65..357562144046e850299f53623e3a37286d238e3b 100644
--- a/core/modules/node/node.tokens.inc
+++ b/core/modules/node/node.tokens.inc
@@ -160,7 +160,7 @@ function node_tokens($type, $tokens, array $data = array(), array $options = arr
                   $length = $display_options['settings']['trim_length'];
                 }
                 else {
-                  $settings = field_info_formatter_settings('text_summary_or_trimmed');
+                  $settings = \Drupal::service('plugin.manager.field.formatter')->getDefaultSettings('text_summary_or_trimmed');
                   $length = $settings['trim_length'];
                 }
 
diff --git a/core/modules/options/lib/Drupal/options/Plugin/field/widget/OptionsWidgetBase.php b/core/modules/options/lib/Drupal/options/Plugin/field/widget/OptionsWidgetBase.php
index b74147e4c5c706f9c85421a779c6b869039d45aa..0d55ab326486e2e451ebb62d4f2c3f5aa2c6380f 100644
--- a/core/modules/options/lib/Drupal/options/Plugin/field/widget/OptionsWidgetBase.php
+++ b/core/modules/options/lib/Drupal/options/Plugin/field/widget/OptionsWidgetBase.php
@@ -115,7 +115,7 @@ protected function getOptions() {
       $module_handler = \Drupal::moduleHandler();
 
       // Get the list of options from the field type module, and sanitize them.
-      $field_type_info = field_info_field_types($this->fieldDefinition->getFieldType());
+      $field_type_info = \Drupal::service('plugin.manager.entity.field.field_type')->getDefinition($this->fieldDefinition->getFieldType());
       $module = $field_type_info['provider'];
       $options = (array) $module_handler->invoke($module, 'options_list', array($this->fieldDefinition, $this->entity));