Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.399
diff -u -p -r1.399 form.inc
--- includes/form.inc	15 Nov 2009 21:36:06 -0000	1.399
+++ includes/form.inc	15 Nov 2009 23:53:48 -0000
@@ -309,7 +309,16 @@ function drupal_rebuild_form($form_id, &
   // Clear out all post data, as we don't want the previous step's
   // data to pollute this one and trigger validate/submit handling,
   // then process the form for rendering.
-  $form_state['input'] = array();
+  if (!empty($form_state['rebuild'])) {
+    $form_state['input'] = array();
+    $form_state['values'] = array();
+  }
+  // If a rebuild of this form was requested without $form_state['rebuild']
+  // being TRUE, then we want to process the same submitted values for
+  // rendering again.
+  else {
+    $form_state['input'] = $form_state['method'] == 'get' ? $_GET : $_POST;
+  }
 
   // Also clear out all group associations as these might be different
   // when rerendering the form.
@@ -1044,6 +1053,13 @@ function form_builder($form_id, $element
     else {
       $form_state['process_input'] = FALSE;
     }
+    // In addition to submitted form values,
+    // _form_builder_handle_input_elements() automatically takes over stored
+    // form values upon rebuild. If there was a validation error, prevent this
+    // from happening.
+    if (form_get_errors()) {
+      $form_state['values'] = array();
+    }
   }
 
   if (!isset($element['#id'])) {
