diff --git a/user/profile/field/menu/field.class.php b/user/profile/field/menu/field.class.php
index ec514f9..0f77c05 100644
--- a/user/profile/field/menu/field.class.php
+++ b/user/profile/field/menu/field.class.php
@@ -55,10 +55,21 @@ class profile_field_menu extends profile_field_base {
      * The data from the form returns the key. This should be converted to the
      * respective option string to be saved in database
      * Overwrites base class accessor method
-     * @param   integer   the key returned from the select input in the form
+     * @param   mixed   the key returned from the select input in the form, or
+     * the profile field value
      */
     function edit_save_data_preprocess($key) {
-        return isset($this->options[$key]) ? addslashes($this->options[$key]) : NULL;
+        /* Prefer to treat $key as an index into the options array.  Otherwise,
+         * treat it as the profile value itself, and make sure that it's a
+         * valid value.
+         */
+        if (isset($this->options[$key])) {
+            return addslashes($this->options[$key]);
+        } else if (in_array(remove_slashes($key), $this->options)) {
+            return $key;
+        } else {
+            return NULL;
+        }
     }
 
     /**
