Index: modules/node/node.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v
retrieving revision 1.73
diff -u -p -r1.73 node.pages.inc
--- modules/node/node.pages.inc	4 Aug 2009 06:44:48 -0000	1.73
+++ modules/node/node.pages.inc	6 Aug 2009 17:23:23 -0000
@@ -265,6 +265,13 @@ function node_form(&$form_state, $node) 
     '#weight' => 5,
     '#submit' => array('node_form_submit'),
   );
+  $form['buttons']['draft'] = array(
+    '#access' => user_access('access revisions') && user_access('revert revisions'),
+    '#type' => 'submit',
+    '#value' => t('Save as draft'),
+    '#weight' => 6,
+    '#submit' => array('node_form_draft_submit'),
+  );
   $form['buttons']['preview'] = array(
     '#access' => variable_get('node_preview_' . $node->type, 1) != DRUPAL_DISABLED,
     '#type' => 'submit',
@@ -395,6 +402,23 @@ function theme_node_preview($node) {
   return $output;
 }
 
+function node_form_draft_submit($form, &$form_state) {
+  $node = node_form_submit_build_node($form, $form_state);
+  node_save($node);
+  db_update('node')
+    ->fields(array('vid' => $node->old_vid))
+    ->condition('nid', $node->nid)
+    ->execute();
+
+  if ($node->nid) {
+    unset($form_state['rebuild']);
+    $form_state['nid'] = $node->nid;
+    $form_state['redirect'] = 'node/' . $node->nid;
+  }
+}
+
+
+
 function node_form_submit($form, &$form_state) {
   global $user;
 
