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); }