diff --git a/includes/form.inc b/includes/form.inc
index e0bc9cb..690656b 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -3976,7 +3976,7 @@ function theme_form_element_label($variables) {
   $t = get_t();
 
   // If title and required marker are both empty, output no label.
-  if (empty($element['#title']) && empty($element['#required'])) {
+  if ((!isset($element['#title']) || $element['#title'] === '') && empty($element['#required'])) {
     return '';
   }
 
diff --git a/modules/simpletest/tests/form.test b/modules/simpletest/tests/form.test
index fe2c1bb..13fdca2 100644
--- a/modules/simpletest/tests/form.test
+++ b/modules/simpletest/tests/form.test
@@ -588,9 +588,17 @@ class FormsElementsLabelsTestCase extends DrupalWebTestCase {
     $elements = $this->xpath('//input[@id="edit-form-checkboxes-test-third-checkbox"]/following-sibling::label[@for="edit-form-checkboxes-test-third-checkbox" and @class="option"]');
     $this->assertTrue(isset($elements[0]), t("Label follows field and label option class correct for regular checkboxes."));
 
+    // Make sure the label is rendered for checkboxes.
+    $elements = $this->xpath('//input[@id="edit-form-checkboxes-test-0"]/following-sibling::label[@for="edit-form-checkboxes-test-0" and @class="option"]');
+    $this->assertTrue(isset($elements[0]), t("Label 0 found checkbox."));
+
     $elements = $this->xpath('//input[@id="edit-form-radios-test-second-radio"]/following-sibling::label[@for="edit-form-radios-test-second-radio" and @class="option"]');
     $this->assertTrue(isset($elements[0]), t("Label follows field and label option class correct for regular radios."));
 
+    // Make sure the label is rendered for radios.
+    $elements = $this->xpath('//input[@id="edit-form-radios-test-0"]/following-sibling::label[@for="edit-form-radios-test-0" and @class="option"]');
+    $this->assertTrue(isset($elements[0]), t("Label 0 found radios."));
+
     // Exercise various defaults for checkboxes and modifications to ensure
     // appropriate override and correct behaviour.
     $elements = $this->xpath('//input[@id="edit-form-checkbox-test"]/following-sibling::label[@for="edit-form-checkbox-test" and @class="option"]');
diff --git a/modules/simpletest/tests/form_test.module b/modules/simpletest/tests/form_test.module
index 23aca24..0a748d2 100644
--- a/modules/simpletest/tests/form_test.module
+++ b/modules/simpletest/tests/form_test.module
@@ -688,6 +688,7 @@ function form_label_test_form() {
       'first-checkbox' => t('First checkbox'),
       'second-checkbox' => t('Second checkbox'),
       'third-checkbox' => t('Third checkbox'),
+      '0' => t('0'),
     ),
   );
   $form['form_radios_test'] = array(
@@ -697,6 +698,7 @@ function form_label_test_form() {
       'first-radio' => t('First radio'),
       'second-radio' => t('Second radio'),
       'third-radio' => t('Third radio'),
+      '0' => t('0'),
     ),
     // Test #field_prefix and #field_suffix placement.
     '#field_prefix' => '<span id="form-test-radios-field-prefix">' . t('Radios #field_prefix element') . '</span>',
