Index: modules/node/node.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v
retrieving revision 1.69
diff -u -r1.69 node.pages.inc
--- modules/node/node.pages.inc	12 Jun 2009 08:39:38 -0000	1.69
+++ modules/node/node.pages.inc	12 Jun 2009 15:13:36 -0000
@@ -112,6 +112,14 @@
   }
   if (isset($form_state['node_preview'])) {
     $form['#prefix'] = $form_state['node_preview'];
+    $form['preview_buttons'] = array();
+    $form['preview_buttons']['#weight'] = -10;
+    $form['preview_buttons']['preview_submit'] = array(
+      '#type' => 'submit',
+      '#access' => !form_get_errors(),
+      '#value' => t('Save'),
+      '#submit' => array('node_form_submit'),
+    );
   }
   $node = (object)$node;
   foreach (array('title') as $key) {
Index: modules/node/node.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.test,v
retrieving revision 1.32
diff -u -r1.32 node.test
--- modules/node/node.test	12 Jun 2009 08:39:38 -0000	1.32
+++ modules/node/node.test	12 Jun 2009 15:13:36 -0000
@@ -254,6 +254,9 @@
     $this->assertText($edit['title'], t('Title displayed.'));
     $this->assertText($edit[$body_key], t('Body displayed.'));
 
+    // Previewing should have its own, additional submit button.
+    $this->assertFieldById('edit-preview-submit', t('Save'), t("Preview's save button displayed."));
+
     // Check that the title and body fields are displayed with the correct values.
     $this->assertFieldByName('title', $edit['title'], t('Title field displayed.'));
     $this->assertFieldByName($body_key, $edit[$body_key], t('Body field displayed.'));
