diff --git a/actions/modify.action.inc b/actions/modify.action.inc
index 71b6181..96b4684 100644
--- a/actions/modify.action.inc
+++ b/actions/modify.action.inc
@@ -22,6 +22,17 @@ function views_bulk_operations_modify_action_info() {
 }
 
 /**
+ * Helper functions for views_bulk_operations_modify_action
+**/
+function my_serialize(&$arr,$pos){
+  $arr = serialize($arr);
+}
+
+function my_unserialize(&$arr,$pos){
+  $arr = unserialize($arr);
+}
+
+/**
  * Action function.
  *
  * Goes through new values and uses them to modify the passed entity by either
@@ -49,11 +60,11 @@ function views_bulk_operations_modify_action($entity, $context) {
         }
       }
 
-      if (in_array($key, $context['append']['bundle_' . $bundle_name]) && !empty($entity->$key)) {
+      $field_info = field_info_field($key);
+      if (in_array($key, $context['operations']['append']['bundle_' . $bundle_name]) && !empty($entity->$key) && $field_info['cardinality'] != "1") {
         $entity->{$key}[$language] = array_merge($entity->{$key}[$language], $pseudo_entity->{$key}[$language]);
 
         // Check if we breached cardinality, and notify the user.
-        $field_info = field_info_field($key);
         $field_count = count($entity->{$key}[$language]);
         if ($field_info['cardinality'] != FIELD_CARDINALITY_UNLIMITED && $field_count > $field_info['cardinality']) {
           $entity_label = entity_label($context['entity_type'], $entity);
@@ -68,8 +79,33 @@ function views_bulk_operations_modify_action($entity, $context) {
         if (strpos($field_info['type'], 'reference') !== FALSE) {
           $entity->{$key}[$language] = array_unique($entity->{$key}[LANGUAGE_NONE], SORT_REGULAR);
         }
-      }
-      else {
+      } elseif (in_array($key, $context['operations']['delete']['bundle_' . $bundle_name]) && !empty($entity->$key) && $field_info['cardinality'] != 1) {
+        // Deal with taxonomy terms.
+        // Check if we have a taxonomy term reference field because if so, we're going to have to
+        // modify the array of the terms to be deleted.
+        if ($field_info['type'] == 'taxonomy_term_reference') {
+          $existing_terms = $entity->{$key}[LANGUAGE_NONE];
+          $terms_to_delete = $pseudo_entity->{$key}[LANGUAGE_NONE];
+          foreach ($terms_to_delete as $term) {
+            $terms[] = array_slice($term, 0, 1);
+          }
+          $terms_to_delete = $terms;
+
+          // serialize the two arrays so they can be diffed
+          array_walk($existing_terms,'my_serialize');
+          array_walk($terms_to_delete,'my_serialize');
+
+          //Whatever terms are left after the diff is what should stay
+          $diff = array_diff($existing_terms,$terms_to_delete);
+
+          //Unserialize the result
+          array_walk($diff,'my_unserialize');
+          array_walk($terms_to_delete,'my_unserialize');
+          $entity->{$key}[LANGUAGE_NONE] = $diff;
+        } else {
+          //Set deletion for other entity types?
+        }
+      } elseif (isset($context['operations']['overwrite']['bundle_' . $bundle_name]) || empty($entity->$key) || $field_info['cardinality'] == 1) {
         $entity->{$key}[$language] = $pseudo_entity->{$key}[$language];
       }
     }
@@ -252,14 +288,20 @@ function views_bulk_operations_modify_action_form($context, &$form_state) {
 
         $field_info = field_info_field($field_name);
         if ($field_info['cardinality'] != 1) {
-          $form[$form_key]['_append::' . $field_name] = array(
-            '#type' => 'checkbox',
-            '#title' => t('Add new value(s) to %label, instead of overwriting the existing values.', array('%label' => $field['label'])),
+        $form[$form_key]['_operations::' . $field_name] = array(
+          '#type' => 'radios',
+          '#title' => t('Choose what to do with selected terms'),
             '#states' => array(
               'visible' => array(
                 '#edit-bundle-' . str_replace('_', '-', $bundle_name) . '-show-value-' . str_replace('_', '-', $field_name) => array('checked' => TRUE),
               ),
             ),
+          '#default_value' => 'append',
+          '#options' => array(
+            'append' => t('Add new value(s) to %label, instead of overwriting the existing values.', array('%label' => $field['label'])),
+            'delete' => t('Delete value(s) from %label. Other existing values will remain.', array('%label' => $field['label'])),
+            'overwrite' => t('Overwrite value(s) from %label with new values.', array('%label' => $field['label']))
+          ),
             '#weight' => $weight++,
           );
         }
@@ -331,7 +373,6 @@ function views_bulk_operations_modify_action_validate($form, &$form_state) {
   foreach ($search as $group) {
     // Store names of selected and appended entity values in a nicer format.
     $form_state['selected'][$group] = array();
-    $form_state['append'][$group] = array();
 
     // This group has no values, move on.
     if (!isset($form_state['values'][$group])) {
@@ -343,9 +384,17 @@ function views_bulk_operations_modify_action_validate($form, &$form_state) {
         $has_selected = TRUE;
         $form_state['selected'][$group][] = $key;
       }
-      if (!empty($form_state['values'][$group]['_append::' . $key])) {
-        $form_state['append'][$group][] = $key;
-        unset($form_state['values'][$group]['_append::' . $key]);
+      if ((!empty($form_state['values'][$group]['_operations::' . $key])) && ($form_state['values'][$group]['_operations::' . $key]=='append')) {
+        $form_state['operations']['append'][$group][] = $key;
+        unset($form_state['values'][$group]['_operations::' . $key]);
+      }
+      if (!empty($form_state['values'][$group]['_operations::' . $key]) && $form_state['values'][$group]['_operations::' . $key] == 'delete') {
+        $form_state['operations']['delete'][$group][] = $key;
+        unset($form_state['values'][$group]['_operations::' . $key]);
+      }
+      if (!empty($form_state['values'][$group]['_operations::' . $key]) && $form_state['values'][$group]['_operations::' . $key] == 'overwrite') {
+        $form_state['operations']['overwrite'][$group][] = $key;
+        unset($form_state['values'][$group]['_operations::' . $key]);
       }
     }
     unset($form_state['values'][$group]['show_value']);
@@ -399,7 +448,7 @@ function views_bulk_operations_modify_action_submit($form, $form_state) {
   }
 
   return array(
-    'append' => $form_state['append'],
+    'operations' => isset($form_state['operations']) ? $form_state['operations'] : array(),
     'selected' => $form_state['selected'],
     'entities' => $form_state['entities'],
     'properties' => isset($form_state['values']['properties']) ? $form_state['values']['properties'] : array(),
