diff --git a/includes/common.inc b/includes/common.inc
index 95e03e8..03813b1 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -5622,6 +5622,9 @@ function drupal_render(&$elements) {
   // for speed.
   if ($elements['#children'] == '') {
     foreach ($children as $key) {
+      if (!empty($elements[$key]['#id']) && !empty($elements[$key]['#description'])) {
+        $elements[$key]['#attributes']['aria-describedby'] = $elements[$key]['#id'] . '--description';
+      }
       $elements['#children'] .= drupal_render($elements[$key]);
     }
   }
diff --git a/includes/form.inc b/includes/form.inc
index c0e2ec7..b9083b3 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -3867,8 +3867,9 @@ function theme_form_element($variables) {
       break;
   }
 
-  if (!empty($element['#description'])) {
-    $output .= '<div class="description">' . $element['#description'] . "</div>\n";
+  if (!empty($element['#id']) && !empty($element['#description'])) {
+    $attributes = array('class' => 'description', 'id' => $element['#id'] . '--description');
+    $output .= '<div' . drupal_attributes($attributes) . '>' . $element['#description'] . "</div>\n";
   }
 
   $output .= "</div>\n";
