Index: includes/form.inc
===================================================================
RCS file: /Users/wright/drupal/local_repo/drupal/includes/form.inc,v
retrieving revision 1.426
diff -u -p -r1.426 form.inc
--- includes/form.inc	8 Jan 2010 06:36:34 -0000	1.426
+++ includes/form.inc	14 Jan 2010 23:33:34 -0000
@@ -747,11 +747,16 @@ function drupal_prepare_form($form_id, &
     }
   }
 
-  // Invoke hook_form_FORM_ID_alter() implementations.
-  drupal_alter('form_' . $form_id, $form, $form_state);
-
-  // Invoke hook_form_alter() implementations.
+  // Invoke generic hook_form_alter() implementations.
   drupal_alter('form', $form, $form_state, $form_id);
+
+  // Invoke hook_form_FORM_ID_alter() implementations. We need to invoke the
+  // specific alter functions after the generic ones so that if someone needs
+  // to alter a specific form, they can alter everything about that form, even
+  // elements (like taxonomy) that are added by the generic form_alter() hooks.
+  // Otherwise, you can never use the FORM_ID-specific hooks to alter a single
+  // form if that form was ever modified by any of the generic alter hooks.
+  drupal_alter('form_' . $form_id, $form, $form_state);
 }
 
 
