diff --git a/components/grid.inc b/components/grid.inc
index a5e2048..922c01c 100644
--- a/components/grid.inc
+++ b/components/grid.inc
@@ -197,7 +197,7 @@ function webform_expand_grid($element) {
   $value = isset($element['#default_value']) ? $element['#default_value'] : array();
   foreach (element_children($element) as $key) {
     if (isset($value[$key])) {
-      $element[$key]['#default_value'] = $value[$key];
+      $element[$key]['#default_value'] = ($value[$key] !== '') ? $value[$key] : FALSE;
     }
     else {
       $element[$key]['#default_value'] = FALSE;
diff --git a/webform.module b/webform.module
index b27e8dd..97097ea 100644
--- a/webform.module
+++ b/webform.module
@@ -2020,8 +2020,9 @@ function _webform_client_form_validate($elements, &$form_state, $first_run = TRU
       // Make sure a value is passed when the field is required.
       // A simple call to empty() will not cut it here as some fields, like
       // checkboxes, can return a valid value of '0'. Instead, check the
-      // length if it's a string, and the item count if it's an array.
-      if ($elements['#required'] && (!count($elements['#value']) || (is_string($elements['#value']) && strlen(trim($elements['#value'])) == 0))) {
+      // length if it's a string, and the item count if it's an array. For
+      // radios, FALSE means that no value was submitted, so check that too.
+      if ($elements['#required'] && (!count($elements['#value']) || (is_string($elements['#value']) && strlen(trim($elements['#value'])) == 0) || $elements['#value'] === FALSE)) {
         form_error($elements, t('!name field is required.', array('!name' => $elements['#title'])));
       }
 
