Index: modules/node/content_types.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/content_types.inc,v
retrieving revision 1.88
diff -u -r1.88 content_types.inc
--- modules/node/content_types.inc	21 Aug 2009 00:21:48 -0000	1.88
+++ modules/node/content_types.inc	21 Aug 2009 06:09:27 -0000
@@ -186,13 +186,17 @@
     '#default_value' => variable_get('node_submitted_' . $type->type, TRUE),
     '#description' => t('Enable the <em>submitted by Username on date</em> text.'),
   );
-  $form['display']['teaser_length'] = array(
-    '#type' => 'select', 
-    '#title' => t('Length of trimmed posts'),
-    '#default_value' => variable_get('teaser_length_' . $type->type, 600),
-    '#options' => drupal_map_assoc(array(0, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000), '_node_characters'),
-    '#description' => t("The maximum number of characters used in the trimmed version of content.")
-  );
+  if ($type->has_body) {
+    $instance = field_info_instance('body', $type->type);
+    $summary_length = isset($instance['display']['teaser']['settings']['summary_length']) ? $instance['display']['teaser']['settings']['summary_length'] : 600;
+    $form['display']['teaser_length'] = array(
+      '#type' => 'select', 
+      '#title' => t('Length of trimmed posts'),
+      '#default_value' => $summary_length,
+      '#options' => drupal_map_assoc(array(0, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000), '_node_characters'),
+      '#description' => t("The maximum number of characters used in the trimmed version of content.")
+    );
+  }
   $form['old_type'] = array(
     '#type' => 'value',
     '#value' => $type->type,
@@ -305,6 +309,7 @@
   $type->custom = $form_state['values']['custom'];
   $type->modified = TRUE;
   $type->locked = $form_state['values']['locked'];
+  $type->summary_length = $form_state['values']['teaser_length'];
 
   if ($op == t('Delete content type')) {
     $form_state['redirect'] = 'admin/structure/node-type/' . str_replace('_', '-', $type->old_type) . '/delete';
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.1102
diff -u -r1.1102 node.module
--- modules/node/node.module	20 Aug 2009 09:47:04 -0000	1.1102
+++ modules/node/node.module	21 Aug 2009 06:09:29 -0000
@@ -525,7 +525,7 @@
         'settings' => array('display_summary' => TRUE),
 
         // With no UI in core, we have to define default
-        // formatters for the teaser and full view.
+        // formatters for RSS, teaser and full view.
         // This may change if the method of handling displays
         // is changed or if a UI gets into core.
         'display' => array(
@@ -536,6 +536,12 @@
           'teaser' => array(
             'label' => 'hidden',
             'type' => 'text_summary_or_trimmed',
+            'settings' => array('summary_length' => $type->summary_length),
+          ),
+          'rss' => array(
+            'label' => 'hidden',
+            'type' => 'text_summary_or_trimmed',
+            'settings' => array('summary_length' => $type->summary_length),
           ),
         ),
       );
@@ -544,6 +550,8 @@
     else {
       $instance['label'] = $type->body_label;
       $instance['settings']['display_summary'] = TRUE;
+      $instance['display']['teaser']['settings']['summary_length'] = $type->summary_length;
+      $instance['display']['rss']['settings']['summary_length'] = $type->summary_length;
       field_update_instance($instance);
     }
   }
@@ -665,6 +673,7 @@
     $type->modified = 0;
     $type->locked = 1;
     $type->is_new = 1;
+    $type->summary_length = 600;
   }
 
   $new_type = clone $type;
Index: modules/node/node.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.install,v
retrieving revision 1.27
diff -u -r1.27 node.install
--- modules/node/node.install	19 Aug 2009 22:46:05 -0000	1.27
+++ modules/node/node.install	21 Aug 2009 06:09:28 -0000
@@ -576,6 +576,26 @@
 }
 
 /**
+ * Move summary length from variable table to the body field data.
+ */
+function node_update_7008() {
+ 
+  // Get node type info for every invocation.
+  node_type_clear();
+  $node_types = node_type_get_types();
+  $body_types = array();
+  $teaser_length = variable_get('teaser_length', 600);
+  foreach ($node_types as $type => $info) {
+    if ($info->has_body) {
+      $info->summary_length = variable_get('teaser_length_' . $info->type, $teaser_length);
+      node_type_save($info);
+    }
+  }
+ 
+  return array();
+}
+
+/**
  * @} End of "defgroup updates-6.x-to-7.x"
  * The next series of updates should start at 8000.
  */
Index: modules/field/modules/text/text.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/modules/text/text.module,v
retrieving revision 1.19
diff -u -r1.19 text.module
--- modules/field/modules/text/text.module	20 Aug 2009 10:56:33 -0000	1.19
+++ modules/field/modules/text/text.module	21 Aug 2009 06:09:27 -0000
@@ -300,6 +300,7 @@
     'text_trimmed' => array(
       'label' => t('Trimmed'),
       'field types' => array('text', 'text_long', 'text_with_summary'),
+      'settings' => array('summary_length' => 600),
     ),
 
     // The 'summary or trimmed' field formatter for text_with_summary
@@ -309,6 +310,7 @@
     'text_summary_or_trimmed' => array(
       'label' => t('Summary or trimmed'),
       'field types' => array('text_with_summary'),
+      'settings' => array('summary_length' => 600),
     ),
   );
 }
@@ -333,7 +335,8 @@
 function theme_field_formatter_text_trimmed($element) {
   $field = field_info_field($element['#field_name']);
   $instance = field_info_instance($element['#field_name'], $element['#bundle']);
-  return text_summary($element['#item']['safe'], $instance['settings']['text_processing'] ? $element['#item']['format'] : NULL);
+  $size = $element['#settings']['summary_length'];
+  return text_summary($element['#item']['safe'], $instance['settings']['text_processing'] ? $element['#item']['format'] : NULL, $size);
 }
 
 /**
@@ -350,7 +353,7 @@
     return $element['#item']['safe_summary'];
   }
   else {
-    $size = variable_get('teaser_length_' . $element['#bundle'], 600);
+    $size = $element['#settings']['summary_length'];
     return text_summary($element['#item']['safe'], $instance['settings']['text_processing'] ? $element['#item']['format'] : NULL, $size);
   }
 }
