diff --git a/uc_coupon.module b/uc_coupon.module
index 352f129..502e271 100644
--- a/uc_coupon.module
+++ b/uc_coupon.module
@@ -859,6 +859,32 @@ function uc_coupon_order($op, &$arg1, $arg2) {
 }
 
 /**
+ * Implementation of hook_uc_price_handler().
+ */
+function uc_coupon_uc_price_handler() {
+  return array(
+    'alter' => array(
+      'title' => t('uc_coupon price alterer'),
+      'description' => t('Prevents coupons in the cart from counting towards the order subtotal.'),
+      'callback' => 'uc_coupon_price_handler_alter',
+    ),
+  );
+}
+
+/**
+ * Ensure that dummy cart item coupons don't count towards an order's total.
+ */
+function uc_coupon_price_handler_alter(&$price, &$context, &$options) {
+  if ($context['type'] == 'order_product') {
+    if (isset($context['subject']['product']->data['module'])) {
+      if ($context['subject']['product']->data['module'] == 'uc_coupon') {
+        $price['price'] = 0;
+      }
+    }
+  }
+}
+
+/**
  * Implements hook_order_product_alter().
  * 
  * Ensure that dummy cart-item coupons don't get saved with an order.
@@ -1245,7 +1271,7 @@ function uc_coupon_uc_cart_alter(&$items, $ignore = NULL) {
         'nid' => 0,
         'qty' => 1,
         'price' => uc_coupon_price(-$coupon->amount, 'altered'),
-        'data' => array('shippable' => FALSE)
+        'data' => array('shippable' => FALSE, 'module' => 'uc_coupon')
       );
     }
   }
