diff --git a/core/includes/entity.inc b/core/includes/entity.inc
index 2590ce9..c2f0217 100644
--- a/core/includes/entity.inc
+++ b/core/includes/entity.inc
@@ -693,6 +693,7 @@ function entity_get_display($entity_type, $bundle, $view_mode) {
       'targetEntityType' => $entity_type,
       'bundle' => $bundle,
       'mode' => $view_mode,
+      'status' => TRUE,
     ));
   }
 
@@ -727,11 +728,18 @@ function entity_get_render_display(EntityInterface $entity, $view_mode) {
   $entity_type = $entity->entityType();
   $bundle = $entity->bundle();
 
-  // Determine the display to use for rendering this entity. Depending on the
-  // configuration of the view mode for this bundle, this will be either the
-  // display associated to the view mode, or the 'default' display.
-  $view_mode_settings = field_view_mode_settings($entity_type, $bundle);
-  $render_view_mode = !empty($view_mode_settings[$view_mode]['status']) ? $view_mode : 'default';
+  // Determine the display to use for rendering this entity display. We load
+  // the default and the view mode that is passed in. Depending on the status
+  // of the view mode entity display, we fall back on default.
+  $render_view_mode = 'default';
+  $load = array(
+    $entity->entityType() . '.' . $entity->bundle() . '.default',
+    $entity->entityType() . '.' . $entity->bundle() . '.' . $view_mode,
+  );
+  $entity_displays = entity_load_multiple('entity_display', $load);
+  if (isset($entity_displays[$entity->entityType() . '.' . $entity->bundle() . '.' . $view_mode]) && $entity_displays[$entity->entityType() . '.' . $entity->bundle() . '.' . $view_mode]->status) {
+    $render_view_mode = $view_mode;
+  }
 
   $display = entity_get_display($entity_type, $bundle, $render_view_mode);
   $display->originalMode = $view_mode;
@@ -788,6 +796,7 @@ function entity_get_form_display($entity_type, $bundle, $form_mode) {
       'targetEntityType' => $entity_type,
       'bundle' => $bundle,
       'mode' => $form_mode,
+      'status' => TRUE,
     ));
   }
 
@@ -818,11 +827,18 @@ function entity_get_render_form_display(EntityInterface $entity, $form_mode) {
   $entity_type = $entity->entityType();
   $bundle = $entity->bundle();
 
-  // Determine the form display to use for rendering this entity form. Depending
-  // on the configuration of the form mode for this bundle, this will be either
-  // the form display associated to the form mode, or the 'default' display.
-  $form_mode_settings = field_form_mode_settings($entity_type, $bundle);
-  $render_form_mode = !empty($form_mode_settings[$form_mode]['status']) ? $form_mode : 'default';
+  // Determine the display to use for rendering this form display. We load
+  // the default and the form mode that is passed in. Depending on the status
+  // of the form mode entity display, we fall back on default.
+  $render_form_mode = 'default';
+  $load = array(
+    $entity->entityType() . '.' . $entity->bundle() . '.default',
+    $entity->entityType() . '.' . $entity->bundle() . '.' . $form_mode,
+  );
+  $entity_displays = entity_load_multiple('entity_display', $load);
+  if (isset($entity_displays[$entity->entityType() . '.' . $entity->bundle() . '.' . $form_mode]) && $entity_displays[$entity->entityType() . '.' . $entity->bundle() . '.' . $form_mode]->status) {
+    $render_form_mode = $form_mode;
+  }
 
   $form_display = entity_get_form_display($entity_type, $bundle, $render_form_mode);
   $form_display->originalMode = $form_mode;
diff --git a/core/lib/Drupal/Core/Entity/EntityFormController.php b/core/lib/Drupal/Core/Entity/EntityFormController.php
index 07dd8f3..5aaeb7f 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormController.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormController.php
@@ -186,12 +186,16 @@ public function processForm($element, $form_state, $form) {
       }
     }
 
-    // Hide extra fields.
+    // Hide or assign weights for extra fields.
     $extra_fields = field_info_extra_fields($this->entity->entityType(), $this->entity->bundle(), 'form');
     foreach ($extra_fields as $extra_field => $info) {
-      if (!$this->getFormDisplay($form_state)->getComponent($extra_field)) {
+      $component = $this->getFormDisplay($form_state)->getComponent($extra_field);
+      if (!$component) {
         $element[$extra_field]['#access'] = FALSE;
       }
+      else {
+        $element[$extra_field]['#weight'] = $component['weight'];
+      }
     }
 
     return $element;
diff --git a/core/modules/comment/lib/Drupal/comment/CommentFormController.php b/core/modules/comment/lib/Drupal/comment/CommentFormController.php
index 750f748..be711f8 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentFormController.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentFormController.php
@@ -46,9 +46,7 @@ public function form(array $form, array &$form_state) {
       $form += $form_state['comment_preview'];
     }
 
-    $form['author'] = array(
-      '#weight' => 10,
-    );
+    $form['author'] = array();
     // Display author information in a details element for comment moderators.
     if ($is_admin) {
       $form['author'] += array(
diff --git a/core/modules/entity/entity.install b/core/modules/entity/entity.install
index 9cbd71e..0dacfbc 100644
--- a/core/modules/entity/entity.install
+++ b/core/modules/entity/entity.install
@@ -19,11 +19,13 @@
  *   The bundle name.
  * @param string $view_mode
  *   The view mode.
+ * @param string $status
+ *   The status of the display.
  *
  * @return \Drupal\Core\Config\Config
  *   The configuration object.
  */
-function _update_8000_entity_get_display($entity_type, $bundle, $view_mode) {
+function _update_8000_entity_get_display($entity_type, $bundle, $view_mode, $status = FALSE) {
   $id = $entity_type . '.' . $bundle . '.' . $view_mode;
   $config = Drupal::config("entity.display.$id");
   if ($config->get()) {
@@ -39,6 +41,7 @@ function _update_8000_entity_get_display($entity_type, $bundle, $view_mode) {
     'bundle' => $bundle,
     'mode' => $view_mode,
     'content' => array(),
+    'status' => $status,
   );
   foreach ($properties as $key => $value) {
     $config->set($key, $value);
@@ -58,11 +61,13 @@ function _update_8000_entity_get_display($entity_type, $bundle, $view_mode) {
  *   The bundle name.
  * @param string $form_mode
  *   The form mode.
+ * @param string $status
+ *   The status of the form display.
  *
  * @return \Drupal\Core\Config\Config
  *   The configuration object.
  */
-function _update_8000_entity_get_form_display($entity_type, $bundle, $form_mode) {
+function _update_8000_entity_get_form_display($entity_type, $bundle, $form_mode, $status = FALSE) {
   $id = $entity_type . '.' . $bundle . '.' . $form_mode;
   $config = Drupal::config("entity.form_display.$id");
   if ($config->get()) {
@@ -78,6 +83,7 @@ function _update_8000_entity_get_form_display($entity_type, $bundle, $form_mode)
     'bundle' => $bundle,
     'mode' => $form_mode,
     'content' => array(),
+    'status' => $status,
   );
   foreach ($properties as $key => $value) {
     $config->set($key, $value);
diff --git a/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php b/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php
index 128bc7c..1e13d59 100644
--- a/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php
+++ b/core/modules/entity/lib/Drupal/entity/EntityDisplayBase.php
@@ -51,6 +51,13 @@
   public $mode;
 
   /**
+   * Whether this display is enabled or not.
+   *
+   * @var boolean
+   */
+  public $status;
+
+  /**
    * List of component display options, keyed by component name.
    *
    * @var array
@@ -129,6 +136,7 @@ public function getExportProperties() {
       'bundle',
       'mode',
       'content',
+      'status',
     );
     $properties = array();
     foreach ($names as $name) {
diff --git a/core/modules/field/field.install b/core/modules/field/field.install
index feed708..d0e14ed 100644
--- a/core/modules/field/field.install
+++ b/core/modules/field/field.install
@@ -200,7 +200,7 @@ function field_update_8002() {
       // Determine name and create initial entry in the $form_displays array.
       $form_display_id = $record->entity_type . '.' . $record->bundle . '.default';
       if (!isset($form_displays[$form_display_id])) {
-        $form_displays[$form_display_id] = _update_8000_entity_get_form_display($record->entity_type, $record->bundle, 'default');
+        $form_displays[$form_display_id] = _update_8000_entity_get_form_display($record->entity_type, $record->bundle, 'default', TRUE);
       }
 
       // We do not need the 'module' key anymore.
@@ -238,13 +238,12 @@ function field_update_8002() {
       ->execute();
   }
 
-  // Migration of 'extra_fields' display settings. Avoid calling
+  // Migration of 'extra_fields' and 'custom_settings' settings. Avoid calling
   // entity_get_info() by fetching the relevant variables directly in the
   // variable table.
   $variables = array_map('unserialize', db_query("SELECT name, value FROM {variable} WHERE name LIKE '%field_bundle_settings_%'")->fetchAllKeyed());
   foreach ($variables as $variable_name => $variable_value) {
     if (preg_match('/field_bundle_settings_(.*)__(.*)/', $variable_name, $matches)) {
-      $variable_needs_update = FALSE;
       $entity_type = $matches[1];
       $bundle = $matches[2];
 
@@ -254,22 +253,19 @@ function field_update_8002() {
           // array if it does not exist yet.
           $form_display_id = $entity_type . '.' . $bundle . '.default';
           if (!isset($form_displays[$form_display_id])) {
-            $form_displays[$form_display_id] = _update_8000_entity_get_form_display($entity_type, $bundle, 'default');
+            $form_displays[$form_display_id] = _update_8000_entity_get_form_display($entity_type, $bundle, 'default', TRUE);
           }
           $form_displays[$form_display_id]->set("content.$field_name", $field_settings);
         }
-
-        // Remove the old entry.
-        unset($variable_value['extra_fields']['form']);
-        $variable_needs_update = TRUE;
       }
 
+      // Determine name for the $displays array.
+      $display_id =  $entity_type . '.' . $bundle . '.' . $view_mode;
+
       if (isset($variable_value['extra_fields']['display'])) {
         foreach ($variable_value['extra_fields']['display'] as $field_name => $field_settings) {
           foreach ($field_settings as $view_mode => $display_options) {
-            // Determine name and create initial entry in the $displays array
-            // if it does not exist yet.
-            $display_id =  $entity_type . '.' . $bundle . '.' . $view_mode;
+            // Create initial entry in $displays array if it doesn't exist yet.
             if (!isset($displays[$display_id])) {
               $displays[$display_id] = _update_8000_entity_get_display($entity_type, $bundle, $view_mode);
             }
@@ -284,15 +280,16 @@ function field_update_8002() {
             $displays[$display_id]->set("content.$field_name", $new_options);
           }
         }
-
-        // Remove the old entry.
-        unset($variable_value['extra_fields']['display']);
-        $variable_needs_update = TRUE;
       }
 
-      if ($variable_needs_update) {
-        variable_set($variable_name, $variable_value);
+      // Create initial entry in $displays array if it doesn't exist yet.
+      if (!isset($displays[$display_id])) {
+        $displays[$display_id] = _update_8000_entity_get_display($entity_type, $bundle, $view_mode);
       }
+      $displays[$display_id]->set('status', $variable_value['custom_settings']);
+
+      // Remove the variable.
+      update_variable_del($variable_name);
     }
   }
 
diff --git a/core/modules/field/field.module b/core/modules/field/field.module
index 33b4cb0..3c71dbd 100644
--- a/core/modules/field/field.module
+++ b/core/modules/field/field.module
@@ -295,11 +295,6 @@ function field_entity_bundle_rename($entity_type, $bundle_old, $bundle_new) {
 
   // Clear the field cache.
   field_cache_clear();
-
-  // Update bundle settings.
-  $settings = variable_get('field_bundle_settings_' . $entity_type . '__' . $bundle_old, array());
-  variable_set('field_bundle_settings_' . $entity_type . '__' . $bundle_new, $settings);
-  variable_del('field_bundle_settings_' . $entity_type . '__' . $bundle_old);
 }
 
 /**
@@ -323,9 +318,6 @@ function field_entity_bundle_delete($entity_type, $bundle) {
 
   // Clear the cache.
   field_cache_clear();
-
-  // Clear bundle display settings.
-  variable_del('field_bundle_settings_' . $entity_type . '__' . $bundle);
 }
 
 /**
@@ -409,124 +401,6 @@ function field_sync_field_status() {
 }
 
 /**
- * Gets or sets administratively defined bundle settings.
- *
- * @param string $entity_type
- *   The type of $entity; e.g., 'node' or 'user'.
- * @param string $bundle
- *   The bundle name.
- * @param array|null $settings
- *   (optional) The settings to store, an associative array with the following
- *   elements:
- *   - view_modes: An associative array keyed by view mode, with the following
- *     key/value pairs:
- *     - status: Boolean specifying whether the view mode uses a dedicated set
- *       of display options (TRUE), or the 'default' options (FALSE). Defaults
- *       to FALSE.
- *   - extra_fields: An associative array containing the form and display
- *     settings for extra fields (also known as pseudo-fields):
- *     - form: An associative array whose keys are the names of extra fields,
- *       and whose values are associative arrays with the following elements:
- *       - weight: The weight of the extra field, determining its position on an
- *         entity form.
- *     - display: An associative array whose keys are the names of extra fields,
- *       and whose values are associative arrays keyed by the name of view
- *       modes. This array must include an item for the 'default' view mode.
- *       Each view mode sub-array contains the following elements:
- *       - weight: The weight of the extra field, determining its position when
- *         an entity is viewed.
- *       - visible: TRUE if the extra field is visible, FALSE otherwise.
- *
- * @return array|null
- *   If no $settings are passed, the current settings are returned.
- */
-function field_bundle_settings($entity_type, $bundle, $settings = NULL) {
-  if (isset($settings)) {
-    variable_set('field_bundle_settings_' . $entity_type . '__' . $bundle, $settings);
-    field_info_cache_clear();
-  }
-  else {
-    $settings = variable_get('field_bundle_settings_' . $entity_type . '__' . $bundle, array());
-    $settings += array(
-      'view_modes' => array(),
-      'form_modes' => array(),
-    );
-
-    return $settings;
-  }
-}
-
-/**
- * Returns form mode settings in a given bundle.
- *
- * @param string $entity_type
- *   The type of entity; e.g. 'node' or 'user'.
- * @param string $bundle
- *   The bundle name to return form mode settings for.
- *
- * @return
- *   An array keyed by form mode, with the following key/value pairs:
- *   - status: Boolean specifying whether the form mode uses a dedicated set of
- *     display options (TRUE), or the 'default' options (FALSE). Defaults to
- *     FALSE.
- */
-function field_form_mode_settings($entity_type, $bundle) {
-  $cache = &drupal_static(__FUNCTION__, array());
-
-  if (!isset($cache[$entity_type][$bundle])) {
-    $bundle_settings = field_bundle_settings($entity_type, $bundle);
-    $settings = $bundle_settings['form_modes'];
-    // Include form modes for which nothing has been stored yet, but whose
-    // definition in hook_entity_info_alter() specify they should use custom
-    // settings by default.
-    $form_modes = entity_get_form_modes($entity_type);
-    foreach ($form_modes as $form_mode => $form_mode_info) {
-      if (!isset($settings[$form_mode]['status']) && $form_mode_info['status']) {
-        $settings[$form_mode]['status'] = TRUE;
-      }
-    }
-    $cache[$entity_type][$bundle] = $settings;
-  }
-
-  return $cache[$entity_type][$bundle];
-}
-
-/**
- * Returns view mode settings in a given bundle.
- *
- * @param $entity_type
- *   The type of entity; e.g. 'node' or 'user'.
- * @param $bundle
- *   The bundle name to return view mode settings for.
- *
- * @return
- *   An array keyed by view mode, with the following key/value pairs:
- *   - status: Boolean specifying whether the view mode uses a dedicated set of
- *     display options (TRUE), or the 'default' options (FALSE). Defaults to
- *     FALSE.
- */
-function field_view_mode_settings($entity_type, $bundle) {
-  $cache = &drupal_static(__FUNCTION__, array());
-
-  if (!isset($cache[$entity_type][$bundle])) {
-    $bundle_settings = field_bundle_settings($entity_type, $bundle);
-    $settings = $bundle_settings['view_modes'];
-    // Include view modes for which nothing has been stored yet, but whose
-    // definition in hook_entity_info_alter() specify they should use custom
-    // settings by default.
-    $view_modes = entity_get_view_modes($entity_type);
-    foreach ($view_modes as $view_mode => $view_mode_info) {
-      if (!isset($settings[$view_mode]['status']) && $view_mode_info['status']) {
-        $settings[$view_mode]['status'] = TRUE;
-      }
-    }
-    $cache[$entity_type][$bundle] = $settings;
-  }
-
-  return $cache[$entity_type][$bundle];
-}
-
-/**
  * Clears the field info and field data caches.
  */
 function field_cache_clear() {
diff --git a/core/modules/field/lib/Drupal/field/FieldInfo.php b/core/modules/field/lib/Drupal/field/FieldInfo.php
index 8d6bc3a..e6411c3 100644
--- a/core/modules/field/lib/Drupal/field/FieldInfo.php
+++ b/core/modules/field/lib/Drupal/field/FieldInfo.php
@@ -545,13 +545,10 @@ public function getBundleExtraFields($entity_type, $bundle) {
     // Cache miss: read from hook_field_extra_fields(). Note: given the current
     // shape of the hook, we have no other way than collecting extra fields on
     // all bundles.
-    $info = array();
     $extra = $this->moduleHandler->invokeAll('field_extra_fields');
     drupal_alter('field_extra_fields', $extra);
-    // Merge in saved settings.
-    if (isset($extra[$entity_type][$bundle])) {
-      $info = $this->prepareExtraFields($extra[$entity_type][$bundle], $entity_type, $bundle);
-    }
+    $info = isset($extra[$entity_type][$bundle]) ? $extra[$entity_type][$bundle] : array();
+    $info += array('form' => array(), 'display' => array());
 
     // Store in the 'static' and persistent caches.
     $this->bundleExtraFields[$entity_type][$bundle] = $info;
@@ -599,38 +596,4 @@ public function prepareInstance($instance, $field_type) {
     return $instance;
   }
 
-  /**
-   * Prepares 'extra fields' for the current run-time context.
-   *
-   * @param $extra_fields
-   *   The array of extra fields, as collected in hook_field_extra_fields().
-   * @param $entity_type
-   *   The entity type.
-   * @param $bundle
-   *   The bundle name.
-   *
-   * @return
-   *   The list of extra fields completed for the current runtime context.
-   */
-  public function prepareExtraFields($extra_fields, $entity_type, $bundle) {
-    $entity_type_info = entity_get_info($entity_type);
-    $bundle_settings = field_bundle_settings($entity_type, $bundle);
-    $extra_fields += array('form' => array(), 'display' => array());
-
-    $result = array();
-    // Extra fields in forms.
-    foreach ($extra_fields['form'] as $name => $field_data) {
-      $settings = isset($bundle_settings['extra_fields']['form'][$name]) ? $bundle_settings['extra_fields']['form'][$name] : array();
-      if (isset($settings['weight'])) {
-        $field_data['weight'] = $settings['weight'];
-      }
-      $result['form'][$name] = $field_data;
-    }
-
-    // Extra fields in displayed entities.
-    $result['display'] = $extra_fields['display'];
-
-    return $result;
-  }
-
 }
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php b/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php
index 928b12f..51e1892 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Access/FormModeAccessCheck.php
@@ -31,8 +31,14 @@ public function access(Route $route, Request $request) {
       $bundle = $request->attributes->get('bundle');
       $form_mode = $request->attributes->get('mode');
 
-      $form_mode_settings = field_form_mode_settings($entity_type, $bundle);
-      $visibility = ($form_mode == 'default') || !empty($form_mode_settings[$form_mode]['status']);
+      $visibility = ($form_mode == 'default') ? TRUE : FALSE;
+      if ($form_mode != 'default') {
+        $entity_form_display = entity_load('entity_form_display', $entity_type . '.' . $bundle . '.' . $form_mode);
+        if ($entity_form_display) {
+          $visibility = $entity_form_display->status;
+        }
+      }
+
       if ($visibility) {
         $permission = $route->getRequirement('_field_ui_form_mode_access');
         return user_access($permission) ? static::ALLOW : static::DENY;
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php b/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php
index a431da2..04ba18b 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Access/ViewModeAccessCheck.php
@@ -31,8 +31,14 @@ public function access(Route $route, Request $request) {
       $bundle = $request->attributes->get('bundle');
       $view_mode = $request->attributes->get('mode');
 
-      $view_mode_settings = field_view_mode_settings($entity_type, $bundle);
-      $visibility = ($view_mode == 'default') || !empty($view_mode_settings[$view_mode]['status']);
+      $visibility = ($view_mode == 'default') ? TRUE : FALSE;
+      if ($view_mode != 'default') {
+        $entity_display = entity_load('entity_display', $entity_type . '.' . $bundle . '.' . $view_mode);
+        if ($entity_display) {
+          $visibility = $entity_display->status;
+        }
+      }
+
       if ($visibility) {
         $permission = $route->getRequirement('_field_ui_view_mode_access');
         return user_access($permission) ? static::ALLOW : static::DENY;
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 dfc6a13..cdc57df 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php
@@ -140,16 +140,39 @@ protected function getDisplayModes() {
    * {@inheritdoc}
    */
   protected function getDisplayModeSettings() {
-    return field_view_mode_settings($this->entity_type, $this->bundle);
+    $display_settings = array();
+    $entity_info = $this->entityManager->getDefinition('entity_display');
+    $config_prefix = $entity_info['config_prefix'];
+    $ids = config_get_storage_names_with_prefix($config_prefix . '.' . $this->entity_type . '.' . $this->bundle);
+    foreach ($ids as $id) {
+      $display = entity_load('entity_display', str_replace($config_prefix . '.', '', $id));
+      if ($display->get('mode') == 'default') {
+        continue;
+      }
+      $display_settings[$display->get('mode')] = array(
+        'label' => $display->label(),
+        'status' => $display->get('status')
+      );
+    }
+    return $display_settings;
   }
 
   /**
    * {@inheritdoc}
    */
   protected function saveDisplayModeSettings($display_mode_settings) {
-    $bundle_settings = field_bundle_settings($this->entity_type, $this->bundle);
-    $bundle_settings['view_modes'] = NestedArray::mergeDeep($bundle_settings['view_modes'], $display_mode_settings);
-    field_bundle_settings($this->entity_type, $this->bundle, $bundle_settings);
+    $entity_info = $this->entityManager->getDefinition('entity_display');
+    $config_prefix = $entity_info['config_prefix'];
+    $ids = config_get_storage_names_with_prefix($config_prefix . '.' . $this->entity_type . '.' . $this->bundle);
+    foreach ($ids as $id) {
+      $display = entity_load('entity_display', str_replace($config_prefix . '.', '', $id));
+      if ($display->get('mode') == 'default') {
+        continue;
+      }
+      $status = $display_mode_settings[$display->get('mode')]['status'];
+      $display->set('status', $status);
+      $display->save();
+    }
   }
 
   /**
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 3f9adea..87e31c3 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverviewBase.php
@@ -519,6 +519,7 @@ public function submitForm(array &$form, array &$form_state) {
           // far.
           if (!entity_load($this->getEntityDisplay('default')->entityType(), $this->entity_type . '.' . $this->bundle . '.' . $mode)) {
             $display = $this->getEntityDisplay('default')->createCopy($mode);
+            $display->setStatus(TRUE);
             $display->save();
           }
 
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 1186fc2..686b5d3 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FormDisplayOverview.php
@@ -100,16 +100,38 @@ protected function getDisplayModes() {
    * {@inheritdoc}
    */
   protected function getDisplayModeSettings() {
-    return field_form_mode_settings($this->entity_type, $this->bundle);
+    $display_settings = array();
+    $entity_info = $this->entityManager->getDefinition('entity_form_display');
+    $config_prefix = $entity_info['config_prefix'];
+    $ids = config_get_storage_names_with_prefix($config_prefix . '.' . $this->entity_type . '.' . $this->bundle);
+    foreach ($ids as $id) {
+      $display = entity_load('entity_form_display', str_replace($config_prefix . '.', '', $id));
+      if ($display->get('mode') == 'default') {
+        continue;
+      }
+      $display_settings[$display->get('mode')] = array(
+        'label' => $display->label(),
+        'status' => $display->get('status')
+      );
+    }
+    return $display_settings;
   }
 
   /**
    * {@inheritdoc}
    */
   protected function saveDisplayModeSettings($display_mode_settings) {
-    $bundle_settings = field_bundle_settings($this->entity_type, $this->bundle);
-    $bundle_settings['form_modes'] = NestedArray::mergeDeep($bundle_settings['form_modes'], $display_mode_settings);
-    field_bundle_settings($this->entity_type, $this->bundle, $bundle_settings);
+    $entity_info = $this->entityManager->getDefinition('entity_form_display');
+    $config_prefix = $entity_info['config_prefix'];
+    $ids = config_get_storage_names_with_prefix($config_prefix . '.' . $this->entity_type . '.' . $this->bundle);
+    foreach ($ids as $id) {
+      $display = entity_load('entity_form_display', str_replace($config_prefix . '.', '', $id));
+      if ($display->get('mode') == 'default') {
+        continue;
+      }
+      $display->set('status', $display_mode_settings[$display->get('mode')]['status']);
+      $display->save();
+    }
   }
 
   /**
diff --git a/core/modules/user/user.install b/core/modules/user/user.install
index 2d5b03e..74d2717 100644
--- a/core/modules/user/user.install
+++ b/core/modules/user/user.install
@@ -361,11 +361,11 @@ function user_update_dependencies() {
  * The 'Member for' extra field has moved one level up in the array.
  */
 function user_update_8000() {
-  $settings = field_bundle_settings('user', 'user');
+  $settings = update_variable_get('field_bundle_settings_user__user', array());
   if (isset($settings['extra_fields']['display']['summary'])) {
     $settings['extra_fields']['display']['member_for'] = $settings['extra_fields']['display']['summary'];
     unset($settings['extra_fields']['display']['summary']);
-    field_bundle_settings('user', 'user', $settings);
+    update_variable_set('field_bundle_settings_user__user', $settings);
   }
 }
 
