diff --git includes/form.inc includes/form.inc
index e3a217b..51ee11f 100644
--- includes/form.inc
+++ includes/form.inc
@@ -2581,7 +2581,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'));
@@ -2800,7 +2800,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 a0df090..7bdaeb0 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 abaae06..a70b57e 100644
--- modules/simpletest/tests/form_test.module
+++ modules/simpletest/tests/form_test.module
@@ -922,6 +922,7 @@ function form_test_checkboxes_radios($form, &$form_state, $customize = FALSE) {
       'foo' => 'Foo',
       1 => 'One',
       'bar' => 'Bar',
+      '>' => 'Special Char'
     ),
   );
   if ($customize) {
@@ -945,6 +946,7 @@ function form_test_checkboxes_radios($form, &$form_state, $customize = FALSE) {
       'foo' => 'Foo',
       1 => 'One',
       'bar' => 'Bar',
+      '>' => 'Special Char'
     ),
   );
   if ($customize) {
