diff --git a/components/boolean.inc b/components/boolean.inc
index 7c39f45..0e6aee1 100644
--- a/components/boolean.inc
+++ b/components/boolean.inc
@@ -11,7 +11,7 @@
 function _webform_defaults_boolean() {
   return array(
     'name' => '',
-    'mandatory' => FALSE,
+    'required' => FALSE,
     'value' => '',
     'extra' => array(
       'title_display' => 0,
@@ -35,12 +35,13 @@ function _webform_render_boolean($component, $value = NULL) {
     '#title_display' => $component['extra']['title_display'] ? $component['extra']['title_display'] : 'before',
     '#default_value' => _webform_filter_xss($component['value']),
     '#description' => _webform_filter_descriptions($component['extra']['description']),
-    '#required' => $component['mandatory'],
+    '#required' => !empty($component['required']),
     '#weight' => $component['weight'],
     '#field_prefix' => empty($component['extra']['field_prefix']) ? NULL : _webform_filter_xss($component['extra']['field_prefix']),
     '#field_suffix' => empty($component['extra']['field_suffix']) ? NULL : _webform_filter_xss($component['extra']['field_suffix']),
     '#theme_wrappers' => array('checkbox', 'webform_element'),
     '#translatable' => array('title', 'description'),
+    '#element_validate' => array('_webform_validate_boolean'),
   );
   if (isset($value)) {
     $element['#default_value'] = $value[0];
@@ -49,6 +50,18 @@ function _webform_render_boolean($component, $value = NULL) {
 }
 
 /**
+ * Element validate for a boolean field.
+ */
+function _webform_validate_boolean($element, &$form_state) {
+  $values = $form_state['values'];
+  $value = drupal_array_get_nested_value($values, $element['#parents']);
+
+  if (!empty($element['#required']) && empty($value)) {
+    form_error($element, t('!name field is required.', array('!name' => $element['#title'])));
+  }
+}
+
+/**
  * Implements _webform_edit_component().
  */
 function _webform_edit_boolean($component) {
