Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.865
diff -u -p -r1.865 node.module
--- modules/node/node.module	2 Aug 2007 20:08:52 -0000	1.865
+++ modules/node/node.module	3 Aug 2007 22:46:44 -0000
@@ -3102,10 +3102,14 @@ function node_content_access($op, $node)
 /**
  * Return a node body field, with format and teaser.
  */
-function node_body_field(&$node, $label, $word_count) {
+function node_body_field(&$node, $label, $word_count, $form_state) {
 
   // Check if we need to restore the teaser at the beginning of the body.
   $include = !isset($node->teaser) || ($node->teaser == substr($node->body, 0, strlen($node->teaser)));
+  // Don't do this after a preview or similar operations - in this case the
+  // 'rebuild' flag will be set for the form.
+  $body = ($include || !empty($form_state['rebuild'])) ? $node->body : ($node->teaser . $node->body);
+ 
 
   $form = array(
     '#after_build' => array('node_teaser_js'));
@@ -3128,7 +3132,7 @@ function node_body_field(&$node, $label,
   $form['body'] = array(
     '#type' => 'textarea',
     '#title' => check_plain($label),
-    '#default_value' => $include ? $node->body : ($node->teaser . $node->body),
+    '#default_value' => $body,
     '#rows' => 20,
     '#required' => ($word_count > 0));
 
@@ -3155,7 +3159,7 @@ function node_content_form($node, $form_
   }
 
   if ($type->has_body) {
-    $form['body_field'] = node_body_field($node, $type->body_label, $type->min_word_count);
+    $form['body_field'] = node_body_field($node, $type->body_label, $type->min_word_count, $form_state);
   }
 
   return $form;
