diff --git a/web/com.openbravo.decathlon.retail.scancustomizations/js/barcodeScanHook.js b/web/com.openbravo.decathlon.retail.scancustomizations/js/barcodeScanHook.js
index 44baf67..e567f4e 100644
--- a/web/com.openbravo.decathlon.retail.scancustomizations/js/barcodeScanHook.js
+++ b/web/com.openbravo.decathlon.retail.scancustomizations/js/barcodeScanHook.js
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2015-2020 Openbravo S.L.U.
+ * Copyright (C) 2015-2022 Openbravo S.L.U.
  * Licensed under the Openbravo Commercial License version 1.0
  * You may obtain a copy of the License at http://www.openbravo.com/legal/obcl.html
  * or in the legal folder of this module distribution.
@@ -62,6 +62,10 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
       if (scannedCode.startsWith('01') && scannedCode.substr(16, 2) === '21') {
         //RFID
         args.cancellation = true;
+        OB.MobileApp.model.receipt.set(
+          'DECSCAddedProduct',
+          OB.MobileApp.model.receipt.get('DECSCAddedProduct') || []
+        );
         //search for the product + add product + set serial number
         var code = scannedCode.substr(3, 13);
         var sNumber = scannedCode.substr(18, 12);
@@ -84,25 +88,20 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
           function(data) {
             if (data.length > 0) {
               //looking for the same product with same serial number
-              for (
-                i = 0;
-                i < OB.MobileApp.model.receipt.get('lines').length;
-                i++
-              ) {
-                if (
-                  OB.MobileApp.model.receipt
-                    .get('lines')
-                    .models[i].get('obposSerialNumber') === sNumber &&
-                  OB.MobileApp.model.receipt
-                    .get('lines')
-                    .models[i].get('product')
-                    .get('searchkey') === data.models[0].get('searchkey')
-                ) {
-                  existingSerial = true;
-                  break;
-                }
-              }
+              const existingAddedProduct = OB.MobileApp.model.receipt.get(
+                'DECSCAddedProduct'
+              );
+              const existingSerial = !!existingAddedProduct.find(
+                e =>
+                  e.obposSerialNumber === sNumber &&
+                  e.searchkey === data.models[0].get('searchkey')
+              );
+
               if (!existingSerial) {
+                existingAddedProduct.push({
+                  obposSerialNumber: sNumber,
+                  searchkey: data.models[0].get('searchkey')
+                });
                 // Force to ungroup the product if readed using RFID
                 data.models[0].set('groupProduct', false);
                 OB.MobileApp.view.waterfall('onAddProduct', {
@@ -115,6 +114,16 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
                     rfidScanCode: scannedCode,
                     decscUPCEANUsed: code,
                     decscRfidscancode: scannedCode
+                  },
+                  callback: () => {
+                    const index = existingAddedProduct.findIndex(
+                      e =>
+                        e.obposSerialNumber === sNumber &&
+                        searchkey === data.models[0].get('searchkey')
+                    );
+                    if (index > -1) {
+                      existingAddedProduct.splice(index, 1);
+                    }
                   }
                 });
               } else {
@@ -153,27 +162,20 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
                       function(data) {
                         if (data.length > 0) {
                           //looking for the same product with same serial number
-                          for (
-                            i = 0;
-                            i < OB.MobileApp.model.receipt.get('lines').length;
-                            i++
-                          ) {
-                            if (
-                              OB.MobileApp.model.receipt
-                                .get('lines')
-                                .models[i].get('obposSerialNumber') ===
-                                sNumber &&
-                              OB.MobileApp.model.receipt
-                                .get('lines')
-                                .models[i].get('product')
-                                .get('searchkey') ===
-                                data.models[0].get('searchkey')
-                            ) {
-                              existingSerial = true;
-                              break;
-                            }
-                          }
+                          const existingAddedProduct = OB.MobileApp.model.receipt.get(
+                            'DECSCAddedProduct'
+                          );
+                          const existingSerial = !!existingAddedProduct.find(
+                            e =>
+                              e.obposSerialNumber === sNumber &&
+                              e.searchkey === data.models[0].get('searchkey')
+                          );
+
                           if (!existingSerial) {
+                            existingAddedProduct.push({
+                              obposSerialNumber: sNumber,
+                              searchkey: data.models[0].get('searchkey')
+                            });
                             // Force to ungroup the product if readed using RFID
                             data.models[0].set('groupProduct', false);
                             OB.MobileApp.view.waterfall('onAddProduct', {
@@ -186,6 +188,17 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
                                 rfidScanCode: scannedCode,
                                 decscUPCEANUsed: code,
                                 decscRfidscancode: scannedCode
+                              },
+                              callback: () => {
+                                const index = existingAddedProduct.findIndex(
+                                  e =>
+                                    e.obposSerialNumber === sNumber &&
+                                    searchkey ===
+                                      data.models[0].get('searchkey')
+                                );
+                                if (index > -1) {
+                                  existingAddedProduct.splice(index, 1);
+                                }
                               }
                             });
                           } else {
