diff --git a/commerce_discount.module b/commerce_discount.module
index 7f1e173..e25aa8e 100644
--- a/commerce_discount.module
+++ b/commerce_discount.module
@@ -823,10 +823,13 @@ function commerce_discount_get_compatibility_selection($discount) {
  *
  * @param array $price
  *   A price field value array including a data array with price components.
+ * @param string $exclude
+ *   (optional) The name of a discount to exclude from the list of applied
+ *   discounts.
  *
  * @return array
  */
-function commerce_discount_get_discounts_applied_to_price($price) {
+function commerce_discount_get_discounts_applied_to_price($price, $exclude = '') {
   $applied_discounts = array();
 
   // Return early if the price has no components.
@@ -842,7 +845,7 @@ function commerce_discount_get_discounts_applied_to_price($price) {
       $applied_discount = entity_load_single('commerce_discount', $applied_discount_name);
 
       // Add it to the list of applied discounts keyed by ID to prevent duplicates.
-      if (!empty($applied_discount)) {
+      if (!empty($applied_discount) && $applied_discount_name != $exclude) {
         $applied_discounts[$applied_discount->discount_id] = $applied_discount_name;
       }
     }
diff --git a/commerce_discount.rules.inc b/commerce_discount.rules.inc
index 807663c..89e6f76 100644
--- a/commerce_discount.rules.inc
+++ b/commerce_discount.rules.inc
@@ -72,10 +72,10 @@ function commerce_discount_rules_condition_info() {
   $conditions['commerce_discount_compatibility_check'] = array(
     'label' => t('Check discount compatibility'),
     'parameter' => array(
-      'commerce_order' => array(
-        'type' => 'commerce_order',
-        'label' => t('Order'),
-        'description' => t('The order the discount would be applied to.'),
+      'commerce_line_item' => array(
+        'type' => 'commerce_line_item',
+        'label' => t('Line Item'),
+        'description' => t('The line item the discount would be applied to.'),
         'wrapped' => TRUE,
       ),
       'commerce_discount' => array(
@@ -418,23 +418,36 @@ function commerce_discount_rules_event_info() {
 /**
  * Rules callback: executes the "Check discount compatibility" condition.
  *
- * @param \EntityDrupalWrapper $order_wrapper
- *   The order the discount would be applied to.
+ * @param \EntityDrupalWrapper $line_item_wrapper
+ *   The line item the discount would be applied to.
  * @param \EntityDrupalWrapper $discount_wrapper
  *   The discount whose compatibility needs to be checked.
  */
-function commerce_discount_compatibility_check(EntityDrupalWrapper $order_wrapper, $discount_name) {
+function commerce_discount_compatibility_check(EntityDrupalWrapper $line_item_wrapper, $discount_name) {
   // Ensure the discount we're loading still exists.
   if (!$discount = entity_load_single('commerce_discount', $discount_name)) {
     return FALSE;
   }
 
+  $order_wrapper = $line_item_wrapper->order;
+
   // Get the strategy from the compatibility strategy field.
   $strategy = commerce_discount_get_compatibility_strategy($discount);
 
-  // Determine which discounts have been applied to the order thus far.
+  // Determine which discounts have been applied to the order and the line
+  // item thus far.
   $order_total = $order_wrapper->commerce_order_total->value();
-  $applied_discounts = commerce_discount_get_discounts_applied_to_price($order_total);
+  $line_item_total = $line_item_wrapper->commerce_total->value();
+
+  $applied_discounts = commerce_discount_get_discounts_applied_to_price($order_total, $discount_name);
+  $applied_line_item_discounts = commerce_discount_get_discounts_applied_to_price($line_item_total, $discount_name);
+
+  // Make sure there are no duplicates in our list.
+  foreach ($applied_line_item_discounts as $line_item_discount_name) {
+    if (!in_array($line_item_discount_name, $applied_discounts)) {
+      $applied_discounts[] = $line_item_discount_name;
+    }
+  }
 
   // Ensure none of them indicate they are incompatible with the current one.
   foreach ($applied_discounts as $applied_discount_id => $applied_discount_name) {
