diff --git a/web/org.openbravo.retail.discounts/js/discountsengine/common/discount-engine.js b/web/org.openbravo.retail.discounts/js/discountsengine/common/discount-engine.js
index 63c41e27b2e398e2057fa9a9860657d53d1d0007..03032724b9393326c66b9fb1626ee96ac2be99ea 100644
--- a/web/org.openbravo.retail.discounts/js/discountsengine/common/discount-engine.js
+++ b/web/org.openbravo.retail.discounts/js/discountsengine/common/discount-engine.js
@@ -82,6 +82,14 @@
     }
   };
 
+  const clearLinePromotions = receipt => {
+    const lines = receipt.get('lines');
+    lines.models.forEach(line => {
+      // eslint-disable-next-line no-param-reassign
+      delete line.attributes.promotions;
+    });
+  };
+
   OB.Discounts.applyDiscounts = function(originalTicket, rules, bpSets) {
     OB.debug('applying discounts for ', rules.length);
 
@@ -110,6 +118,11 @@
       computableTicket.originalScale,
       computableTicket.originalRoundingMode
     );
+    // Reset all promotions in lines as they are recalculated
+    const receipt = OB.MobileApp.model.receipt;
+    if (receipt.get('doCancelAndReplace')) {
+      clearLinePromotions(receipt);
+    }
     return computableTicketInfo;
   };
 
