Index: includes/form.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/form.inc,v
retrieving revision 1.498
diff -u -p -r1.498 form.inc
--- includes/form.inc	1 Oct 2010 22:28:55 -0000	1.498
+++ includes/form.inc	2 Oct 2010 02:37:07 -0000
@@ -1166,21 +1166,14 @@ function _form_validate(&$elements, &$fo
         // does not change the form, it will be the value of the first option.
         // Because of this, form validation for the field will almost always
         // pass, even if the user did not select anything. To work around this
-        // browser behavior, select fields without a #default_value get an
-        // additional, first empty option by default. In case the submitted
-        // value is identical to the empty option's value, we reset the
-        // element's value to NULL to trigger the regular #required handling
-        // below.
+        // browser behavior, required select fields without a #default_value get
+        // an additional, first empty option. In case the submitted value is
+        // identical to the empty option's value, we reset the element's value
+        // to NULL to trigger the regular #required handling below.
         // @see form_process_select()
-        elseif ($elements['#type'] == 'select' && !$elements['#multiple'] && !isset($elements['#default_value']) && $elements['#value'] === (string) $elements['#empty_value']) {
-          if ($elements['#required']) {
-            $elements['#value'] = NULL;
-            form_set_value($elements, NULL, $form_state);
-          }
-          else {
-            $elements['#value'] = $elements['#empty_value'];
-            form_set_value($elements, $elements['#empty_value'], $form_state);
-          }
+        elseif ($elements['#type'] == 'select' && !$elements['#multiple'] && $elements['#required'] && !isset($elements['#default_value']) && $elements['#value'] === $elements['#empty_value']) {
+          $elements['#value'] = NULL;
+          form_set_value($elements, NULL, $form_state);
         }
         elseif (!isset($options[$elements['#value']])) {
           form_error($elements, $t('An illegal choice has been detected. Please contact the site administrator.'));
@@ -2172,6 +2165,15 @@ function form_type_select_value($element
         return (isset($element['#default_value']) && is_array($element['#default_value'])) ? $element['#default_value'] : array();
       }
     }
+    // Non-multiple select elements may have an empty option preprended to them
+    // (see form_process_select()). When this occurs, usually #empty_value is
+    // an empty string, but some forms set #empty_value to integer 0 or some
+    // other non-string constant. PHP receives all submitted form input as
+    // strings, but if the empty option is selected, set the value to match the
+    // empty value exactly.
+    elseif (isset($element['#empty_value']) && $input === (string) $element['#empty_value']) {
+      return $element['#empty_value'];
+    }
     else {
       return $input;
     }
@@ -2307,14 +2309,23 @@ function _form_options_flatten($array) {
  *     Whether this first option is a valid option depends on whether the field
  *     is #required or not.
  *   - #required: (optional) Whether the user needs to select an option (TRUE)
- *     or not (FALSE). Defaults to TRUE.
+ *     or not (FALSE). Defaults to FALSE.
  *   - #empty_option: (optional) The label to show for the first default option.
  *     By default, the label is automatically set to "- Please select -" for a
  *     required field and "- None -" for an optional field.
  *   - #empty_value: (optional) The value for the first default option, which is
- *     used to determine whether the user submitted a value or not. Defaults to
- *     '' (an empty string). To be used in case the field is optional and the
- *     empty default value should have a special value (e.g., a constant).
+ *     used to determine whether the user submitted a value or not.
+ *     - If #required is TRUE, this defaults to '' (an empty string).
+ *     - If #required is not TRUE and this value isn't set, then no extra option
+ *       is added to the select control, leaving the control in a slightly
+ *       illogical state, because there's no way for the user to select nothing,
+ *       since all user agents automatically preselect the first available
+ *       option. But people are used to this being the behavior of select
+ *       controls.
+ *       @todo Address the above issue in Drupal 8.
+ *     - If #required is not TRUE and this value is set (most commonly to an
+ *       empty string), then an extra option (see #empty_option above)
+ *       representing a "non-selection" is added with this as its value.
  *
  * @see _form_validate()
  */
@@ -2323,56 +2334,31 @@ function form_process_select($element) {
   if ($element['#multiple']) {
     $element['#attributes']['multiple'] = 'multiple';
     $element['#attributes']['name'] = $element['#name'] . '[]';
-    // If not explicitly set, #required has to default to FALSE (see below).
-    if (!isset($element['#required'])) {
-      $element['#required'] = FALSE;
-    }
   }
   // A non-#multiple select needs special handling to prevent user agents from
   // preselecting the first option without intention. #multiple select lists do
   // not get an empty option, as it would not make sense, user interface-wise.
   else {
     $add_empty_option = FALSE;
-    // Select elements always have a value in HTML, so the expectation is that
-    // the user has to choose an option. Therefore, a select element is set to
-    // #required TRUE, unless it has been explicitly set to FALSE. This differs
-    // from every other element which gets a default of #required FALSE via
-    // form_builder(). To avoid this default, system_element_info() sets
-    // #required to NULL.
-    // If #required has been explicitly set to FALSE, the user may optionally
-    // choose an option, which can be "None".
-    if (isset($element['#required']) && !$element['#required']) {
-      $element['#required'] = FALSE;
+    // If the element is not required and there's a value for #empty_value, then
+    // add an option that represents emptiness.
+    if (!$element['#required'] && isset($element['#empty_value'])) {
       $element += array(
-        '#empty_value' => '',
         '#empty_option' => t('- None -'),
       );
       $add_empty_option = TRUE;
     }
-    // Otherwise, if #required is TRUE (or not set) and there is no
-    // #default_value, then the user has to choose an option, which makes this
-    // element #required.
-    elseif (!isset($element['#default_value'])) {
-      // By only conditionally setting #required to TRUE, we additionally ensure
-      // that the select element does not get a required marker if it already
-      // has a value.
-      $element['#required'] = TRUE;
+    // If the element is required and there is no #default_value, then add an
+    // empty option that will fail validation, so that the user is required to
+    // make a choice.
+    elseif ($element['#required'] && !isset($element['#default_value'])) {
       $element += array(
         '#empty_value' => '',
         '#empty_option' => t('- Select -'),
       );
       $add_empty_option = TRUE;
     }
-    // If there is a #default_value and #required is not explicitly FALSE, then
-    // there is no point in adding an empty option which is never valid, and we
-    // just retain API compatibility.
-    if (!isset($element['#required'])) {
-      $element['#required'] = FALSE;
-    }
-    // If one of the above conditions is met, add a first empty default option,
-    // which is always invalid for #required select lists that do not specify a
-    // #default_value.
-    // @see _form_validate()
+    // Add the empty option if needed.
     if ($add_empty_option) {
       // The empty option is prepended to #options and purposively not merged
       // to prevent another option in #options mistakenly using the same value
Index: includes/install.core.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/install.core.inc,v
retrieving revision 1.36
diff -u -p -r1.36 install.core.inc
--- includes/install.core.inc	1 Oct 2010 18:37:22 -0000	1.36
+++ includes/install.core.inc	2 Oct 2010 02:37:07 -0000
@@ -1759,7 +1759,6 @@ function _install_configure_form($form, 
   $form['server_settings']['site_default_country'] = array(
     '#type' => 'select',
     '#title' => t('Default country'),
-    '#required' => FALSE,
     '#default_value' => variable_get('site_default_country', NULL),
     '#options' => $countries,
     '#description' => st('Select the default country for the site.'),
Index: modules/aggregator/aggregator.processor.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/aggregator/aggregator.processor.inc,v
retrieving revision 1.13
diff -u -p -r1.13 aggregator.processor.inc
--- modules/aggregator/aggregator.processor.inc	24 Sep 2010 21:36:22 -0000	1.13
+++ modules/aggregator/aggregator.processor.inc	2 Oct 2010 02:37:09 -0000
@@ -91,7 +91,6 @@ function aggregator_form_aggregator_admi
     $form['modules']['aggregator']['aggregator_summary_items'] = array(
       '#type' => 'select',
       '#title' => t('Number of items shown in listing pages'),
-      '#required' => FALSE,
       '#default_value' => variable_get('aggregator_summary_items', 3),
       '#empty_value' => 0,
       '#options' => $items,
Index: modules/block/block.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/block/block.admin.inc,v
retrieving revision 1.88
diff -u -p -r1.88 block.admin.inc
--- modules/block/block.admin.inc	24 Sep 2010 21:36:22 -0000	1.88
+++ modules/block/block.admin.inc	2 Oct 2010 02:37:09 -0000
@@ -129,7 +129,6 @@ function block_admin_display_form($form,
     );
     $form['blocks'][$key]['region'] = array(
       '#type' => 'select',
-      '#required' => FALSE,
       '#default_value' => $block['region'] != BLOCK_REGION_NONE ? $block['region'] : NULL,
       '#empty_value' => BLOCK_REGION_NONE,
       '#title_display' => 'invisible',
@@ -302,7 +301,6 @@ function block_admin_configure($form, &$
       $form['regions'][$key] = array(
         '#type' => 'select',
         '#title' => $theme->info['name'],
-        '#required' => FALSE,
         '#default_value' => !empty($region) && $region != -1 ? $region : NULL,
         '#empty_value' => BLOCK_REGION_NONE,
         '#options' => system_region_list($key, REGIONS_VISIBLE),
Index: modules/field_ui/field_ui.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.admin.inc,v
retrieving revision 1.70
diff -u -p -r1.70 field_ui.admin.inc
--- modules/field_ui/field_ui.admin.inc	29 Sep 2010 02:01:34 -0000	1.70
+++ modules/field_ui/field_ui.admin.inc	2 Oct 2010 02:37:10 -0000
@@ -335,7 +335,6 @@ function field_ui_field_overview_form($f
       'parent_wrapper' => array(
         'parent' => array(
           '#type' => 'select',
-          '#required' => FALSE,
           '#options' => $table['#parent_options'],
           '#attributes' => array('class' => array('field-parent')),
           '#parents' => array('fields', $name, 'parent'),
@@ -402,7 +401,6 @@ function field_ui_field_overview_form($f
       'parent_wrapper' => array(
         'parent' => array(
           '#type' => 'select',
-          '#required' => FALSE,
           '#options' => $table['#parent_options'],
           '#attributes' => array('class' => array('field-parent')),
           '#parents' => array('fields', $name, 'parent'),
@@ -458,7 +456,6 @@ function field_ui_field_overview_form($f
       'parent_wrapper' => array(
         'parent' => array(
           '#type' => 'select',
-          '#required' => FALSE,
           '#options' => $table['#parent_options'],
           '#attributes' => array('class' => array('field-parent')),
           '#prefix' => '<div class="add-new-placeholder">&nbsp;</div>',
@@ -482,8 +479,8 @@ function field_ui_field_overview_form($f
       ),
       'type' => array(
         '#type' => 'select',
-        '#required' => FALSE,
         '#options' => $field_type_options,
+        '#empty_value' => '',
         '#empty_option' => t('- Select a field type -'),
         '#description' => t('Type of data to store.'),
         '#attributes' => array('class' => array('field-type-select')),
@@ -491,8 +488,8 @@ function field_ui_field_overview_form($f
       ),
       'widget_type' => array(
         '#type' => 'select',
-        '#required' => FALSE,
         '#options' => $widget_type_options,
+        '#empty_value' => '',
         '#empty_option' => t('- Select a widget -'),
         '#description' => t('Form element to edit the data.'),
         '#attributes' => array('class' => array('widget-type-select')),
@@ -530,7 +527,6 @@ function field_ui_field_overview_form($f
       'parent_wrapper' => array(
         'parent' => array(
           '#type' => 'select',
-          '#required' => FALSE,
           '#options' => $table['#parent_options'],
           '#attributes' => array('class' => array('field-parent')),
           '#prefix' => '<div class="add-new-placeholder">&nbsp;</div>',
@@ -544,8 +540,8 @@ function field_ui_field_overview_form($f
       ),
       'field_name' => array(
         '#type' => 'select',
-        '#required' => FALSE,
         '#options' => $existing_field_options,
+        '#empty_value' => '',
         '#empty_option' => t('- Select an existing field -'),
         '#description' => t('Field to share'),
         '#attributes' => array('class' => array('field-select')),
@@ -554,8 +550,8 @@ function field_ui_field_overview_form($f
       ),
       'widget_type' => array(
         '#type' => 'select',
-        '#required' => FALSE,
         '#options' => $widget_type_options,
+        '#empty_value' => '',
         '#empty_option' => t('- Select a widget -'),
         '#description' => t('Form element to edit the data.'),
         '#attributes' => array('class' => array('widget-type-select')),
@@ -897,7 +893,6 @@ function field_ui_display_overview_form(
       'parent_wrapper' => array(
         'parent' => array(
           '#type' => 'select',
-          '#required' => FALSE,
           '#options' => $table['#parent_options'],
           '#attributes' => array('class' => array('field-parent')),
           '#parents' => array('fields', $name, 'parent'),
@@ -1051,7 +1046,6 @@ function field_ui_display_overview_form(
       'parent_wrapper' => array(
         'parent' => array(
           '#type' => 'select',
-          '#required' => FALSE,
           '#options' => $table['#parent_options'],
           '#attributes' => array('class' => array('field-parent')),
           '#parents' => array('fields', $name, 'parent'),
@@ -1713,7 +1707,6 @@ function field_ui_field_edit_form($form,
     '#default_value' => !empty($instance['description']) ? $instance['description'] : '',
     '#rows' => 5,
     '#description' => t('Instructions to present to the user below this field on the editing form.<br />Allowed HTML tags: @tags', array('@tags' => _field_filter_xss_display_allowed_tags())),
-    '#required' => FALSE,
     '#weight' => 0,
   );
 
Index: modules/filter/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v
retrieving revision 1.350
diff -u -p -r1.350 filter.module
--- modules/filter/filter.module	29 Sep 2010 20:12:51 -0000	1.350
+++ modules/filter/filter.module	2 Oct 2010 02:37:11 -0000
@@ -827,6 +827,7 @@ function filter_process_format($element)
   $element['format']['format'] = array(
     '#type' => 'select',
     '#title' => t('Text format'),
+    '#required' => TRUE,
     '#options' => $options,
     '#default_value' => $element['#format'],
     '#access' => count($formats) > 1,
Index: modules/image/image.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/image/image.admin.inc,v
retrieving revision 1.24
diff -u -p -r1.24 image.admin.inc
--- modules/image/image.admin.inc	27 Sep 2010 00:53:56 -0000	1.24
+++ modules/image/image.admin.inc	2 Oct 2010 02:37:11 -0000
@@ -127,8 +127,8 @@ function image_style_form($form, &$form_
   );
   $form['effects']['new']['new'] = array(
     '#type' => 'select',
-    '#required' => FALSE,
     '#options' => $new_effect_options,
+    '#empty_value' => '',
     '#empty_option' => t('Select a new effect'),
   );
   $form['effects']['new']['weight'] = array(
@@ -295,8 +295,8 @@ function image_style_delete_form($form, 
   $form['replacement'] = array(
     '#title' => t('Replacement style'),
     '#type' => 'select',
-    '#required' => FALSE,
     '#options' => $replacement_styles,
+    '#empty_value' => '',
     '#empty_option' => t('No replacement, just delete'),
   );
 
Index: modules/image/image.field.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/image/image.field.inc,v
retrieving revision 1.29
diff -u -p -r1.29 image.field.inc
--- modules/image/image.field.inc	24 Sep 2010 21:36:22 -0000	1.29
+++ modules/image/image.field.inc	2 Oct 2010 02:37:11 -0000
@@ -269,7 +269,6 @@ function image_field_widget_settings_for
   $form['preview_image_style'] = array(
     '#title' => t('Preview image style'),
     '#type' => 'select',
-    '#required' => FALSE,
     '#options' => image_style_options(FALSE),
     '#default_value' => $settings['preview_image_style'],
     '#description' => t('The preview image will be shown while editing the content.'),
@@ -423,8 +422,8 @@ function image_field_formatter_settings_
   $form['image_style'] = array(
     '#title' => t('Image style'),
     '#type' => 'select',
-    '#required' => FALSE,
     '#default_value' => $settings['image_style'],
+    '#empty_value' => '',
     '#empty_option' => t('None (original image)'),
     '#options' => $image_styles,
   );
@@ -436,7 +435,6 @@ function image_field_formatter_settings_
   $form['image_link'] = array(
     '#title' => t('Link image to'),
     '#type' => 'select',
-    '#required' => FALSE,
     '#default_value' => $settings['image_link'],
     '#options' => $link_types,
   );
Index: modules/locale/locale.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.admin.inc,v
retrieving revision 1.18
diff -u -p -r1.18 locale.admin.inc
--- modules/locale/locale.admin.inc	24 Sep 2010 21:36:22 -0000	1.18
+++ modules/locale/locale.admin.inc	2 Oct 2010 02:37:11 -0000
@@ -854,7 +854,6 @@ function locale_translation_filter_form(
       $form['filters']['status'][$key] = array(
         '#title' => $filter['title'],
         '#type' => 'select',
-        '#required' => FALSE,
         '#empty_value' => 'all',
         '#empty_option' => $filter['options']['all'],
         '#size' => 0,
Index: modules/menu/menu.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu/menu.admin.inc,v
retrieving revision 1.86
diff -u -p -r1.86 menu.admin.inc
--- modules/menu/menu.admin.inc	29 Sep 2010 01:57:30 -0000	1.86
+++ modules/menu/menu.admin.inc	2 Oct 2010 02:37:11 -0000
@@ -683,8 +683,8 @@ function menu_configure() {
   $form['menu_main_links_source'] = array(
     '#type' => 'select',
     '#title' => t('Source for the Main links'),
-    '#required' => FALSE,
     '#default_value' => variable_get('menu_main_links_source', 'main-menu'),
+    '#empty_value' => '',
     '#empty_option' => t('No Main links'),
     '#options' => $menu_options,
     '#tree' => FALSE,
@@ -694,8 +694,8 @@ function menu_configure() {
   $form['menu_secondary_links_source'] = array(
     '#type' => 'select',
     '#title' => t('Source for the Secondary links'),
-    '#required' => FALSE,
     '#default_value' => variable_get('menu_secondary_links_source', 'user-menu'),
+    '#empty_value' => '',
     '#empty_option' => t('No Secondary links'),
     '#options' => $menu_options,
     '#tree' => FALSE,
Index: modules/simpletest/tests/form.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/form.test,v
retrieving revision 1.71
diff -u -p -r1.71 form.test
--- modules/simpletest/tests/form.test	1 Oct 2010 22:28:55 -0000	1.71
+++ modules/simpletest/tests/form.test	2 Oct 2010 02:37:14 -0000
@@ -164,6 +164,8 @@ class FormsTestCase extends DrupalWebTes
     // Posting without any values should throw validation errors.
     $this->drupalPost(NULL, array(), 'Submit');
     $this->assertNoText(t($error, array('!name' => $form['select']['#title'])));
+    $this->assertNoText(t($error, array('!name' => $form['select_required']['#title'])));
+    $this->assertNoText(t($error, array('!name' => $form['select_optional']['#title'])));
     $this->assertNoText(t($error, array('!name' => $form['empty_value']['#title'])));
     $this->assertNoText(t($error, array('!name' => $form['empty_value_one']['#title'])));
     $this->assertText(t($error, array('!name' => $form['no_default']['#title'])));
@@ -194,9 +196,10 @@ class FormsTestCase extends DrupalWebTes
       'empty_value' => 'one',
       'empty_value_one' => 'one',
       'no_default' => 'three',
-      'no_default_optional' => '',
+      'no_default_optional' => 'one',
+      'no_default_optional_empty_value' => '',
       'no_default_empty_option' => 'three',
-      'no_default_empty_option_optional' => '',
+      'no_default_empty_option_optional' => 'one',
       'no_default_empty_value' => 'three',
       'no_default_empty_value_one' => 'three',
       'no_default_empty_value_optional' => 0,
Index: modules/simpletest/tests/form_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/form_test.module,v
retrieving revision 1.50
diff -u -p -r1.50 form_test.module
--- modules/simpletest/tests/form_test.module	27 Sep 2010 00:53:56 -0000	1.50
+++ modules/simpletest/tests/form_test.module	2 Oct 2010 02:37:14 -0000
@@ -789,44 +789,65 @@ function form_test_select($form, &$form_
     '#title' => '#default_value one',
     '#default_value' => 'one',
   );
+  $form['select_required'] = $base + array(
+    '#title' => '#default_value one, #required',
+    '#required' => TRUE,
+    '#default_value' => 'one',
+  );
+  $form['select_optional'] = $base + array(
+    '#title' => '#default_value one, not #required',
+    '#required' => FALSE,
+    '#default_value' => 'one',
+  );
   $form['empty_value'] = $base + array(
-    '#title' => '#default_value one, #empty_value 0',
+    '#title' => '#default_value one, #required, #empty_value 0',
+    '#required' => TRUE,
     '#default_value' => 'one',
     '#empty_value' => 0,
   );
   $form['empty_value_one'] = $base + array(
-    '#title' => '#default_value = #empty_value',
+    '#title' => '#default_value = #empty_value, #required',
+    '#required' => TRUE,
     '#default_value' => 'one',
     '#empty_value' => 'one',
   );
 
   $form['no_default'] = $base + array(
-    '#title' => 'No #default_value',
+    '#title' => 'No #default_value, #required',
+    '#required' => TRUE,
   );
   $form['no_default_optional'] = $base + array(
     '#title' => 'No #default_value, not #required',
     '#required' => FALSE,
-    '#description' => 'Should result in an empty string (default of #empty_value), because it is optional.',
+    '#description' => 'Should result in "one", because it is not required and there is no #empty_value requested, so default browser behavior of preselecting first option is in effect.',
+  );
+  $form['no_default_optional_empty_value'] = $base + array(
+    '#title' => 'No #default_value, not #required, #empty_value empty string',
+    '#empty_value' => '',
+    '#required' => FALSE,
+    '#description' => 'Should result in an empty string (due to #empty_value), because it is optional.',
   );
 
   $form['no_default_empty_option'] = $base + array(
-    '#title' => 'No #default_value, #empty_option',
+    '#title' => 'No #default_value, #required, #empty_option',
+    '#required' => TRUE,
     '#empty_option' => '- Choose -',
   );
   $form['no_default_empty_option_optional'] = $base + array(
     '#title' => 'No #default_value, not #required, #empty_option',
-    '#required' => FALSE,
     '#empty_option' => '- Dismiss -',
-    '#description' => 'Should result in an empty string (default of #empty_value), because it is optional.',
+    '#description' => 'Should result in "one", because it is not required (as per default of #required), and there is no #empty_value requested, so #empty_option is ignored, and default browser behavior of preselecting first option is in effect.',
   );
 
   $form['no_default_empty_value'] = $base + array(
-    '#title' => 'No #default_value, #empty_value 0',
+    '#title' => 'No #default_value, #required, #empty_value 0',
+    '#required' => TRUE,
     '#empty_value' => 0,
     '#description' => 'Should never result in 0.',
   );
   $form['no_default_empty_value_one'] = $base + array(
-    '#title' => 'No #default_value, #empty_value one',
+    '#title' => 'No #default_value, #required, #empty_value one',
+    '#required' => TRUE,
     '#empty_value' => 'one',
     '#description' => 'A mistakenly assigned #empty_value contained in #options should not be valid.',
   );
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.969
diff -u -p -r1.969 system.module
--- modules/system/system.module	1 Oct 2010 18:37:23 -0000	1.969
+++ modules/system/system.module	2 Oct 2010 02:37:16 -0000
@@ -399,11 +399,6 @@ function system_element_info() {
   );
   $types['select'] = array(
     '#input' => TRUE,
-    // In order to be able to determine whether a select list needs an empty
-    // default option, #required has to be NULL by default, as form_builder()
-    // preemptively sets #required to FALSE for all elements.
-    // @see form_process_select()
-    '#required' => NULL,
     '#multiple' => FALSE,
     '#process' => array('form_process_select', 'ajax_process_form'),
     '#theme' => 'select',
