--- uc_coupon.module.orig	2009-11-20 11:44:02.000000000 -0500
+++ uc_coupon.module	2009-12-11 16:04:33.000000000 -0500
@@ -1013,7 +1013,8 @@ function uc_coupon_validate($code) {
   $result->code = $code;
   $result->cid = $coupon->cid;
   $result->title = t('Coupon: @code', array('@code' => $code));
-
+  $result->type = $coupon->type;
+	$result->value = $coupon->value;
   if ($coupon->type == 'percentage') {
     $result->amount = $applicable_total * $coupon->value / 100;
   }
@@ -1056,20 +1057,30 @@ function uc_cart_pane_coupon($form_state
   return $form;
 }
 
-function uc_cart_pane_coupon_submit($form, &$form_state) {
-  if ($form_state['values']['code']) {
-    $code = strtoupper(check_plain($form_state['values']['code']));
-    $coupon = uc_coupon_validate($code);
-    if (!$coupon->valid) {
-      unset($_SESSION['uc_coupon']);
-      drupal_set_message($coupon->message, 'error');
-    }
-    else {
-      $_SESSION['uc_coupon'] = $code;
-      drupal_set_message(t('A coupon discount of !amount will be deducted from your order total at checkout.', array('!amount' => uc_currency_format($coupon->amount))));
-    }
-  }
-}
+/**
++ * Submit handler for uc_cart_pane_coupon.
++ */
+ function uc_cart_pane_coupon_submit($form, &$form_state) {
+   if ($form_state['values']['code']) {
+     $code = strtoupper(check_plain($form_state['values']['code']));
+     $coupon = uc_coupon_validate($code);
+     if (!$coupon->valid) {
+       unset($_SESSION['uc_coupon']);
+      $_SESSION['uc_coupon'] = 0;
+       drupal_set_message($coupon->message, 'error');
+     }
+     else {
+       $_SESSION['uc_coupon'] = $code;
+       drupal_set_message(t('The coupon has been applied to your order.'));
+      $_SESSION['uc_coupon_valid'] = $coupon->amount;
+      $_SESSION['uc_coupon_value'] = $coupon->value;
+      $_SESSION['uc_coupon_type'] = $coupon->type;
+      $coupon->message = t('The coupon has been applied to your order.');
+      drupal_set_message($coupon->message);
+     }
+   }
+ }
+
 
 /**
  * Implementation of hook_order().
@@ -1391,3 +1402,40 @@ function uc_coupon_token_values($type, $
 
   return $values;
 }
+
+
+
+
+/**
+ * Implementation of hook_form_alter().
+ */
+function uc_coupon_form_alter(&$form, $form_state, $form_id) {
+  if ($form_id == 'uc_cart_view_form') {
+    if (!variable_get('uc_checkout_enabled', TRUE)) {
+     // dpm($form);
+    }
+  }
+}
+
+
+/**
+ * Implementation of hook_uc_cart_alter().
+ * When cart-based discounts are used, alter the cart prices.
+ */
+function uc_coupon_uc_cart_alter(&$items) {
+  if (isset($_SESSION['uc_coupon_valid']) && $_SESSION['uc_coupon_valid']) {
+    if (count($items)) {
+      foreach ($items as $key => $item) {
+        if (!isset($item->altered)) {
+          if ($_SESSION['uc_coupon_type'] == 'percentage') {
+            $items[$key]->price = $items[$key]->price * ((100 - $_SESSION['uc_coupon_value']) / 100);
+          }
+          if ($_SESSION['uc_coupon_type'] == 'price') {
+            $items[$key]->price = $item->price - ($_SESSION['uc_coupon_value'] / count($items));
+          }
+          $items[$key]->altered = TRUE;
+        }
+      }
+    }
+  }
+}
