=== modified file 'modules/field/field.info.inc'
--- modules/field/field.info.inc	2010-08-03 23:01:14 +0000
+++ modules/field/field.info.inc	2010-08-20 15:06:18 +0000
@@ -306,7 +306,7 @@ function _field_info_prepare_instance($i
   foreach ($entity_info['view modes'] as $view_mode => $info) {
     if (!isset($instance['display'][$view_mode])) {
       $instance['display'][$view_mode] = array(
-        'type' => 'hidden',
+        'type' => empty($info['defaults to hidden']) ? $field_type['default_formatter'] : 'hidden',
         'label' => 'above',
         'settings' => array(),
         'weight' => 0,

=== modified file 'modules/node/node.module'
--- modules/node/node.module	2010-08-11 14:21:38 +0000
+++ modules/node/node.module	2010-08-20 15:06:18 +0000
@@ -190,6 +190,7 @@ function node_entity_info() {
         'full' => array(
           'label' => t('Full content'),
           'custom settings' => FALSE,
+          'defaults to hidden' => FALSE,
         ),
         'teaser' => array(
           'label' => t('Teaser'),
@@ -210,6 +211,7 @@ function node_entity_info() {
       'search_index' => array(
         'label' => t('Search index'),
         'custom settings' => FALSE,
+        'defaults to hidden' => FALSE,
       ),
       'search_result' => array(
         'label' => t('Search result'),

=== modified file 'modules/node/node.test'
--- modules/node/node.test	2010-08-08 13:02:37 +0000
+++ modules/node/node.test	2010-08-20 15:05:17 +0000
@@ -1767,3 +1767,31 @@ class NodeTokenReplaceTestCase extends D
     }
   }
 }
+
+class NodeCustomDisplayModeTest extends DrupalWebTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Custom display mode',
+      'description' => 'Customize full display mode and make sure fields still displays.',
+      'group' => 'Node',
+    );
+  }
+
+  function setUp() {
+    parent::setUp();
+    $this->admin_user = $this->drupalCreateUser(array('administer content types'));
+    $this->drupalLogin($this->admin_user);
+  }
+
+  function testCustomDisplay() {
+    $node = $this->drupalCreateNode();
+    $edit['view_modes_custom[full]'] = TRUE;
+    $edit['view_modes_custom[rss]'] = TRUE;
+    $this->drupalGet("node/$node->nid");
+    $this->assertText($node->body[LANGUAGE_NONE][0]['value']);
+    $this->drupalPost('admin/structure/types/manage/page/display', $edit, t('Save'));
+    $this->drupalGet("node/$node->nid");
+    $this->assertText($node->body[LANGUAGE_NONE][0]['value']);
+  }
+}

