diff --git modules/field/field.module modules/field/field.module
index d7da476..17b4576 100644
--- modules/field/field.module
+++ modules/field/field.module
@@ -373,7 +373,7 @@ function _field_sort_items_value_helper($a, $b) {
  *       'extra_field_2' => ...
  *     ),
  *   ),
- * ),
+ * );
  * @endcode
  *
  * @param $entity_type
@@ -390,7 +390,27 @@ function field_bundle_settings($entity_type, $bundle, $settings = NULL) {
   $stored_settings = variable_get('field_bundle_settings', array());
 
   if (isset($settings)) {
+    $old_settings = isset($stored_settings[$entity_type][$bundle]) ? $stored_settings[$entity_type][$bundle] : array();
+    // When a view mode gets specialized to use custom display settings,
+    // initialize it with the current settings for the 'default' mode.
+    foreach (array_keys($settings['view_modes']) as $view_mode) {
+      if ($settings['view_modes'][$view_mode]['custom_settings'] && empty($old_settings['view_modes'][$view_mode]['custom_settings'])) {
+        // Update display settings for field instances.
+        foreach (field_info_instances($entity_type, $bundle) as $instance) {
+          $instance['display'][$view_mode] = $instance['display']['default'];
+          field_update_instance($instance);
+        }
+        // Update display settings for 'extra fields'.
+        foreach (array_keys($settings['extra_fields']['display']) as $name) {
+          $settings['extra_fields']['display'][$name][$view_mode] = $settings['extra_fields']['display'][$name]['default'];
+        }
+        // @todo we need a hook to let contrib react (fieldgroup...).
+        // @todo do we want to hardcode that in the API func, or only in Field UI.
+        // @todo reversedly, do we want to remove settings when switching back to 'default' ?
+      }
+    }
     $stored_settings[$entity_type][$bundle] = $settings;
+
     variable_set('field_bundle_settings', $stored_settings);
     drupal_static_reset('field_view_mode_settings');
     field_info_cache_clear();
@@ -401,6 +421,10 @@ function field_bundle_settings($entity_type, $bundle, $settings = NULL) {
       'view_modes' => array(),
       'extra_fields' => array(),
     );
+    $settings['extra_fields'] += array(
+      'form' => array(),
+      'display' => array(),
+    );
 
     return $settings;
   }
