diff --git modules/field/field.form.inc modules/field/field.form.inc
index 4b92501..80d5e08 100644
--- modules/field/field.form.inc
+++ modules/field/field.form.inc
@@ -181,14 +181,25 @@ function field_multiple_value_form($field, $instance, $langcode, $items, &$form,
         '#language' => $langcode,
         '#field_parents' => $parents,
         '#columns' => array_keys($field['columns']),
-        // For multiple fields, title and description are handled by the wrapping table.
-        '#title' => $multiple ? '' : $title,
+        '#title' => $title,
         '#description' => $multiple ? '' : $description,
         // Only the first widget should be required.
         '#required' => $delta == 0 && $instance['required'],
         '#delta' => $delta,
         '#weight' => $delta,
       );
+      // For multiple fields, title and description are handled by the wrapping table.
+      if ($multiple) {
+        // Provide an accurate, hidden title for screen-readers and in case of
+        // failed #required validation.
+        if ($max == 0) {
+          $element['#title'] = t('@label', array('@label' => $title));
+        } else {
+          $element['#title'] = t('@label (value @delta)', array('@label' => $title, '@delta' => $delta));
+        }
+        $element['#title_display'] = 'invisible';
+        $element['#description'] = '';
+      }
       if ($element = $function($form, $form_state, $field, $instance, $langcode, $items, $delta, $element)) {
         // Input field for the delta (drag-n-drop reordering).
         if ($multiple) {
