diff --git a/includes/form.inc b/includes/form.inc
index c0e2ec7..e3f4c3d 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -1227,9 +1227,11 @@ function _form_validate(&$elements, &$form_state, $form_id = NULL) {
   if (!isset($elements['#validated']) || !$elements['#validated']) {
     // The following errors are always shown.
     if (isset($elements['#needs_validation'])) {
+      $title = empty($elements['#title']) ? $elements['#parents'][0] : $elements['#title'];
+
       // Verify that the value is not longer than #maxlength.
       if (isset($elements['#maxlength']) && drupal_strlen($elements['#value']) > $elements['#maxlength']) {
-        form_error($elements, $t('!name cannot be longer than %max characters but is currently %length characters long.', array('!name' => empty($elements['#title']) ? $elements['#parents'][0] : $elements['#title'], '%max' => $elements['#maxlength'], '%length' => drupal_strlen($elements['#value']))));
+        form_error($elements, $t('!name cannot be longer than %max characters but is currently %length characters long.', array('!name' => $title, '%max' => $elements['#maxlength'], '%length' => drupal_strlen($elements['#value']))));
       }
 
       if (isset($elements['#options']) && isset($elements['#value'])) {
@@ -1244,7 +1246,7 @@ function _form_validate(&$elements, &$form_state, $form_id = NULL) {
           foreach ($value as $v) {
             if (!isset($options[$v])) {
               form_error($elements, $t('An illegal choice has been detected. Please contact the site administrator.'));
-              watchdog('form', 'Illegal choice %choice in !name element.', array('%choice' => $v, '!name' => empty($elements['#title']) ? $elements['#parents'][0] : $elements['#title']), LOG_ERR);
+              watchdog('form', 'Illegal choice %choice in !name element.', array('%choice' => $v, '!name' => $title), LOG_ERR);
             }
           }
         }
@@ -1266,6 +1268,11 @@ function _form_validate(&$elements, &$form_state, $form_id = NULL) {
           watchdog('form', 'Illegal choice %choice in %name element.', array('%choice' => $elements['#value'], '%name' => empty($elements['#title']) ? $elements['#parents'][0] : $elements['#title']), LOG_ERR);
         }
       }
+
+      // Validate #reserved_values properties.
+      if (isset($elements['#reserved_values']) && in_array($elements['#value'], $elements['#reserved_values'])) {
+        form_error($elements, $t("@name cannot be reserved value %value.", array('@name' => $title, '%value' => $elements['#value'])));
+      }
     }
 
     // While this element is being validated, it may be desired that some calls
diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc
index 9e7d69d..12a2dac 100644
--- a/modules/system/system.admin.inc
+++ b/modules/system/system.admin.inc
@@ -2072,6 +2072,7 @@ function system_add_date_format_type_form($form, &$form_state) {
       'exists' => 'system_get_date_types',
       'source' => array('date_type'),
     ),
+    '#reserved_values' => array('add'),
   );
 
   // Get list of all available date formats.
@@ -2104,28 +2105,12 @@ function system_add_date_format_type_form($form, &$form_state) {
     '#value' => t('Add date type'),
   );
 
-  $form['#validate'][] = 'system_add_date_format_type_form_validate';
   $form['#submit'][] = 'system_add_date_format_type_form_submit';
 
   return $form;
 }
 
 /**
- * Validate system_add_date_format_type form submissions.
- */
-function system_add_date_format_type_form_validate($form, &$form_state) {
-  if (!empty($form_state['values']['machine_name']) && !empty($form_state['values']['date_type'])) {
-    if (!preg_match("/^[a-zA-Z0-9_]+$/", trim($form_state['values']['machine_name']))) {
-      form_set_error('machine_name', t('The date type must contain only alphanumeric characters and underscores.'));
-    }
-    $types = system_get_date_types();
-    if (in_array(trim($form_state['values']['machine_name']), array_keys($types))) {
-      form_set_error('machine_name', t('This date type already exists. Enter a unique type.'));
-    }
-  }
-}
-
-/**
  * Process system_add_date_format_type form submissions.
  */
 function system_add_date_format_type_form_submit($form, &$form_state) {
diff --git a/modules/taxonomy/taxonomy.admin.inc b/modules/taxonomy/taxonomy.admin.inc
index 74a362d..a37120a 100644
--- a/modules/taxonomy/taxonomy.admin.inc
+++ b/modules/taxonomy/taxonomy.admin.inc
@@ -103,7 +103,6 @@ function theme_taxonomy_overview_vocabularies($variables) {
  *
  * @ingroup forms
  * @see taxonomy_form_vocabulary_submit()
- * @see taxonomy_form_vocabulary_validate()
  */
 function taxonomy_form_vocabulary($form, &$form_state, $edit = array()) {
   // During initial form build, add the entity to the form state for use
@@ -151,6 +150,7 @@ function taxonomy_form_vocabulary($form, &$form_state, $edit = array()) {
     '#machine_name' => array(
       'exists' => 'taxonomy_vocabulary_machine_name_load',
     ),
+    '#reserved_values' => array('list', 'add'),
   );
   $form['old_machine_name'] = array(
     '#type' => 'value',
@@ -175,38 +175,14 @@ function taxonomy_form_vocabulary($form, &$form_state, $edit = array()) {
     $form['vid'] = array('#type' => 'value', '#value' => $vocabulary->vid);
     $form['module'] = array('#type' => 'value', '#value' => $vocabulary->module);
   }
-  $form['#validate'][] = 'taxonomy_form_vocabulary_validate';
 
   return $form;
 }
 
 /**
- * Form validation handler for taxonomy_form_vocabulary().
- *
- * Makes sure that the machine name of the vocabulary is not in the
- * disallowed list (names that conflict with menu items, such as 'list'
- * and 'add').
- *
- * @see taxonomy_form_vocabulary()
- * @see taxonomy_form_vocabulary_submit()
- */
-function taxonomy_form_vocabulary_validate($form, &$form_state) {
-  // During the deletion there is no 'machine_name' key
-  if (isset($form_state['values']['machine_name'])) {
-    // Do not allow machine names to conflict with taxonomy path arguments.
-    $machine_name = $form_state['values']['machine_name'];
-    $disallowed = array('add', 'list');
-    if (in_array($machine_name, $disallowed)) {
-      form_set_error('machine_name', t('The machine-readable name cannot be "add" or "list".'));
-    }
-  }
-}
-
-/**
  * Form submission handler for taxonomy_form_vocabulary().
  *
  * @see taxonomy_form_vocabulary()
- * @see taxonomy_form_vocabulary_validate()
  */
 function taxonomy_form_vocabulary_submit($form, &$form_state) {
   if ($form_state['clicked_button']['#value'] == t('Delete')) {
