diff --git a/formatter_field.module b/formatter_field.module
index a844da3..216ea80 100644
--- a/formatter_field.module
+++ b/formatter_field.module
@@ -90,13 +90,16 @@ function formatter_field_field_widget_form(&$form, &$form_state, $field, $instan
 
   // Populate $items from $form_state values if available.  This is necessary
   // for the #ajax functionality.
-  if (!empty($form_state['values'])) {
+  if (!empty($form_state['values'][$field['field_name']])) {
     $path = array($field['field_name'], $langcode);
     $items = drupal_array_get_nested_value($form_state['values'], $path);
+    $items[$delta]['settings'] = field_info_formatter_settings($items[$delta]['type']);
   }
 
-  if (!empty($items[$delta]['settings']) && is_string($items[$delta]['settings'])) {
-    $items[$delta]['settings'] = unserialize($items[$delta]['settings']);
+  // This is required when the form is rebuilt from other AJAX-driven fields, a specific case being multivalue fields with "add another" buttons
+  elseif (!empty($form_state['input'][$field['field_name']])) {
+    $path = array($field['field_name'], $langcode);
+    $items = drupal_array_get_nested_value($form_state['input'], $path);
   }
 
   $element['#element_validate'] = array('formatter_field_field_widget_form_validate');
