--- uc_cart/uc_cart.module.orig	2010-08-11 11:09:54.000000000 -0400
+++ uc_cart/uc_cart.module	2010-10-05 17:30:27.000000000 -0400
@@ -946,6 +946,16 @@
       $description = $display_item['title']['#value'] . $display_item['description']['#value'];
       $form['items'][$i]['desc']['#value'] = $description;
 
+      $form['items'][$i]['remove'] = array(
+        '#type' => 'submit',
+        '#value' => t('Remove'),
+        '#name' => 'cart-delete-item-'. $item->cart_item_id,
+      );
+      $form['items'][$i]['item_id'] = array(
+        '#value' => $item->cart_item_id,
+        '#type' => 'hidden',
+      );
+
       $form['items'][$i]['title']['#type'] = 'value';
       $form['items'][$i]['description']['#type'] = 'value';
 
@@ -980,7 +990,6 @@
       $form['continue_shopping'] = array(
         '#type' => 'submit',
         '#value' => $cs_text,
-        '#submit' => array('uc_cart_view_form_submit'),
       );
       $form['continue_shopping_text'] = array(
         '#type' => 'hidden',
@@ -993,13 +1002,11 @@
   $form['update'] = array(
     '#type' => 'submit',
     '#value' => t('Update cart'),
-    '#submit' => array('uc_cart_view_form_submit'),
   );
   if (variable_get('uc_checkout_enabled', TRUE)) {
     $form['checkout'] = array(
       '#type' => 'submit',
       '#value' => t('Checkout'),
-      '#submit' => array('uc_cart_view_form_submit'),
     );
   }
 
@@ -1016,17 +1023,18 @@
   }
 
   // Update the items in the shopping cart based on the form values.
-  uc_cart_update_item_object((object)$form_state['values']);
+  uc_cart_update_item_object((object)$form_state['values'], (array)$form_state['clicked_button']);
 
   // Specify the appropriate redirect based on the button used to submit.
-  switch ($form_state['values']['op']) {
+  switch ($form_state['clicked_button']['#value']) {
     // Continue shopping button.
     case $form_state['values']['continue_shopping_text']:
       $form_state['redirect'] = uc_cart_continue_shopping_url();
       break;
 
-    // Update cart button.
+    // Update cart or Remove button.
     case t('Update cart'):
+    case t('Remove'):
       // No redirect.  Just display a message and preserve the last URL.
       drupal_set_message(t('Your cart has been updated.'));
       break;
@@ -1594,15 +1602,14 @@
 /**
  * Update the quantity of all the items in a cart object
  */
-function uc_cart_update_item_object($cart) {
+function uc_cart_update_item_object($cart, $clicked_button) {
   if (is_object($cart)) {
     foreach ($cart->items as $item) {
-      if ($item['remove']) {
-        module_invoke($item['module'], 'update_cart_item', $item['nid'], unserialize($item['data']), 0);
-      }
-      else {
-        module_invoke($item['module'], 'update_cart_item', $item['nid'], unserialize($item['data']), $item['qty']);
+      if ($clicked_button['#name'] == 'cart-delete-item-'. $item['item_id']) {
+        $item['qty'] = 0;
+        drupal_set_message(t('!title removed from your cart.', array('!title' => $item['title'])));
       }
+      module_invoke($item['module'], 'update_cart_item', $item['nid'], unserialize($item['data']), $item['qty']);
     }
 
     // Rebuild the cached cart items.
