diff --git a/core/includes/form.inc b/core/includes/form.inc
index f5f5b98..b30d670 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -873,6 +873,9 @@ function drupal_process_form($form_id, &$form, &$form_state) {
     }
 
     if ($form_state['submitted'] && !form_get_errors() && !$form_state['rebuild']) {
+      // Clean out submitted values of submit buttons and internal Form API
+      // values.
+      form_state_values_clean($form_state);
       // Execute form submit handlers.
       form_execute_handlers('submit', $form, $form_state);
 
diff --git a/core/modules/aggregator/aggregator.admin.inc b/core/modules/aggregator/aggregator.admin.inc
index 9b9d2be..6a2021e 100644
--- a/core/modules/aggregator/aggregator.admin.inc
+++ b/core/modules/aggregator/aggregator.admin.inc
@@ -160,6 +160,7 @@ function aggregator_form_feed($form, &$form_state, stdClass $feed = NULL) {
     $form['actions']['delete'] = array(
       '#type' => 'submit',
       '#value' => t('Delete'),
+      '#submit' => array('aggregator_form_feed_delete_submit'),
     );
     $form['fid'] = array(
       '#type' => 'hidden',
@@ -202,35 +203,16 @@ function aggregator_form_feed_validate($form, &$form_state) {
  * @todo Add delete confirmation dialog.
  */
 function aggregator_form_feed_submit($form, &$form_state) {
-  if ($form_state['values']['op'] == t('Delete')) {
-    $title = $form_state['values']['title'];
-    // Unset the title.
-    unset($form_state['values']['title']);
-  }
   aggregator_save_feed($form_state['values']);
   if (isset($form_state['values']['fid'])) {
-    if (isset($form_state['values']['title'])) {
-      drupal_set_message(t('The feed %feed has been updated.', array('%feed' => $form_state['values']['title'])));
-      if (arg(0) == 'admin') {
-        $form_state['redirect'] = 'admin/config/services/aggregator/';
-        return;
-      }
-      else {
-        $form_state['redirect'] = 'aggregator/sources/' . $form_state['values']['fid'];
-        return;
-      }
+    drupal_set_message(t('The feed %feed has been updated.', array('%feed' => $form_state['values']['title'])));
+    if (arg(0) == 'admin') {
+      $form_state['redirect'] = 'admin/config/services/aggregator/';
+      return;
     }
     else {
-      watchdog('aggregator', 'Feed %feed deleted.', array('%feed' => $title));
-      drupal_set_message(t('The feed %feed has been deleted.', array('%feed' => $title)));
-      if (arg(0) == 'admin') {
-        $form_state['redirect'] = 'admin/config/services/aggregator/';
-        return;
-      }
-      else {
-        $form_state['redirect'] = 'aggregator/sources/';
-        return;
-      }
+      $form_state['redirect'] = 'aggregator/sources/' . $form_state['values']['fid'];
+      return;
     }
   }
   else {
@@ -240,6 +222,24 @@ function aggregator_form_feed_submit($form, &$form_state) {
 }
 
 /**
+ * Form submission handler for Delete button of aggregator_form_feed().
+ */
+function aggregator_form_feed_delete_submit($form, &$form_state) {
+  $title = $form_state['values']['title'];
+  unset($form_state['values']['title']);
+  aggregator_save_feed($form_state['values']);
+
+  watchdog('aggregator', 'Feed %feed deleted.', array('%feed' => $title));
+  drupal_set_message(t('The feed %feed has been deleted.', array('%feed' => $title)));
+  if (arg(0) == 'admin') {
+    $form_state['redirect'] = 'admin/config/services/aggregator/';
+  }
+  else {
+    $form_state['redirect'] = 'aggregator/sources/';
+  }
+}
+
+/**
  * Page callback: Deletes a feed.
  *
  * @param $feed
@@ -605,7 +605,11 @@ function aggregator_form_category($form, &$form_state, $edit = array('title' =>
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
   if ($edit['cid']) {
-    $form['actions']['delete'] = array('#type' => 'submit', '#value' => t('Delete'));
+    $form['actions']['delete'] = array(
+      '#type' => 'submit',
+      '#value' => t('Delete'),
+      '#submit' => array('aggregator_form_category_delete_submit'),
+    );
     $form['cid'] = array('#type' => 'hidden', '#value' => $edit['cid']);
   }
 
@@ -639,35 +643,16 @@ function aggregator_form_category_validate($form, &$form_state) {
  * @todo Add delete confirmation dialog.
  */
 function aggregator_form_category_submit($form, &$form_state) {
-  if ($form_state['values']['op'] == t('Delete')) {
-    $title = $form_state['values']['title'];
-    // Unset the title.
-    unset($form_state['values']['title']);
-  }
   aggregator_save_category($form_state['values']);
   if (isset($form_state['values']['cid'])) {
-    if (isset($form_state['values']['title'])) {
-      drupal_set_message(t('The category %category has been updated.', array('%category' => $form_state['values']['title'])));
-      if (arg(0) == 'admin') {
-        $form_state['redirect'] = 'admin/config/services/aggregator/';
-        return;
-      }
-      else {
-        $form_state['redirect'] = 'aggregator/categories/' . $form_state['values']['cid'];
-        return;
-      }
+    drupal_set_message(t('The category %category has been updated.', array('%category' => $form_state['values']['title'])));
+    if (arg(0) == 'admin') {
+      $form_state['redirect'] = 'admin/config/services/aggregator/';
+      return;
     }
     else {
-      watchdog('aggregator', 'Category %category deleted.', array('%category' => $title));
-      drupal_set_message(t('The category %category has been deleted.', array('%category' => $title)));
-      if (arg(0) == 'admin') {
-        $form_state['redirect'] = 'admin/config/services/aggregator/';
-        return;
-      }
-      else {
-        $form_state['redirect'] = 'aggregator/categories/';
-        return;
-      }
+      $form_state['redirect'] = 'aggregator/categories/' . $form_state['values']['cid'];
+      return;
     }
   }
   else {
@@ -675,3 +660,21 @@ function aggregator_form_category_submit($form, &$form_state) {
     drupal_set_message(t('The category %category has been added.', array('%category' => $form_state['values']['title'])));
   }
 }
+
+/**
+ * Form submission handler for Delete button in aggregator_form_category() form.
+ */
+function aggregator_form_category_delete_submit($form, &$form_state) {
+  $title = $form_state['values']['title'];
+  unset($form_state['values']['title']);
+  aggregator_save_category($form_state['values']);
+
+  watchdog('aggregator', 'Category %category deleted.', array('%category' => $title));
+  drupal_set_message(t('The category %category has been deleted.', array('%category' => $title)));
+  if (arg(0) == 'admin') {
+    $form_state['redirect'] = 'admin/config/services/aggregator/';
+  }
+  else {
+    $form_state['redirect'] = 'aggregator/categories/';
+  }
+}
diff --git a/core/modules/dblog/dblog.admin.inc b/core/modules/dblog/dblog.admin.inc
index d6b921a..3f6c0d2 100644
--- a/core/modules/dblog/dblog.admin.inc
+++ b/core/modules/dblog/dblog.admin.inc
@@ -347,7 +347,8 @@ function dblog_filter_form($form) {
   if (!empty($_SESSION['dblog_overview_filter'])) {
     $form['filters']['actions']['reset'] = array(
       '#type' => 'submit',
-      '#value' => t('Reset')
+      '#value' => t('Reset'),
+      '#submit' => array('dblog_filter_form_reset_submit'),
     );
   }
   return $form;
@@ -370,21 +371,19 @@ function dblog_filter_form_validate($form, &$form_state) {
  * @see dblog_filter_form_validate()
  */
 function dblog_filter_form_submit($form, &$form_state) {
-  $op = $form_state['values']['op'];
   $filters = dblog_filters();
-  switch ($op) {
-    case t('Filter'):
-      foreach ($filters as $name => $filter) {
-        if (isset($form_state['values'][$name])) {
-          $_SESSION['dblog_overview_filter'][$name] = $form_state['values'][$name];
-        }
-      }
-      break;
-    case t('Reset'):
-      $_SESSION['dblog_overview_filter'] = array();
-      break;
+  foreach ($filters as $name => $filter) {
+    if (isset($form_state['values'][$name])) {
+      $_SESSION['dblog_overview_filter'][$name] = $form_state['values'][$name];
+    }
   }
-  return 'admin/reports/dblog';
+}
+
+/**
+ * Form submission handler for Reset button in dblog_filter_form().
+ */
+function dblog_filter_form_reset_submit($form, &$form_state) {
+  unset($_SESSION['dblog_overview_filter']);
 }
 
 /**
diff --git a/core/modules/filter/filter.admin.inc b/core/modules/filter/filter.admin.inc
index c01fb93..228a9b6 100644
--- a/core/modules/filter/filter.admin.inc
+++ b/core/modules/filter/filter.admin.inc
@@ -357,9 +357,6 @@ function filter_admin_format_form_validate($form, &$form_state) {
  * @see filter_admin_format_form_validate()
  */
 function filter_admin_format_form_submit($form, &$form_state) {
-  // Remove unnecessary values.
-  form_state_values_clean($form_state);
-
   // Add the submitted form values to the text format, and save it.
   $format = $form['#format'];
   foreach ($form_state['values'] as $key => $value) {
diff --git a/core/modules/forum/forum.admin.inc b/core/modules/forum/forum.admin.inc
index 5171850..2744206 100644
--- a/core/modules/forum/forum.admin.inc
+++ b/core/modules/forum/forum.admin.inc
@@ -99,7 +99,6 @@ function forum_form_submit($form, &$form_state) {
   }
 
   // @todo Set explicit entity properties instead of arbitrary form values.
-  form_state_values_clean($form_state);
   $term = entity_create('taxonomy_term', $form_state['values']);
   $status = taxonomy_term_save($term);
   switch ($status) {
diff --git a/core/modules/image/image.admin.inc b/core/modules/image/image.admin.inc
index 933a4ad..65aebd7 100644
--- a/core/modules/image/image.admin.inc
+++ b/core/modules/image/image.admin.inc
@@ -222,7 +222,7 @@ function image_style_form_submit($form, &$form_state) {
     image_style_delete($old_style, $style->id());
   }
 
-  if ($form_state['values']['op'] == t('Update style')) {
+  if ($form_state['triggering_element']['#value'] == t('Update style')) {
     drupal_set_message(t('Changes to the style have been saved.'));
   }
   $form_state['redirect'] = 'admin/config/media/image-styles/edit/' . $style->id();
@@ -390,8 +390,6 @@ function image_effect_form($form, &$form_state, $style, $effect) {
  * Submit handler for updating an image effect.
  */
 function image_effect_form_submit($form, &$form_state) {
-  form_state_values_clean($form_state);
-
   $effect = $form_state['values'];
   $style = $form_state['image_style'];
   image_effect_save($style, $effect);
diff --git a/core/modules/locale/locale.pages.inc b/core/modules/locale/locale.pages.inc
index cf4edce..aee4f57 100644
--- a/core/modules/locale/locale.pages.inc
+++ b/core/modules/locale/locale.pages.inc
@@ -211,6 +211,7 @@ function locale_translate_filter_form($form, &$form_state) {
     $form['filters']['actions']['reset'] = array(
       '#type' => 'submit',
       '#value' => t('Reset'),
+      '#submit' => array('locale_translate_filter_form_reset_submit'),
     );
   }
 
@@ -221,24 +222,19 @@ function locale_translate_filter_form($form, &$form_state) {
  * Process result from locale translation filter form.
  */
 function locale_translate_filter_form_submit($form, &$form_state) {
-  $op = $form_state['values']['op'];
   $filters = locale_translate_filters();
-  switch ($op) {
-    case t('Filter'):
-      foreach ($filters as $name => $filter) {
-        if (isset($form_state['values'][$name])) {
-          $_SESSION['locale_translate_filter'][$name] = $form_state['values'][$name];
-        }
-      }
-      break;
-
-    case t('Reset'):
-      $_SESSION['locale_translate_filter'] = array();
-      break;
-
+  foreach ($filters as $name => $filter) {
+    if (isset($form_state['values'][$name])) {
+      $_SESSION['locale_translate_filter'][$name] = $form_state['values'][$name];
+    }
   }
+}
 
-  $form_state['redirect'] = 'admin/config/regional/translate/translate';
+/**
+ * Form submission handler for Reset button in locale_translate_filter_form().
+ */
+function locale_translate_filter_form_reset_submit($form, &$form_state) {
+  unset($_SESSION['locale_translate_filter']);
 }
 
 /**
diff --git a/core/modules/node/node.admin.inc b/core/modules/node/node.admin.inc
index 5681496..b9eda31 100644
--- a/core/modules/node/node.admin.inc
+++ b/core/modules/node/node.admin.inc
@@ -245,7 +245,7 @@ function node_filter_form() {
  */
 function node_filter_form_submit($form, &$form_state) {
   $filters = node_filters();
-  switch ($form_state['values']['op']) {
+  switch ($form_state['triggering_element']['#value']) {
     case t('Filter'):
     case t('Refine'):
       // Apply every filter that has a choice selected other than 'any'.
@@ -255,9 +255,11 @@ function node_filter_form_submit($form, &$form_state) {
         }
       }
       break;
+
     case t('Undo'):
       array_pop($_SESSION['node_overview_filter']);
       break;
+
     case t('Reset'):
       $_SESSION['node_overview_filter'] = array();
       break;
diff --git a/core/modules/path/path.admin.inc b/core/modules/path/path.admin.inc
index 0535454..f0d3dcd 100644
--- a/core/modules/path/path.admin.inc
+++ b/core/modules/path/path.admin.inc
@@ -246,9 +246,6 @@ function path_admin_form_validate($form, &$form_state) {
  * @see path_admin_form_delete_submit()
  */
 function path_admin_form_submit($form, &$form_state) {
-  // Remove unnecessary values.
-  form_state_values_clean($form_state);
-
   $pid = isset($form_state['values']['pid']) ? $form_state['values']['pid'] : 0;
   $source = &$form_state['values']['source'];
   $source = drupal_container()->get('path.alias_manager')->getSystemPath($source);
diff --git a/core/modules/poll/poll.module b/core/modules/poll/poll.module
index 6573218..20a4359 100644
--- a/core/modules/poll/poll.module
+++ b/core/modules/poll/poll.module
@@ -360,7 +360,7 @@ function poll_form(Node $node, &$form_state) {
  */
 function poll_more_choices_submit($form, &$form_state) {
   // Add one more choice to the form.
-  if ($form_state['values']['poll_more']) {
+  if ($form_state['triggering_element']['#value'] == t('Add another choice')) {
     $form_state['choice_count'] = count($form_state['values']['choice']) + 1;
   }
   // Renumber the choices. This invalidates the corresponding key/value
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index a5194f7..8c83c98 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -692,8 +692,6 @@ function _system_theme_settings_validate_path($path) {
  * Process system_theme_settings form submissions.
  */
 function system_theme_settings_submit($form, &$form_state) {
-  // Exclude unnecessary elements before saving.
-  form_state_values_clean($form_state);
   $values = $form_state['values'];
 
   // Extract the name of the theme from the submitted form values, then
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index eaaebc2..59f7634 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -3168,9 +3168,6 @@ function system_settings_form($form) {
  * add an array_filter value to your form.
  */
 function system_settings_form_submit($form, &$form_state) {
-  // Exclude unnecessary elements.
-  form_state_values_clean($form_state);
-
   foreach ($form_state['values'] as $key => $value) {
     if (is_array($value) && isset($form_state['values']['array_filter'])) {
       $value = array_keys(array_filter($value));
diff --git a/core/modules/taxonomy/taxonomy.admin.inc b/core/modules/taxonomy/taxonomy.admin.inc
index 5578936..5795e62 100644
--- a/core/modules/taxonomy/taxonomy.admin.inc
+++ b/core/modules/taxonomy/taxonomy.admin.inc
@@ -343,7 +343,7 @@ function taxonomy_overview_terms($form, &$form_state, Vocabulary $vocabulary) {
 function taxonomy_overview_terms_submit($form, &$form_state) {
   if ($form_state['triggering_element']['#value'] == t('Reset to alphabetical')) {
     // Execute the reset action.
-    if ($form_state['values']['reset_alphabetical'] === TRUE) {
+    if (!empty($form_state['values']['reset_alphabetical'])) {
       return taxonomy_vocabulary_confirm_reset_alphabetical_submit($form, $form_state);
     }
     // Rebuild the form to confirm the reset action.
diff --git a/core/modules/user/lib/Drupal/user/ProfileFormController.php b/core/modules/user/lib/Drupal/user/ProfileFormController.php
index c2b139d..9939a82 100644
--- a/core/modules/user/lib/Drupal/user/ProfileFormController.php
+++ b/core/modules/user/lib/Drupal/user/ProfileFormController.php
@@ -30,16 +30,6 @@ protected function actions(array $form, array &$form_state) {
   }
 
   /**
-   * Overrides Drupal\Core\Entity\EntityFormController::submit().
-   */
-  public function submit(array $form, array &$form_state) {
-    // @todo Consider moving this into the parent method.
-    // Remove unneeded values.
-    form_state_values_clean($form_state);
-    parent::submit($form, $form_state);
-  }
-
-  /**
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
diff --git a/core/modules/user/lib/Drupal/user/RegisterFormController.php b/core/modules/user/lib/Drupal/user/RegisterFormController.php
index 23b4d79..83da366 100644
--- a/core/modules/user/lib/Drupal/user/RegisterFormController.php
+++ b/core/modules/user/lib/Drupal/user/RegisterFormController.php
@@ -80,10 +80,6 @@ public function submit(array $form, array &$form_state) {
     else {
       $pass = user_password();
     }
-
-    // Remove unneeded values.
-    form_state_values_clean($form_state);
-
     $form_state['values']['pass'] = $pass;
     $form_state['values']['init'] = $form_state['values']['mail'];
 
diff --git a/core/modules/user/user.admin.inc b/core/modules/user/user.admin.inc
index dcd76d7..8559326 100644
--- a/core/modules/user/user.admin.inc
+++ b/core/modules/user/user.admin.inc
@@ -123,7 +123,7 @@ function user_filter_form() {
  * Process result from user administration filter form.
  */
 function user_filter_form_submit($form, &$form_state) {
-  $op = $form_state['values']['op'];
+  $op = $form_state['triggering_element']['#value'];
   $filters = user_filters();
   switch ($op) {
     case t('Filter'):
