Index: modules/field/field.info.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.info.inc,v
retrieving revision 1.52
diff -u -p -r1.52 field.info.inc
--- modules/field/field.info.inc	3 Aug 2010 23:01:14 -0000	1.52
+++ modules/field/field.info.inc	18 Aug 2010 02:07:17 -0000
@@ -301,19 +301,6 @@ function _field_info_prepare_instance($i
     $instance['display'][$view_mode] = _field_info_prepare_instance_display($field, $display);
   }
 
-  // Fallback to 'hidden' for unspecified view modes.
-  $entity_info = entity_get_info($instance['entity_type']);
-  foreach ($entity_info['view modes'] as $view_mode => $info) {
-    if (!isset($instance['display'][$view_mode])) {
-      $instance['display'][$view_mode] = array(
-        'type' => 'hidden',
-        'label' => 'above',
-        'settings' => array(),
-        'weight' => 0,
-      );
-    }
-  }
-
   return $instance;
 }
 
Index: modules/field/field.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.module,v
retrieving revision 1.81
diff -u -p -r1.81 field.module
--- modules/field/field.module	14 Aug 2010 03:10:04 -0000	1.81
+++ modules/field/field.module	18 Aug 2010 02:07:17 -0000
@@ -456,7 +456,7 @@ function field_get_display($instance, $v
   // Check whether the view mode uses custom display settings or the 'default'
   // mode.
   $view_mode_settings = field_view_mode_settings($instance['entity_type'], $instance['bundle']);
-  $actual_mode = (!empty($view_mode_settings[$view_mode]['custom_settings']) ? $view_mode : 'default');
+  $actual_mode = (!empty($view_mode_settings[$view_mode]['custom_settings']) && !empty($instance['display'][$view_mode]) ? $view_mode : 'default');
   $display = $instance['display'][$actual_mode];
 
   // Let modules alter the display settings.
@@ -488,7 +488,7 @@ function field_extra_fields_get_display(
   // Check whether the view mode uses custom display settings or the 'default'
   // mode.
   $view_mode_settings = field_view_mode_settings($entity_type, $bundle);
-  $actual_mode = (!empty($view_mode_settings[$view_mode]['custom_settings'])) ? $view_mode : 'default';
+  $actual_mode = (!empty($view_mode_settings[$view_mode]['custom_settings']) && !empty($instance['display'][$view_mode]) ? $view_mode : 'default');
   $extra_fields = field_info_extra_fields($entity_type, $bundle, 'display');
 
   $displays = array();
Index: modules/field_ui/field_ui.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.admin.inc,v
retrieving revision 1.60
diff -u -p -r1.60 field_ui.admin.inc
--- modules/field_ui/field_ui.admin.inc	10 Aug 2010 17:05:18 -0000	1.60
+++ modules/field_ui/field_ui.admin.inc	18 Aug 2010 02:07:17 -0000
@@ -740,9 +740,10 @@ function field_ui_display_overview_form(
     'visible' => t('Visible'),
     'hidden' => t('Hidden'),
   );
-
+  $view_mode_settings = field_view_mode_settings($entity_type, $bundle);
   foreach ($instances as $name => $instance) {
-    $display = $instance['display'][$view_mode];
+    $actual_mode = (!empty($view_mode_settings[$view_mode]['custom_settings']) && !empty($instance['display'][$view_mode]) ? $view_mode : 'default');
+    $display = $instance['display'][$actual_mode];
     $table[$name]['human_name'] = array(
       '#markup' => check_plain($instance['label']),
     );
