Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.366
diff -u -p -r1.366 form.inc
--- includes/form.inc	25 Aug 2009 21:16:31 -0000	1.366
+++ includes/form.inc	26 Aug 2009 09:26:03 -0000
@@ -154,6 +154,11 @@ function drupal_build_form($form_id, &$f
       $form = drupal_retrieve_form($form_id, $form_state);
       $form_build_id = 'form-' . md5(uniqid(mt_rand(), TRUE));
       $form['#build_id'] = $form_build_id;
+      // Record the filepath of the include file containing the original form.
+      $item = menu_get_item();
+      if (!empty($item['file'])) {
+        $form_state['storage']['file'] = $item['file'];
+      }
 
       // Fix the form method, if it is 'get' in $form_state, but not in $form.
       if ($form_state['method'] == 'get' && !isset($form['#method'])) {
@@ -262,6 +267,9 @@ function form_state_defaults() {
  *   The newly built form.
  */
 function drupal_rebuild_form($form_id, &$form_state, $form_build_id = NULL) {
+  if (isset($form_state['storage']['file']) && file_exists($form_state['storage']['file'])) {
+    require_once DRUPAL_ROOT . '/' . $form_state['storage']['file'];
+  }
   $form = drupal_retrieve_form($form_id, $form_state);
 
   if (!isset($form_build_id)) {
