diff --git includes/form.inc includes/form.inc
index 9018931..ef3c9ce 100644
--- includes/form.inc
+++ includes/form.inc
@@ -2671,7 +2671,7 @@ function theme_radio($variables) {
   $element['#attributes']['type'] = 'radio';
   element_set_attributes($element, array('id', 'name', '#return_value' => 'value'));
 
-  if (isset($element['#return_value']) && check_plain($element['#value']) == $element['#return_value']) {
+  if (isset($element['#return_value']) && $element['#value'] !== FALSE && $element['#value'] == $element['#return_value']) {
     $element['#attributes']['checked'] = 'checked';
   }
   _form_set_class($element, array('form-radio'));
@@ -2890,7 +2890,7 @@ function form_process_radios($element) {
       $element[$key] += array(
         '#type' => 'radio',
         '#title' => $choice,
-        '#return_value' => check_plain($key),
+        '#return_value' => $key,
         '#default_value' => isset($element['#default_value']) ? $element['#default_value'] : NULL,
         '#attributes' => $element['#attributes'],
         '#parents' => $element['#parents'],
diff --git modules/simpletest/tests/form.test modules/simpletest/tests/form.test
index b2b8223..a73ac16 100644
--- modules/simpletest/tests/form.test
+++ modules/simpletest/tests/form.test
@@ -396,7 +396,7 @@ class FormElementTestCase extends DrupalWebTestCase {
     // Verify that all options appear in their defined order.
     foreach (array('checkbox', 'radio') as $type) {
       $elements = $this->xpath('//input[@type=:type]', array(':type' => $type));
-      $expected_values = array('0', 'foo', '1', 'bar');
+      $expected_values = array('0', 'foo', '1', 'bar', '>');
       foreach ($elements as $element) {
         $expected = array_shift($expected_values);
         $this->assertIdentical((string) $element['value'], $expected);
@@ -410,7 +410,7 @@ class FormElementTestCase extends DrupalWebTestCase {
     // #weight into account.
     foreach (array('checkbox', 'radio') as $type) {
       $elements = $this->xpath('//input[@type=:type]', array(':type' => $type));
-      $expected_values = array('0', 'foo', 'bar', '1');
+      $expected_values = array('0', 'foo', 'bar', '>', '1');
       foreach ($elements as $element) {
         $expected = array_shift($expected_values);
         $this->assertIdentical((string) $element['value'], $expected);
diff --git modules/simpletest/tests/form_test.module modules/simpletest/tests/form_test.module
index fadd2aa..f908c21 100644
--- modules/simpletest/tests/form_test.module
+++ modules/simpletest/tests/form_test.module
@@ -355,7 +355,7 @@ function form_test_limit_validation_errors_form($form, &$form_state) {
     '#type' => 'textfield',
     '#element_validate' => array('form_test_limit_validation_errors_element_validate_test'),
   );
-  
+
   $form['test_substring'] = array(
     '#tree' => TRUE,
   );
@@ -369,7 +369,7 @@ function form_test_limit_validation_errors_form($form, &$form_state) {
     '#type' => 'textfield',
     '#element_validate' => array('form_test_limit_validation_errors_element_validate_test'),
   );
-  
+
   $form['actions']['partial'] = array(
     '#type' => 'submit',
     '#limit_validation_errors' => array(array('test')),
@@ -997,6 +997,7 @@ function form_test_checkboxes_radios($form, &$form_state, $customize = FALSE) {
       'foo' => 'Foo',
       1 => 'One',
       'bar' => 'Bar',
+      '>' => 'Special Char',
     ),
   );
   if ($customize) {
@@ -1020,6 +1021,7 @@ function form_test_checkboxes_radios($form, &$form_state, $customize = FALSE) {
       'foo' => 'Foo',
       1 => 'One',
       'bar' => 'Bar',
+      '>' => 'Special Char',
     ),
   );
   if ($customize) {
