=== modified file 'includes/form.inc'
--- includes/form.inc	
+++ includes/form.inc	
@@ -107,7 +107,7 @@ function drupal_get_form($form_id) {
       $_SESSION['form'][$form_build_id] = $args;
       $form['#build_id'] = $form_build_id;
     }
-    drupal_process_form($args[0], $form);
+    drupal_process_form($args[0], $form, TRUE);
   }
 
   return drupal_render_form($args[0], $form);
@@ -196,10 +196,12 @@ function drupal_retrieve_form($form_id) 
  *   The unique string identifying the current form.
  * @param $form
  *   An associative array containing the structure of the form.
+ * @param $multistep
+ *   Internal use. It's only to be used when a multistep form is being processed.
  * @return
  *   The path to redirect the user to upon completion.
  */
-function drupal_process_form($form_id, &$form) {
+function drupal_process_form($form_id, &$form, $multistep = FALSE) {
   global $form_values, $form_submitted, $user, $form_button_counter;
   static $saved_globals = array();
   // In some scenerios, this function can be called recursively. Pushing any pre-existing
@@ -212,7 +214,7 @@ function drupal_process_form($form_id, &
   $form_button_counter = array(0, 0);
 
   drupal_prepare_form($form_id, $form);
-  if (($form['#programmed']) || (!empty($_POST) && (($_POST['form_id'] == $form_id) || ($_POST['form_id'] == $form['#base'])))) {
+  if (($form['#programmed']) || (!empty($_POST) && !$multistep && (($_POST['form_id'] == $form_id) || ($_POST['form_id'] == $form['#base'])))) {
     drupal_validate_form($form_id, $form);
     // IE does not send a button value when there is only one submit button (and no non-submit buttons)
     // and you submit by pressing enter.
