diff --git a/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc b/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc
index 22a7297..22186e5 100644
--- a/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc
+++ b/modules/media_wysiwyg/includes/media_wysiwyg.filter.inc
@@ -251,6 +251,26 @@ function media_wysiwyg_filter_field_parser($tag_info) {
         $parsed_field = explode('[', str_replace(']', '', $field_name));
         $ref = &$fields;
 
+        // Certain types of fields, because of differences in markup, end up
+        // here with incomplete arrays. Make a best effort to support as many
+        // types of fields as possible.
+        // Single-value select lists show up here with only 2 array items.
+        if (count($parsed_field) == 2) {
+          $info = field_info_field($parsed_field[0]);
+          if ($info && !empty($info['columns'])) {
+            // Assume single-value.
+            $parsed_field[] = 0;
+            // Next tack on the column for this field.
+            $parsed_field[] = key($info['columns']);
+          }
+        }
+        // Multi-value select lists show up here with 3 array items.
+        elseif (count($parsed_field) == 3 && is_numeric($parsed_field[2])) {
+          $info = field_info_field($parsed_field[0]);
+          // They just need the value column.
+          $parsed_field[3] = key($info['columns']);
+        }
+
         // Each key of the field needs to be the child of the previous key.
         foreach ($parsed_field as $key) {
           if (!isset($ref[$key])) {
diff --git a/modules/media_wysiwyg/js/media_wysiwyg.format_form.js b/modules/media_wysiwyg/js/media_wysiwyg.format_form.js
index 4345a34..fac239b 100644
--- a/modules/media_wysiwyg/js/media_wysiwyg.format_form.js
+++ b/modules/media_wysiwyg/js/media_wysiwyg.format_form.js
@@ -33,8 +33,22 @@ Drupal.behaviors.mediaFormatForm = {
 Drupal.media.formatForm.getOptions = function () {
   // Get all the values
   var ret = {};
+  // Keep track of multi-value fields.
+  var fieldDelta = {};
 
   $.each($('#media-wysiwyg-format-form .fieldset-wrapper *').serializeArray(), function (i, field) {
+
+    // Support multi-value select lists, which show up here with [] at the end.
+    if ('[]' == field.name.slice(-2)) {
+      if (typeof fieldDelta[field.name] === 'undefined') {
+        fieldDelta[field.name] = 0;
+      }
+      else {
+        fieldDelta[field.name] += 1;
+      }
+      field.name = field.name.replace('[]', '[' + fieldDelta[field.name] + ']');
+    }
+
     ret[field.name] = field.value;
 
     // When a field uses a WYSIWYG format, the value needs to be extracted.
