diff --git a/core/includes/form.inc b/core/includes/form.inc
index c94bc62..4c0c363 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -1899,11 +1899,16 @@ function form_builder($form_id, &$element, &$form_state) {
     }
 
     // If the triggering element specifies "button-level" validation and submit
-    // handlers to run instead of the default form-level ones, then add those to
-    // the form state.
+    // handlers to run in addition to or instead of the default form-level ones,
+    // then add those to the form state.
     foreach (array('validate', 'submit') as $type) {
       if (isset($form_state['triggering_element']['#' . $type])) {
-        $form_state[$type . '_handlers'] = $form_state['triggering_element']['#' . $type];
+        $form_state[$type . '_handlers'] = array();
+        // If requested, add the form's base handlers to the list first.
+        if (!empty($form_state['triggering_element']['#execute_base_' . $type . '_handlers'])) {
+          $form_state[$type . '_handlers'] += $form_state['#' . $type];
+        }
+        $form_state[$type . '_handlers'] += $form_state['triggering_element']['#' . $type];
       }
     }
 
