diff --git a/modules/aggregator/aggregator.admin.inc b/modules/aggregator/aggregator.admin.inc
index 08087af..ee70b3f 100644
--- a/modules/aggregator/aggregator.admin.inc
+++ b/modules/aggregator/aggregator.admin.inc
@@ -112,11 +112,13 @@ function aggregator_form_feed($form, &$form_state, stdClass $feed = NULL) {
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array(
     '#type' => 'submit',
+    '#name' => 'save',
     '#value' => t('Save'),
   );
   if (!empty($feed->fid)) {
     $form['actions']['delete'] = array(
       '#type' => 'submit',
+      '#name' => 'delete',
       '#value' => t('Delete'),
     );
     $form['fid'] = array(
@@ -132,7 +134,7 @@ function aggregator_form_feed($form, &$form_state, stdClass $feed = NULL) {
  * Validate aggregator_form_feed() form submissions.
  */
 function aggregator_form_feed_validate($form, &$form_state) {
-  if ($form_state['values']['op'] == t('Save')) {
+  if ($form_state['triggering_element']['#name'] == 'save') {
     // Ensure URL is valid.
     if (!valid_url($form_state['values']['url'], TRUE)) {
       form_set_error('url', t('The URL %url is invalid. Enter a fully-qualified URL, such as http://www.example.com/feed.xml.', array('%url' => $form_state['values']['url'])));
@@ -161,7 +163,7 @@ 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')) {
+  if ($form_state['triggering_element']['#name'] == 'delete') {
     $title = $form_state['values']['title'];
     // Unset the title.
     unset($form_state['values']['title']);
@@ -316,7 +318,7 @@ function aggregator_form_opml_submit($form, &$form_state) {
     return;
   }
 
-  $form_state['values']['op'] = t('Save');
+  $form_state['triggering_element']['#name'] = 'save';
 
   foreach ($feeds as $feed) {
     // Ensure URL is valid.
@@ -526,9 +528,9 @@ function aggregator_form_category($form, &$form_state, $edit = array('title' =>
     '#default_value' => $edit['description'],
   );
   $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
+  $form['actions']['submit'] = array('#type' => 'submit', '#name' => 'save', '#value' => t('Save'));
   if ($edit['cid']) {
-    $form['actions']['delete'] = array('#type' => 'submit', '#value' => t('Delete'));
+    $form['actions']['delete'] = array('#type' => 'submit', '#name' => 'delete', '#value' => t('Delete'));
     $form['cid'] = array('#type' => 'hidden', '#value' => $edit['cid']);
   }
 
@@ -539,7 +541,7 @@ function aggregator_form_category($form, &$form_state, $edit = array('title' =>
  * Validate aggregator_form_feed form submissions.
  */
 function aggregator_form_category_validate($form, &$form_state) {
-  if ($form_state['values']['op'] == t('Save')) {
+  if ($form_state['triggering_element']['#name'] == 'save') {
     // Check for duplicate titles
     if (isset($form_state['values']['cid'])) {
       $category = db_query("SELECT cid FROM {aggregator_category} WHERE title = :title AND cid <> :cid", array(':title' => $form_state['values']['title'], ':cid' => $form_state['values']['cid']))->fetchObject();
@@ -559,7 +561,7 @@ 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')) {
+  if ($form_state['triggering_element']['#name'] == 'delete') {
     $title = $form_state['values']['title'];
     // Unset the title.
     unset($form_state['values']['title']);
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index 37a208f..d875a8f 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -2001,12 +2001,14 @@ function comment_form($form, &$form_state, $comment) {
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array(
     '#type' => 'submit',
+    '#name' => 'save',
     '#value' => t('Save'),
     '#access' => ($comment->cid && user_access('administer comments')) || variable_get('comment_preview_' . $node->type, DRUPAL_OPTIONAL) != DRUPAL_REQUIRED || isset($form_state['comment_preview']),
     '#weight' => 19,
   );
   $form['actions']['preview'] = array(
     '#type' => 'submit',
+    '#name' => 'preview',
     '#value' => t('Preview'),
     '#access' => (variable_get('comment_preview_' . $node->type, DRUPAL_OPTIONAL) != DRUPAL_DISABLED),
     '#weight' => 20,
diff --git a/modules/comment/comment.pages.inc b/modules/comment/comment.pages.inc
index 7e88bff..b2b0489 100644
--- a/modules/comment/comment.pages.inc
+++ b/modules/comment/comment.pages.inc
@@ -29,11 +29,11 @@
 function comment_reply($node, $pid = NULL) {
   // Set the breadcrumb trail.
   drupal_set_breadcrumb(array(l(t('Home'), NULL), l($node->title, 'node/' . $node->nid)));
-  $op = isset($_POST['op']) ? $_POST['op'] : '';
+  $op = isset($_POST['preview']) ? 'preview' : '';
   $build = array();
 
   // The user is previewing a comment prior to submitting it.
-  if ($op == t('Preview')) {
+  if ($op == 'preview') {
     if (user_access('post comments')) {
       $build['comment_form'] = drupal_get_form("comment_node_{$node->type}_form", (object) array('pid' => $pid, 'nid' => $node->nid));
     }
diff --git a/modules/comment/comment.test b/modules/comment/comment.test
index e5cae5e..3640743 100644
--- a/modules/comment/comment.test
+++ b/modules/comment/comment.test
@@ -57,19 +57,19 @@ class CommentHelperCase extends DrupalWebTestCase {
     switch ($preview_mode) {
       case DRUPAL_REQUIRED:
         // Preview required so no save button should be found.
-        $this->assertNoFieldByName('op', t('Save'), t('Save button not found.'));
+        $this->assertNoFieldByName('save', t('Save'), t('Save button not found.'));
         $this->drupalPost(NULL, $edit, t('Preview'));
         // Don't break here so that we can test post-preview field presence and
         // function below.
       case DRUPAL_OPTIONAL:
-        $this->assertFieldByName('op', t('Preview'), t('Preview button found.'));
-        $this->assertFieldByName('op', t('Save'), t('Save button found.'));
+        $this->assertFieldByName('preview', t('Preview'), t('Preview button found.'));
+        $this->assertFieldByName('save', t('Save'), t('Save button found.'));
         $this->drupalPost(NULL, $edit, t('Save'));
         break;
 
       case DRUPAL_DISABLED:
-        $this->assertNoFieldByName('op', t('Preview'), t('Preview button not found.'));
-        $this->assertFieldByName('op', t('Save'), t('Save button found.'));
+        $this->assertNoFieldByName('preview', t('Preview'), t('Preview button not found.'));
+        $this->assertFieldByName('save', t('Save'), t('Save button found.'));
         $this->drupalPost(NULL, $edit, t('Save'));
         break;
     }
diff --git a/modules/dblog/dblog.admin.inc b/modules/dblog/dblog.admin.inc
index b2da7ed..38376bf 100644
--- a/modules/dblog/dblog.admin.inc
+++ b/modules/dblog/dblog.admin.inc
@@ -306,11 +306,13 @@ function dblog_filter_form($form) {
   );
   $form['filters']['actions']['submit'] = array(
     '#type' => 'submit',
+    '#name' => 'filter',
     '#value' => t('Filter'),
   );
   if (!empty($_SESSION['dblog_overview_filter'])) {
     $form['filters']['actions']['reset'] = array(
       '#type' => 'submit',
+      '#name' => 'reset',
       '#value' => t('Reset')
     );
   }
@@ -322,7 +324,7 @@ function dblog_filter_form($form) {
  * Validate result from dblog administration filter form.
  */
 function dblog_filter_form_validate($form, &$form_state) {
-  if ($form_state['values']['op'] == t('Filter') && empty($form_state['values']['type']) && empty($form_state['values']['severity'])) {
+  if ($form_state['triggering_element']['#name'] == 'filter' && empty($form_state['values']['type']) && empty($form_state['values']['severity'])) {
     form_set_error('type', t('You must select something to filter by.'));
   }
 }
@@ -331,17 +333,17 @@ function dblog_filter_form_validate($form, &$form_state) {
  * Process result from dblog administration filter form.
  */
 function dblog_filter_form_submit($form, &$form_state) {
-  $op = $form_state['values']['op'];
+  $op = $form_state['triggering_element']['#name'];
   $filters = dblog_filters();
   switch ($op) {
-    case t('Filter'):
+    case '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'):
+    case 'reset':
       $_SESSION['dblog_overview_filter'] = array();
       break;
   }
diff --git a/modules/image/image.admin.inc b/modules/image/image.admin.inc
index d72fdf4..e760788 100644
--- a/modules/image/image.admin.inc
+++ b/modules/image/image.admin.inc
@@ -157,6 +157,7 @@ function image_style_form($form, &$form_state, $style) {
   );
   $form['actions']['submit'] = array(
     '#type' => 'submit',
+    '#name' => 'update',
     '#value' => t('Update style'),
     '#access' => $editable,
   );
@@ -225,7 +226,7 @@ function image_style_form_submit($form, &$form_state) {
   }
 
   image_style_save($style);
-  if ($form_state['values']['op'] == t('Update style')) {
+  if ($form_state['triggering_element']['#name'] == 'update') {
     drupal_set_message(t('Changes to the style have been saved.'));
   }
   $form_state['redirect'] = 'admin/config/media/image-styles/edit/' . $style['name'];
diff --git a/modules/locale/locale.pages.inc b/modules/locale/locale.pages.inc
index 3e6590e..8473728 100644
--- a/modules/locale/locale.pages.inc
+++ b/modules/locale/locale.pages.inc
@@ -246,11 +246,13 @@ function locale_translation_filter_form() {
   );
   $form['filters']['actions']['submit'] = array(
     '#type' => 'submit',
+    '#name' => 'filter',
     '#value' => t('Filter'),
   );
   if (!empty($_SESSION['locale_translation_filter'])) {
     $form['filters']['actions']['reset'] = array(
       '#type' => 'submit',
+      '#name' => 'reset',
       '#value' => t('Reset')
     );
   }
@@ -262,7 +264,7 @@ function locale_translation_filter_form() {
  * Validate result from locale translation filter form.
  */
 function locale_translation_filter_form_validate($form, &$form_state) {
-  if ($form_state['values']['op'] == t('Filter') && empty($form_state['values']['language'])) {
+  if ($form_state['triggering_element']['#name'] == 'filter' && empty($form_state['values']['language'])) {
     form_set_error('type', t('You must select something to filter by.'));
   }
 }
@@ -271,17 +273,17 @@ function locale_translation_filter_form_validate($form, &$form_state) {
  * Process result from locale translation filter form.
  */
 function locale_translation_filter_form_submit($form, &$form_state) {
-  $op = $form_state['values']['op'];
+  $op = $form_state['triggering_element']['#name'];
   $filters = locale_translation_filters();
   switch ($op) {
-    case t('Filter'):
+    case 'filter':
       foreach ($filters as $name => $filter) {
         if (isset($form_state['values'][$name])) {
           $_SESSION['locale_translation_filter'][$name] = $form_state['values'][$name];
         }
       }
       break;
-    case t('Reset'):
+    case 'reset':
       $_SESSION['locale_translation_filter'] = array();
       break;
   }
diff --git a/modules/node/content_types.inc b/modules/node/content_types.inc
index d58bc31..a826ea3 100644
--- a/modules/node/content_types.inc
+++ b/modules/node/content_types.inc
@@ -224,6 +224,7 @@ function node_type_form($form, &$form_state, $type = NULL) {
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array(
     '#type' => 'submit',
+    '#name' => 'save',
     '#value' => t('Save content type'),
     '#weight' => 40,
   );
@@ -232,6 +233,7 @@ function node_type_form($form, &$form_state, $type = NULL) {
     if (!empty($type->type)) {
       $form['actions']['delete'] = array(
         '#type' => 'submit',
+        '#name' => 'delete',
         '#value' => t('Delete content type'),
         '#weight' => 45,
       );
@@ -284,7 +286,7 @@ function node_type_form_validate($form, &$form_state) {
  * @see node_type_form_validate()
  */
 function node_type_form_submit($form, &$form_state) {
-  $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : '';
+  $op = isset($form_state['triggering_element']['#name']) ? $form_state['triggering_element']['#name'] : '';
 
   $type = node_type_set_defaults();
 
@@ -308,7 +310,7 @@ function node_type_form_submit($form, &$form_state) {
     $type->module = $form['#node_type']->module;
   }
 
-  if ($op == t('Delete content type')) {
+  if ($op == 'delete') {
     $form_state['redirect'] = 'admin/structure/types/manage/' . str_replace('_', '-', $type->old_type) . '/delete';
     return;
   }
diff --git a/modules/node/node.admin.inc b/modules/node/node.admin.inc
index a6abb0b..5eb6c8b 100644
--- a/modules/node/node.admin.inc
+++ b/modules/node/node.admin.inc
@@ -195,11 +195,12 @@ function node_filter_form() {
   );
   $form['filters']['status']['actions']['submit'] = array(
     '#type' => 'submit',
+    '#name' => count($session) ? 'refine' : 'filter',
     '#value' => count($session) ? t('Refine') : t('Filter'),
   );
   if (count($session)) {
-    $form['filters']['status']['actions']['undo'] = array('#type' => 'submit', '#value' => t('Undo'));
-    $form['filters']['status']['actions']['reset'] = array('#type' => 'submit', '#value' => t('Reset'));
+    $form['filters']['status']['actions']['undo'] = array('#type' => 'submit', '#name' => 'undo', '#value' => t('Undo'));
+    $form['filters']['status']['actions']['reset'] = array('#type' => 'submit', '#name' => 'reset', '#value' => t('Reset'));
   }
 
   drupal_add_js('misc/form.js');
@@ -212,9 +213,9 @@ function node_filter_form() {
  */
 function node_filter_form_submit($form, &$form_state) {
   $filters = node_filters();
-  switch ($form_state['values']['op']) {
-    case t('Filter'):
-    case t('Refine'):
+  switch ($form_state['triggering_element']['#name']) {
+    case 'filter':
+    case 'refine':
       // Apply every filter that has a choice selected other than 'any'.
       foreach ($filters as $filter => $options) {
         if (isset($form_state['values'][$filter]) && $form_state['values'][$filter] != '[any]') {
@@ -227,10 +228,10 @@ function node_filter_form_submit($form, &$form_state) {
         }
       }
       break;
-    case t('Undo'):
+    case 'undo':
       array_pop($_SESSION['node_overview_filter']);
       break;
-    case t('Reset'):
+    case 'reset':
       $_SESSION['node_overview_filter'] = array();
       break;
   }
diff --git a/modules/taxonomy/taxonomy.admin.inc b/modules/taxonomy/taxonomy.admin.inc
index a236cfe..59d7ef7 100644
--- a/modules/taxonomy/taxonomy.admin.inc
+++ b/modules/taxonomy/taxonomy.admin.inc
@@ -169,9 +169,9 @@ function taxonomy_form_vocabulary($form, &$form_state, $edit = array()) {
   );
 
   $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'));
+  $form['actions']['submit'] = array('#type' => 'submit', '#name' => 'save', '#value' => t('Save'));
   if (isset($vocabulary->vid)) {
-    $form['actions']['delete'] = array('#type' => 'submit', '#value' => t('Delete'));
+    $form['actions']['delete'] = array('#type' => 'submit', '#name' => 'delete', '#value' => t('Delete'));
     $form['vid'] = array('#type' => 'value', '#value' => $vocabulary->vid);
     $form['module'] = array('#type' => 'value', '#value' => $vocabulary->module);
   }
@@ -209,7 +209,7 @@ function taxonomy_form_vocabulary_validate($form, &$form_state) {
  * @see taxonomy_form_vocabulary_validate()
  */
 function taxonomy_form_vocabulary_submit($form, &$form_state) {
-  if ($form_state['triggering_element']['#value'] == t('Delete')) {
+  if ($form_state['triggering_element']['#name'] == 'delete') {
     // Rebuild the form to confirm vocabulary deletion.
     $form_state['rebuild'] = TRUE;
     $form_state['confirm_delete'] = TRUE;
@@ -406,10 +406,12 @@ function taxonomy_overview_terms($form, &$form_state, $vocabulary) {
     $form['actions'] = array('#type' => 'actions', '#tree' => FALSE);
     $form['actions']['submit'] = array(
       '#type' => 'submit',
+      '#name' => 'save',
       '#value' => t('Save')
     );
     $form['actions']['reset_alphabetical'] = array(
       '#type' => 'submit',
+      '#name' => 'reset',
       '#value' => t('Reset to alphabetical')
     );
     $form_state['redirect'] = array($_GET['q'], (isset($_GET['page']) ? array('query' => array('page' => $_GET['page'])) : array()));
@@ -434,7 +436,7 @@ function taxonomy_overview_terms($form, &$form_state, $vocabulary) {
  * @see taxonomy_overview_terms()
  */
 function taxonomy_overview_terms_submit($form, &$form_state) {
-  if ($form_state['triggering_element']['#value'] == t('Reset to alphabetical')) {
+  if ($form_state['triggering_element']['#name'] == 'reset' || isset($form_state['confirm_reset_alphabetical'])) {
     // Execute the reset action.
     if ($form_state['values']['reset_alphabetical'] === TRUE) {
       return taxonomy_vocabulary_confirm_reset_alphabetical_submit($form, $form_state);
@@ -759,6 +761,7 @@ function taxonomy_form_term($form, &$form_state, $edit = array(), $vocabulary =
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array(
     '#type' => 'submit',
+    '#name' => 'save',
     '#value' => t('Save'),
     '#weight' => 5,
   );
@@ -766,6 +769,7 @@ function taxonomy_form_term($form, &$form_state, $edit = array(), $vocabulary =
   if ($term->tid) {
     $form['actions']['delete'] = array(
       '#type' => 'submit',
+      '#name' => 'delete',
       '#value' => t('Delete'),
       '#access' => user_access("delete terms in $vocabulary->vid") || user_access('administer taxonomy'),
       '#weight' => 10,
@@ -798,7 +802,7 @@ function taxonomy_form_term_validate($form, &$form_state) {
  * @see taxonomy_form_term()
  */
 function taxonomy_form_term_submit($form, &$form_state) {
-  if ($form_state['triggering_element']['#value'] == t('Delete')) {
+  if ($form_state['triggering_element']['#name'] == 'delete' || isset($form_state['confirm_delete'])) {
     // Execute the term deletion.
     if ($form_state['values']['delete'] === TRUE) {
       return taxonomy_term_confirm_delete_submit($form, $form_state);
diff --git a/modules/user/user.admin.inc b/modules/user/user.admin.inc
index 4789e7e..401797b 100644
--- a/modules/user/user.admin.inc
+++ b/modules/user/user.admin.inc
@@ -9,7 +9,6 @@ function user_admin($callback_arg = '') {
   $op = isset($_POST['op']) ? $_POST['op'] : $callback_arg;
 
   switch ($op) {
-    case t('Create new account'):
     case 'create':
       $build['user_register'] = drupal_get_form('user_register_form');
       break;
@@ -85,15 +84,18 @@ function user_filter_form() {
   );
   $form['filters']['status']['actions']['submit'] = array(
     '#type' => 'submit',
+    '#name' => (count($session) ? 'refine' : 'filter'),
     '#value' => (count($session) ? t('Refine') : t('Filter')),
   );
   if (count($session)) {
     $form['filters']['status']['actions']['undo'] = array(
       '#type' => 'submit',
+      '#name' => 'undo',
       '#value' => t('Undo'),
     );
     $form['filters']['status']['actions']['reset'] = array(
       '#type' => 'submit',
+      '#name' => 'reset',
       '#value' => t('Reset'),
     );
   }
@@ -107,11 +109,11 @@ 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']['#name'];
   $filters = user_filters();
   switch ($op) {
-    case t('Filter'):
-    case t('Refine'):
+    case 'filter':
+    case 'refine':
       // Apply every filter that has a choice selected other than 'any'.
       foreach ($filters as $filter => $options) {
         if (isset($form_state['values'][$filter]) && $form_state['values'][$filter] != '[any]') {
@@ -124,13 +126,13 @@ function user_filter_form_submit($form, &$form_state) {
         }
       }
       break;
-    case t('Undo'):
+    case 'undo':
       array_pop($_SESSION['user_overview_filter']);
       break;
-    case t('Reset'):
+    case 'reset':
       $_SESSION['user_overview_filter'] = array();
       break;
-    case t('Update'):
+    case 'update':
       return;
   }
 
@@ -859,6 +861,7 @@ function user_admin_roles($form, $form_state) {
   );
   $form['add'] = array(
     '#type' => 'submit',
+    '#name' => 'add_role',
     '#value' => t('Add role'),
     '#validate' => array('user_admin_role_validate'),
     '#submit' => array('user_admin_role_submit'),
@@ -958,10 +961,12 @@ function user_admin_role($form, $form_state, $role) {
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array(
     '#type' => 'submit',
+    '#name' => 'save_role',
     '#value' => t('Save role'),
   );
   $form['actions']['delete'] = array(
     '#type' => 'submit',
+    '#name' => 'delete_role',
     '#value' => t('Delete role'),
     '#submit' => array('user_admin_role_delete_submit'),
   );
@@ -973,14 +978,14 @@ function user_admin_role($form, $form_state, $role) {
  * Form validation handler for the user_admin_role() form.
  */
 function user_admin_role_validate($form, &$form_state) {
-  if (!empty($form_state['values']['name'])) {
-    if ($form_state['values']['op'] == t('Save role')) {
+  if (!empty($form_state['triggering_element']['#name'])) {
+    if ($form_state['triggering_element']['#name'] == 'save_role') {
       $role = user_role_load_by_name($form_state['values']['name']);
       if ($role && $role->rid != $form_state['values']['rid']) {
         form_set_error('name', t('The role name %name already exists. Choose another role name.', array('%name' => $form_state['values']['name'])));
       }
     }
-    elseif ($form_state['values']['op'] == t('Add role')) {
+    elseif ($form_state['triggering_element']['#name'] == 'add_role') {
       if (user_role_load_by_name($form_state['values']['name'])) {
         form_set_error('name', t('The role name %name already exists. Choose another role name.', array('%name' => $form_state['values']['name'])));
       }
@@ -996,11 +1001,11 @@ function user_admin_role_validate($form, &$form_state) {
  */
 function user_admin_role_submit($form, &$form_state) {
   $role = (object) $form_state['values'];
-  if ($form_state['values']['op'] == t('Save role')) {
+  if ($form_state['triggering_element']['#name'] == 'save_role') {
     user_role_save($role);
     drupal_set_message(t('The role has been renamed.'));
   }
-  elseif ($form_state['values']['op'] == t('Add role')) {
+  elseif ($form_state['triggering_element']['#name'] == 'add_role') {
     user_role_save($role);
     drupal_set_message(t('The role has been added.'));
   }
diff --git a/modules/user/user.module b/modules/user/user.module
index 1355159..eeb2b89 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -3715,6 +3715,7 @@ function user_register_form($form, &$form_state) {
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array(
     '#type' => 'submit',
+    '#name' => 'create',
     '#value' => t('Create new account'),
   );
 
