diff --git a/media_multiselect.module b/media_multiselect.module
index 1ab4d38..6c8dff8 100644
--- a/media_multiselect.module
+++ b/media_multiselect.module
@@ -180,6 +180,7 @@ function media_multiselect_improve_remove_button($element) {
       'wrapper' => $element['#wrapper_id'],
     ),
     '#media_multiselect_field_wrapper' => array_slice($element['#array_parents'], 0, -1),
+    '#limit_validation_errors' => array(),
   );
 
   return $element;
@@ -288,32 +289,53 @@ function media_multiselect_ajax_submit($form, &$form_state) {
   $element = drupal_array_get_nested_value($form, $button['#media_multiselect_field_wrapper']);
   $value = drupal_array_get_nested_value($form_state['values'], $button['#media_multiselect_field_wrapper']);
   
-  // Some convinient short-hand variables
+  // Some convenient short-hand variables
   $field_name = $element['#field_name'];
   $langcode = $element['#language'];
   $parents = $element['#field_parents'];
   $field_state = field_form_get_state($parents, $field_name, $langcode, $form_state);
-  
-  // Remove the 'add more' value, because its not a file.
-  unset($value['add_more']);
 
-  // Filter the existing values so only fid > 0 remains.
-  $value = array_filter($value, '_media_multiselect_filter_empty_value');
-  // Sort according to weight.
-  _field_sort_items($field_state['field'], $value);
+  // Handle the remove button differently from a normal submit.
+  if (stripos($button['#name'], 'remove') !== FALSE) {
+    
+    $remove_index = array_keys($value);
+    $remove_index = $remove_index[0];
+    // Remove the specified item.
+    $values = &$form_state['input'][$field_name][LANGUAGE_NONE];
+    
+    unset($values[$remove_index]);
 
-  // Call the media_multiselect data-handler
-  $value = call_user_func($button['#media_multiselect_value_handler'], $form, $form_state, $value);
+    // Re-key the array.
+    $values = array_values($values);
 
-  // And then re-key the array.
-  $value = array_values($value);
+    // Update the Field State to the new amount of items
+    $field_state['items_count'] = count($values);
 
-  // Update the Field State to the new amount of items
-  $field_state['items_count'] = count($value);
-  field_form_set_state($parents, $field_name, $langcode, $form_state, $field_state);
-  
-  // Update the Form State to make it seem like it received the new files as an input.
-  drupal_array_set_nested_value($form_state['input'], $button['#media_multiselect_field_wrapper'], $value);
+    field_form_set_state($parents, $field_name, $langcode, $form_state, $field_state);
+  }
+  else {
+
+    // Remove the 'add more' value, because its not a file.
+    unset($value['add_more']);
+
+    // Filter the existing values so only fid > 0 remains.
+    $value = array_filter($value, '_media_multiselect_filter_empty_value');
+    // Sort according to weight.
+    _field_sort_items($field_state['field'], $value);
+
+    // Call the media_multiselect data-handler
+    $value = call_user_func($button['#media_multiselect_value_handler'], $form, $form_state, $value);
+
+    // And then re-key the array.
+    $value = array_values($value);
+
+    // Update the Field State to the new amount of items
+    $field_state['items_count'] = count($value);
+
+    field_form_set_state($parents, $field_name, $langcode, $form_state, $field_state);
+    // Update the Form State to make it seem like it received the new files as an input.
+    drupal_array_set_nested_value($form_state['input'], $button['#media_multiselect_field_wrapper'], $value);
+  }
 
   $form_state['rebuild'] = TRUE;
 }
