diff --git a/sites/all/modules/options_element/options_element.inc b/sites/all/modules/options_element/options_element.inc
index 0a3da22..8572ce0 100644
--- a/sites/all/modules/options_element/options_element.inc
+++ b/sites/all/modules/options_element/options_element.inc
@@ -341,6 +341,17 @@ function _form_options_from_text($text, $key_type, $flat = FALSE, &$duplicates =
         'group' => $group,
       );
     }
+    elseif($key_type == 'associative') {
+      preg_match('/^([^|]+)\|(.*)$/', $row, $matches);
+      $key = ($matches[1]) ? $matches[1] : $row;
+      $value = ($matches[2]) ? $matches[2] : $row;
+      $keys[] = $key;
+      $items[] = array(
+        'key' => $key,
+        'value' => $value,
+        'group' => $group,
+      );
+    }
     // Set this this row as a straight value.
     else {
       $items[] = array(
diff --git a/sites/all/modules/options_element/options_element.js b/sites/all/modules/options_element/options_element.js
index bcd7726..066402e 100644
--- a/sites/all/modules/options_element/options_element.js
+++ b/sites/all/modules/options_element/options_element.js
@@ -274,7 +274,7 @@ Drupal.optionsElement.prototype.updateOptionElements = function() {
     var optionKey = $(this).find('input.option-key').val();
 
     // Update the elements key if matching the key and value.
-    if (self.keyType == 'associative') {
+    if (self.keyType == 'associative' && !optionKey) {
       $(this).find('input.option-key').val(optionValue);
     }
