--- uc_cart/uc_cart.module	2010-10-04 07:14:28.225324866 +0000
+++ uc_cart/uc_cart.module.buttons	2010-10-04 07:23:45.576269999 +0000
@@ -946,6 +946,13 @@ function uc_cart_view_form($form_state, 
       $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-'. $i .'-' . $display_item['nid']['#value'],
+        '#submit' => array('uc_cart_view_form_submit'),
+      );
+
       $form['items'][$i]['title']['#type'] = 'value';
       $form['items'][$i]['description']['#type'] = 'value';
 
@@ -1016,17 +1023,18 @@ function uc_cart_view_form_submit($form,
   }
 
   // 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;
@@ -1097,7 +1105,7 @@ function uc_cart_view_table($table) {
   $table['#columns'] = array(
     'remove' => array(
       'cell' => t('Remove'),
-      'weight' => 0,
+      'weight' => variable_get('uc_cart_remove_weight', 0),
     ),
     'image' => array(
       'cell' => t('Products'),
@@ -1594,15 +1602,19 @@ function uc_cart_remove_item($nid, $cid 
 /**
  * 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)) {
+    $count = 0;
     foreach ($cart->items as $item) {
-      if ($item['remove']) {
+      if ($clicked_button['#name'] == 'cart-delete-item-'. $count . '-'. $item['nid']) {
         module_invoke($item['module'], 'update_cart_item', $item['nid'], unserialize($item['data']), 0);
+        drupal_set_message(t('!title removed from your cart.', array('!title' => $item['title'])));
       }
       else {
         module_invoke($item['module'], 'update_cart_item', $item['nid'], unserialize($item['data']), $item['qty']);
       }
+
+      $count++;
     }
 
     // Rebuild the cached cart items.
