diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index daab030..3c67f26 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -34,6 +34,7 @@ JohnBarclay. added quail.module and accessible_test.module.  These are playgroun
 JohnBarclay. fixed accessible_help to work with drupal 7.
 #1091634 by JohnBarclay:  accessible_fix.  added option to add h2-h6 to filtered html formats
 #1091602 by mgifford: Override garland breadcrumb template to fix unintelligible separator.
+#1091622 by Liam Morland: Asterisk * used for required or changed marker should be in abbr not span
 
 ----------------------------
 @todo
diff --git a/accessible_fix/accessible_fix.info b/accessible_fix/accessible_fix.info
index 0560962..a6a5ca4 100644
--- a/accessible_fix/accessible_fix.info
+++ b/accessible_fix/accessible_fix.info
@@ -15,3 +15,5 @@ files[] = accessible_fix.install
 files[] = accessible_fix.module
 files[] = module_fixes/block.test
 ;files[] = module_fixes/filter.test
+stylesheets[all][] = accessible_fix_asterisk_abbr-1091622.css
+scripts[] = accessible_fix_asterisk_abbr-1091622.js
diff --git a/accessible_fix/accessible_fix.module b/accessible_fix/accessible_fix.module
index a1dcc55..92ec672 100644
--- a/accessible_fix/accessible_fix.module
+++ b/accessible_fix/accessible_fix.module
@@ -18,6 +18,9 @@
  */
 function accessible_fix_theme_registry_alter(&$theme_registry) {
 
+  $theme_registry['form_required_marker']['function'] = 'accessible_fix_form_required_marker';
+  $theme_registry['field_multiple_value_form']['function'] = 'accessible_fix_field_multiple_value_form';
+
   $overridden_tpls = accessible_api_settings('overridden_tpls');
   if (!is_array($overridden_tpls)) {
     return;
@@ -401,3 +404,100 @@ function accessible_fix_accessible_api_settings_alter(&$new_settings, &$old_sett
     }
   }
 }
+
+/**
+ * Overrides theme_form_required_marker()
+ * Returns HTML for a marker for required form elements.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - element: An associative array containing the properties of the element.
+ *
+ * @ingroup themeable
+ */
+function accessible_fix_form_required_marker($variables) {
+  // This is also used in the installer, pre-database setup.
+  $t = get_t();
+  $attributes = array(
+    'class' => 'form-required',
+    'title' => $t('This field is required.'),
+  );
+  return '<abbr' . drupal_attributes($attributes) . '>*</abbr>';
+}
+
+/**
+ * Overrides theme_field_multiple_value_form()
+ * Returns HTML for an individual form element.
+ *
+ * Combine multiple values into a table with drag-n-drop reordering.
+ * TODO : convert to a template.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - element: A render element representing the form element.
+ *
+ * @ingroup themeable
+ */
+function accessible_fix_field_multiple_value_form($variables) {
+  $element = $variables['element'];
+  $output = '';
+
+  if ($element['#cardinality'] > 1 || $element['#cardinality'] == FIELD_CARDINALITY_UNLIMITED) {
+    $table_id = drupal_html_id($element['#field_name'] . '_values');
+    $order_class = $element['#field_name'] . '-delta-order';
+    $required = !empty($element['#required']) ? theme('form_required_marker', $variables) : '';
+
+    $header = array(
+      array(
+        'data' => '<label>' . t('!title: !required', array('!title' => $element['#title'], '!required' => $required)) . "</label>",
+        'colspan' => 2,
+        'class' => array('field-label'),
+      ),
+      t('Order'),
+    );
+    $rows = array();
+
+    // Sort items according to '_weight' (needed when the form comes back after
+    // preview or failed validation)
+    $items = array();
+    foreach (element_children($element) as $key) {
+      if ($key === 'add_more') {
+        $add_more_button = &$element[$key];
+      }
+      else {
+        $items[] = &$element[$key];
+      }
+    }
+    usort($items, '_field_sort_items_value_helper');
+
+    // Add the items as table rows.
+    foreach ($items as $key => $item) {
+      $item['_weight']['#attributes']['class'] = array($order_class);
+      $delta_element = drupal_render($item['_weight']);
+      $cells = array(
+        array('data' => '', 'class' => array('field-multiple-drag')),
+        drupal_render($item),
+        array('data' => $delta_element, 'class' => array('delta-order')),
+      );
+      $rows[] = array(
+        'data' => $cells,
+        'class' => array('draggable'),
+      );
+    }
+
+    $output = '<div class="form-item">';
+    $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => $table_id, 'class' => array('field-multiple-table'))));
+    $output .= $element['#description'] ? '<div class="description">' . $element['#description'] . '</div>' : '';
+    $output .= '<div class="clearfix">' . drupal_render($add_more_button) . '</div>';
+    $output .= '</div>';
+
+    drupal_add_tabledrag($table_id, 'order', 'sibling', $order_class);
+  }
+  else {
+    foreach (element_children($element) as $key) {
+      $output .= drupal_render($element[$key]);
+    }
+  }
+
+  return $output;
+}
diff --git a/accessible_fix/accessible_fix_asterisk_abbr-1091622.css b/accessible_fix/accessible_fix_asterisk_abbr-1091622.css
index e69de29..4916bf2 100644
--- a/accessible_fix/accessible_fix_asterisk_abbr-1091622.css
+++ b/accessible_fix/accessible_fix_asterisk_abbr-1091622.css
@@ -0,0 +1,7 @@
+abbr.form-required, abbr.tabledrag-changed, abbr.ajax-changed {
+  border-bottom: none;
+}
+
+abbr.form-required {
+  color: #ff0000;
+}
diff --git a/accessible_fix/accessible_fix_asterisk_abbr-1091622.js b/accessible_fix/accessible_fix_asterisk_abbr-1091622.js
index e69de29..01ab223 100644
--- a/accessible_fix/accessible_fix_asterisk_abbr-1091622.js
+++ b/accessible_fix/accessible_fix_asterisk_abbr-1091622.js
@@ -0,0 +1,30 @@
+Drupal.ajax.prototype.commands.changed = function (ajax, response, status) {
+  if (!$(response.selector).hasClass('ajax-changed')) {
+    $(response.selector).addClass('ajax-changed');
+    if (response.asterisk) {
+      $(response.selector).find(response.asterisk).append(' <abbr class="ajax-changed" title="' + Drupal.t('Changed') + '">*</abbr> ');
+    }
+  }
+}
+
+$(document).bind('state:required', function(e) {
+  if (e.trigger) {
+    if (e.value) {
+      $(e.target).closest('.form-item, .form-wrapper').find('label').append('<abbr class="form-required" title="' + Drupal.t('This field is required.') + '">*</abbr>');
+    }
+    else {
+      $(e.target).closest('.form-item, .form-wrapper').find('label .form-required').remove();
+    }
+  }
+});
+
+/**
+ * Add an asterisk or other marker to the changed row.
+ */
+Drupal.tableDrag.prototype.row.prototype.markChanged = function () {
+  var marker = Drupal.theme('tableDragChangedMarker');
+  var cell = $('td:first', this.element);
+  if ($('abbr.tabledrag-changed', cell).length == 0) {
+    cell.append(marker);
+  }
+};
