diff --git a/webform_hints.module b/webform_hints.module
index f302fed..0b01b54 100644
--- a/webform_hints.module
+++ b/webform_hints.module
@@ -104,7 +104,9 @@ function webform_hints_form_alter(&$form, $form_state, $form_id) {
       $form['#attributes']['class'][] = 'webform-hints';
       // Perform element adjustments.
       $required_label = variable_get('webform_hints_required', ' (required)');
-      array_walk($form['submitted'], 'webform_hints_add_title', $required_label);
+      foreach (element_children($form['submitted']) as $key) {
+        webform_hints_add_title($form['submitted'][$key], $required_label);
+      }
     }
   }
 }
@@ -114,19 +116,22 @@ function webform_hints_form_alter(&$form, $form_state, $form_id) {
  *
  * @param array $element
  *   The Webform element.
- * @param int $key
- *   The Webform element's key.
  * @param string $required_label
  *   The string appended to the end of a required element's hint.
  */
-function webform_hints_add_title(&$element, $key, $required_label) {
-  // Skip the boolean #tree.
-  if (is_array($element)) {
+function webform_hints_add_title(&$element, $required_label) {
+  // Perform a recursive call on fieldset form items.
+  if (isset($element['#type']) && $element['#type'] == 'fieldset') {
+    foreach (element_children($element) as $key) {
+      webform_hints_add_title($element[$key], $required_label);
+    }
+  }
+  else {
     // Element isn't required.
-    if (!$element['#required']) {
+    if (isset($element['#required']) || !$element['#required']) {
       $required_label = '';
     }
-
+    // Define the field types to act on.
     $fieldtypes = array('textfield', 'textarea', 'webform_email', 'email');
     if (in_array($element['#type'], $fieldtypes)) {
       // Add attributes and classes to the element.
