diff --git a/includes/common.inc b/includes/common.inc
index 4ec37dc..2d176c7 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -6201,6 +6201,16 @@ function element_set_attributes(array &$element, array $map) {
     }
     // Do not overwrite already existing attributes.
     if (isset($element[$property]) && !isset($element['#attributes'][$attribute])) {
+      // If the property is a boolean then we want to do a little bit more logic.
+      // This will return attribute="attribute" when is true and nothing when is false.
+      if (is_bool($element[$property])){
+        if ($element[$property] === FALSE) {
+          continue;
+        }
+        else {
+          $element[$property] = $attribute;
+        }
+      }
       $element['#attributes'][$attribute] = $element[$property];
     }
   }
diff --git a/includes/form.inc b/includes/form.inc
index 8f2ee26..ba39e74 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -2520,7 +2520,7 @@ function form_process_select($element) {
  */
 function theme_select($variables) {
   $element = $variables['element'];
-  element_set_attributes($element, array('id', 'name', 'size'));
+  element_set_attributes($element, array('id', 'name', 'size', 'required'));
   _form_set_class($element, array('form-select'));
 
   return '<select' . drupal_attributes($element['#attributes']) . '>' . form_select_options($element) . '</select>';
@@ -2671,7 +2671,7 @@ function theme_fieldset($variables) {
 function theme_radio($variables) {
   $element = $variables['element'];
   $element['#attributes']['type'] = 'radio';
-  element_set_attributes($element, array('id', 'name', '#return_value' => 'value'));
+  element_set_attributes($element, array('id', 'name', '#return_value' => 'value', 'required'));
 
   if (isset($element['#return_value']) && $element['#value'] !== FALSE && $element['#value'] == $element['#return_value']) {
     $element['#attributes']['checked'] = 'checked';
@@ -3632,7 +3632,7 @@ function theme_hidden($variables) {
 function theme_textfield($variables) {
   $element = $variables['element'];
   $element['#attributes']['type'] = 'text';
-  element_set_attributes($element, array('id', 'name', 'value', 'size', 'maxlength'));
+  element_set_attributes($element, array('id', 'name', 'value', 'size', 'maxlength', 'required'));
   _form_set_class($element, array('form-text'));
 
   $extra = '';
@@ -3690,7 +3690,7 @@ function theme_form($variables) {
  */
 function theme_textarea($variables) {
   $element = $variables['element'];
-  element_set_attributes($element, array('id', 'name', 'cols', 'rows'));
+  element_set_attributes($element, array('id', 'name', 'cols', 'rows', 'required'));
   _form_set_class($element, array('form-textarea'));
 
   $wrapper_attributes = array(
@@ -3723,7 +3723,7 @@ function theme_textarea($variables) {
 function theme_password($variables) {
   $element = $variables['element'];
   $element['#attributes']['type'] = 'password';
-  element_set_attributes($element, array('id', 'name', 'size', 'maxlength'));
+  element_set_attributes($element, array('id', 'name', 'size', 'maxlength', 'required'));
   _form_set_class($element, array('form-text'));
 
   return '<input' . drupal_attributes($element['#attributes']) . ' />';
