Index: django/newforms/fields.py
===================================================================
--- django/newforms/fields.py	(revision 961)
+++ django/newforms/fields.py	(working copy)
@@ -536,7 +536,9 @@
         # will submit for False. Because bool("True") == True, we don't need to
         # handle that explicitly.
         if value == 'False':
-            return False
+            value = False
+        if self.required and not value:
+            raise ValidationError(self.error_messages['required'])
         return bool(value)
 
 class NullBooleanField(BooleanField):
Index: tests/regressiontests/forms/fields.py
===================================================================
--- tests/regressiontests/forms/fields.py	(revision 960)
+++ tests/regressiontests/forms/fields.py	(working copy)
@@ -910,18 +910,24 @@
 >>> f.clean(True)
 True
 >>> f.clean(False)
-False
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
 >>> f.clean(1)
 True
 >>> f.clean(0)
-False
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
 >>> f.clean('Django rocks')
 True
 
 >>> f.clean('True')
 True
 >>> f.clean('False')
-False
+Traceback (most recent call last):
+...
+ValidationError: [u'This field is required.']
 
 >>> f = BooleanField(required=False)
 >>> f.clean('')
