Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.195
diff -U3 -r1.195 form.inc
--- includes/form.inc	14 May 2007 13:43:32 -0000	1.195
+++ includes/form.inc	15 May 2007 22:18:30 -0000
@@ -274,6 +274,7 @@
 
     if ((!empty($form_state['submitted'])) && !form_get_errors() && empty($form_state['rebuild'])) {
       $form_state['redirect'] = NULL;
+      $form_state['persist'] = array();
       form_execute_handlers('submit', $form, $form_state);
 
       // We'll clear out the cached copies of the form and its stored data
@@ -611,7 +612,15 @@
         $batch['sets'][] = array('form_submit' => array($function));
       }
       else {
-        $function($form_state['values'], $form, $form_state);
+        // the persistant $form_state element passes along submit return values to subsequent submit handlers
+        if ($type == 'submit') {
+          // we want to persist submit return values
+          $form_state['persist'][$function] = $function($form_state['values'], $form, $form_state);
+        }
+        else {
+          // preserve the normal functionality on validate
+          $function($form_state['values'], $form, $form_state);
+        }
       }
       $return = TRUE;
     }
