Index: misc/teaser.js
===================================================================
RCS file: /cvs/drupal/drupal/misc/teaser.js,v
retrieving revision 1.10
diff -u -r1.10 teaser.js
--- misc/teaser.js	13 Nov 2007 14:04:08 -0000	1.10
+++ misc/teaser.js	21 Dec 2007 01:47:11 -0000
@@ -17,6 +17,7 @@
     // Move teaser textarea before body, and remove its form-item wrapper.
     var body = $('#'+ Drupal.settings.teaser[this.id]);
     var checkbox = $('#'+ Drupal.settings.teaserCheckbox[this.id]).parent();
+    var checked = $(checkbox).children('input').attr('checked') ? true : false;
     var parent = teaser[0].parentNode;
     $(body).before(teaser);
     $(parent).remove();
@@ -30,13 +31,18 @@
       if (teaser.val()) {
         body.val(trim(teaser.val()) +'\r\n\r\n'+ trim(body.val()));
       }
-      // Hide and disable teaser
+      // Empty, hide and disable teaser.
+      teaser[0].value = '';
       $(teaser).attr('disabled', 'disabled');
       $(teaser).parent().slideUp('fast');
-      // Change label
+      // Change label.
       $(this).val(Drupal.t('Split summary at cursor'));
-      // Show separate teaser checkbox
+      // Hide separate teaser checkbox.
       $(checkbox).hide();
+      // Because we don't want a hidden checkbox to affect saved data, save
+      // the current checked status and restore the default while hidden.
+      checked = $(checkbox).children('input').attr('checked') ? true : false;
+      $(checkbox).children('input').attr('checked', true);
     }
 
     // Split the teaser from the body.
@@ -54,8 +60,8 @@
       $(teaser).parent().slideDown('fast');
       // Change label
       $(this).val(Drupal.t('Join summary'));
-      // Show separate teaser checkbox
-      $(checkbox).show();
+      // Show separate teaser checkbox, restore checked value.
+      $(checkbox).show().children('input').attr('checked', checked);
     }
 
     // Add split/join button.
@@ -75,7 +81,7 @@
     else {
       $(teaser).hide();
       $('input', button).val(Drupal.t('Split summary at cursor')).toggle(split_teaser, join_teaser);
-      $(checkbox).hide();
+      $(checkbox).hide().children('input').attr('checked', true);
     }
 
   });
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.930
diff -u -r1.930 node.module
--- modules/node/node.module	20 Dec 2007 09:20:41 -0000	1.930
+++ modules/node/node.module	21 Dec 2007 01:47:13 -0000
@@ -777,7 +777,10 @@
       $node->teaser = node_teaser($node->body, isset($node->format) ? $node->format : NULL);
       // Chop off the teaser from the body if needed.
       if (empty($node->teaser_include) && $node->teaser == substr($node->body, 0, strlen($node->teaser))) {
-        $node->body = substr($node->body, strlen($node->teaser));
+        // Check if the teaser exists.
+        if (strlen($node->teaser) !== strlen($node->body)) {
+          $node->body = substr($node->body, strlen($node->teaser));
+        }
       }
     }
     else {
Index: modules/node/node.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v
retrieving revision 1.19
diff -u -r1.19 node.pages.inc
--- modules/node/node.pages.inc	20 Dec 2007 09:20:41 -0000	1.19
+++ modules/node/node.pages.inc	21 Dec 2007 01:47:13 -0000
@@ -281,7 +281,7 @@
     '#type' => 'checkbox',
     '#title' => t('Show summary in full view'),
     '#default_value' => $include,
-    '#prefix' => '<div class="teaser-checkbox">',
+    '#prefix' => '<div class="teaser-checkbox clear-block">',
     '#suffix' => '</div>',
   );
 
Index: modules/system/system.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.css,v
retrieving revision 1.45
diff -u -r1.45 system.css
--- modules/system/system.css	13 Dec 2007 10:14:18 -0000	1.45
+++ modules/system/system.css	21 Dec 2007 01:47:13 -0000
@@ -397,6 +397,9 @@
   padding-right: 5%; /* LTR */
   margin: 0;
 }
+.teaser-checkbox {
+  margin-bottom: -2em;
+}
 .teaser-checkbox div.form-item {
   float: right; /* LTR */
   margin: 0 5% 0 0; /* LTR */
