diff --git a/commerce_discount.module b/commerce_discount.module
index f8aac55..acb4af1 100644
--- a/commerce_discount.module
+++ b/commerce_discount.module
@@ -75,8 +75,11 @@ function commerce_discount_commerce_cart_order_refresh($wrapper) {
     }
   }
 
-  // Delete line items.
-  commerce_line_item_delete_multiple($line_items_to_delete);
+  // Queue line items for deletion later.
+  if (!empty($line_items_to_delete)) {
+    $queue = DrupalQueue::get('commerce_discount_line_item_cleanup');
+    $queue->createItem($line_items_to_delete);
+  }
 
   // Re-add all applicable discount price components and/or line items.
   rules_invoke_event('commerce_discount_order', $wrapper);
@@ -243,6 +246,26 @@ function commerce_discount_flush_caches() {
 }
 
 /**
+ * Implements hook_cron_queue_info().
+ */
+function commerce_discount_cron_queue_info() {
+  $queues['commerce_discount_line_item_cleanup'] = array(
+    'worker callback' => 'commerce_discount_line_item_cleanup',
+  );
+  return $queues;
+}
+
+/**
+ * Deletes line_items detached from orders by cart refreshes.
+ *
+ * @param $line_items_to_delete
+ *   An array of old line_item ids to delete.
+ */
+function commerce_discount_line_item_cleanup($line_items_to_delete) {
+  commerce_line_item_delete_multiple($line_items_to_delete);
+}
+
+/**
  * Implements hook_permission().
  */
 function commerce_discount_permission() {
