diff --git a/core/lib/Drupal/Core/Form/FormSubmitter.php b/core/lib/Drupal/Core/Form/FormSubmitter.php
index a9bd0ac..89969bd 100644
--- a/core/lib/Drupal/Core/Form/FormSubmitter.php
+++ b/core/lib/Drupal/Core/Form/FormSubmitter.php
@@ -96,8 +96,8 @@ public function executeSubmitHandlers(&$form, FormStateInterface &$form_state) {
     // If there was a button pressed, use its handlers.
     $handlers = $form_state->getSubmitHandlers();
     // Otherwise, check for a form-level handler.
-    if (!$handlers && !empty($form['#submit'])) {
-      $handlers = $form['#submit'];
+    if (!empty($form['#submit'])) {
+      $handlers = array_merge($handlers, $form['#submit']);
     }
 
     foreach ($handlers as $callback) {
diff --git a/core/lib/Drupal/Core/Form/FormValidator.php b/core/lib/Drupal/Core/Form/FormValidator.php
index ee2da65..b3b0cbf 100644
--- a/core/lib/Drupal/Core/Form/FormValidator.php
+++ b/core/lib/Drupal/Core/Form/FormValidator.php
@@ -70,8 +70,8 @@ public function executeValidateHandlers(&$form, FormStateInterface &$form_state)
     // If there was a button pressed, use its handlers.
     $handlers = $form_state->getValidateHandlers();
     // Otherwise, check for a form-level handler.
-    if (!$handlers && isset($form['#validate'])) {
-      $handlers = $form['#validate'];
+    if (isset($form['#validate'])) {
+      $handlers = array_merge($handlers, $form['#validate']);
     }
 
     foreach ($handlers as $callback) {
diff --git a/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php b/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php
index 4e7e85c..f37c842 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormSubmitterTest.php
@@ -207,7 +207,7 @@ public function testExecuteSubmitHandlers() {
     $mock->expects($this->once())
       ->method('submit_handler')
       ->with($this->isType('array'), $this->isInstanceOf('Drupal\Core\Form\FormStateInterface'));
-    $mock->expects($this->once())
+    $mock->expects($this->exactly(3))
       ->method('hash_submit')
       ->with($this->isType('array'), $this->isInstanceOf('Drupal\Core\Form\FormStateInterface'));
     $mock->expects($this->once())
diff --git a/core/tests/Drupal/Tests/Core/Form/FormValidatorTest.php b/core/tests/Drupal/Tests/Core/Form/FormValidatorTest.php
index cc49c2c..f57cdc7 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormValidatorTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormValidatorTest.php
@@ -279,7 +279,7 @@ public function testExecuteValidateHandlers() {
     $mock->expects($this->once())
       ->method('validate_handler')
       ->with($this->isType('array'), $this->isInstanceOf('Drupal\Core\Form\FormStateInterface'));
-    $mock->expects($this->once())
+    $mock->expects($this->exactly(2))
       ->method('hash_validate')
       ->with($this->isType('array'), $this->isInstanceOf('Drupal\Core\Form\FormStateInterface'));
 
