diff --git includes/common.inc includes/common.inc
index b340f02..5d5d9f7 100644
--- includes/common.inc
+++ includes/common.inc
@@ -3896,20 +3896,18 @@ function drupal_process_attached($elements, $weight = JS_DEFAULT, $dependency_ch
  *   - irrelevant
  *   - expanded
  *   - readwrite
- *
  *   Each of these states is an array containing conditions that must be met in
  *   order for this state to be active. The key to this conditioning array is
  *   a jQuery selector for the element that is checked. The value of the
  *   conditioning array are the states that are checked on the element (empty,
  *   checked, value, collapsed, etc) and the expected value of that condition.
- *
  *   @code
  *   $form['email_canceled']['settings'] = array(
  *     '#type' => 'container',
  *     '#states' => array(
  *       // Hide the settings when the cancel notify checkbox is disabled.
  *       'invisible' => array(
- *         'input[name="email_canceled_toggle"]' => array('checked' => FALSE),
+ *         ':input[name="email_canceled_toggle"]' => array('checked' => FALSE),
  *       ),
  *     ),
  *   );
diff --git misc/states.js misc/states.js
index cf2d1ae..48d47e6 100644
--- misc/states.js
+++ misc/states.js
@@ -247,11 +247,22 @@ states.Trigger.states = {
     }
   },
 
+  // For radio buttons, only return the value if the radio button is selected.
   value: {
     'keyup': function () {
+      // Radio buttons share the same :input[name="key"] selector.
+      if (this.length > 1) {
+        // Initial checked value of radios is undefined, so we return false.
+        return this.filter(':checked').val() || false;
+      }
       return this.val();
     },
     'change': function () {
+      // Radio buttons share the same :input[name="key"] selector.
+      if (this.length > 1) {
+        // Initial checked value of radios is undefined, so we return false.
+        return this.filter(':checked').val() || false;
+      }
       return this.val();
     }
   },
diff --git modules/simpletest/tests/form_test.module modules/simpletest/tests/form_test.module
index 9f8094c..283bfc8 100644
--- modules/simpletest/tests/form_test.module
+++ modules/simpletest/tests/form_test.module
@@ -15,14 +15,12 @@ function form_test_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('form_test_validate_form'),
     'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
   );
   $items['form-test/limit-validation-errors'] = array(
     'title' => 'Form validation with some error suppression',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('form_test_limit_validation_errors_form'),
     'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
   );
 
   $items['form_test/tableselect/multiple-true'] = array(
@@ -30,28 +28,24 @@ function form_test_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('_form_test_tableselect_multiple_true_form'),
     'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
   );
   $items['form_test/tableselect/multiple-false'] = array(
     'title' => 'Tableselect radio button test',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('_form_test_tableselect_multiple_false_form'),
     'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
   );
   $items['form_test/tableselect/empty-text'] = array(
     'title' => 'Tableselect empty text test',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('_form_test_tableselect_empty_form'),
     'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
   );
   $items['form_test/tableselect/advanced-select'] = array(
     'title' => 'Tableselect js_select tests',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('_form_test_tableselect_js_select_form'),
     'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
   );
 
   $items['form_test/form-storage'] = array(
@@ -59,7 +53,6 @@ function form_test_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('form_test_storage_form'),
     'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
   );
 
   $items['form_test/wrapper-callback'] = array(
@@ -67,7 +60,6 @@ function form_test_menu() {
     'page callback' => 'form_test_wrapper_callback',
     'page arguments' => array('form_test_wrapper_callback_form'),
     'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
   );
 
   $items['form_test/form-state-values-clean'] = array(
@@ -75,23 +67,20 @@ function form_test_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('form_test_form_state_values_clean_form'),
     'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
   );
 
   $items['form-test/checkbox'] = array(
-    'title' => t('Form test'),
+    'title' => t('Form test: Checkbox'),
     'page callback' => 'drupal_get_form',
     'page arguments' => array('_form_test_checkbox'),
     'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
   );
 
   $items['form-test/disabled-elements'] = array(
-    'title' => t('Form test'),
+    'title' => t('Form test: Disabled Elements'),
     'page callback' => 'drupal_get_form',
     'page arguments' => array('_form_test_disabled_elements'),
     'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
   );
 
   $items['form-test/form-rebuild-preserve-values'] = array(
@@ -99,7 +88,6 @@ function form_test_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('form_test_form_rebuild_preserve_values_form'),
     'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
   );
 
   $items['form_test/form-labels'] = array(
@@ -107,7 +95,6 @@ function form_test_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('form_label_test_form'),
     'access arguments' => array('access content'),
-    'type' => MENU_CALLBACK,
   );
 
   $items['form-test/state-persist'] = array(
@@ -115,7 +102,6 @@ function form_test_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('form_test_state_persist'),
     'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
   );
 
   $items['form-test/clicked-button'] = array(
@@ -123,7 +109,12 @@ function form_test_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('form_test_clicked_button'),
     'access callback' => TRUE,
-    'type' => MENU_CALLBACK,
+  );
+  $items['form-test/radios-demonstration'] = array(
+    'title' => '#states Radio button demonstration',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('form_test_states_radios'),
+    'access callback' => TRUE,
   );
 
   if (module_exists('node')) {
@@ -134,7 +125,6 @@ function form_test_menu() {
       'access arguments' => array('create', 'page'),
       'file path' => drupal_get_path('module', 'node'),
       'file' => 'node.pages.inc',
-      'type' => MENU_CALLBACK,
     );
   }
 
@@ -1082,3 +1072,38 @@ function form_test_two_instances() {
   $return['node_form_2'] = drupal_get_form('page_node_form', $node2);
   return $return;
 }
+
+
+/**
+ * Demonstrate radios working with #states.
+ *
+ * Although we do not have testing for javascript, we can certainly include
+ * demonstration code in the module. To demonstrate, access the menu entry
+ * and click the first or second radio button. Either input_1 or input_2 will
+ * show depending on which you click.
+ */
+function form_test_states_radios($form, &$form_state) {
+
+  $form['sample_radios'] = array(
+    '#type' => 'radios',
+    '#title' => t('A selection'),
+    '#options' => array('one' => 'one', 'two' => 'two'),
+  );
+  $form['input_1'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Only shows when "one" is selected in radios'),
+    '#states' => array(
+      'visible' => array(
+        ':input[name="sample_radios"]' => array('value' => 'one'),      ),
+    ),
+  );
+  $form['input_2'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Only shows when "two" is selected in radios'),
+    '#states' => array(
+      'visible' => array(
+        ':input[name="sample_radios"]' => array('value' => 'two'),      ),
+    ),
+  );
+  return $form;
+}
