diff --git a/web/com.openbravo.decathlon.retail.scancustomizations/js/barcodeScanHook.js b/web/com.openbravo.decathlon.retail.scancustomizations/js/barcodeScanHook.js
index e567f4e..5fbda49 100644
--- a/web/com.openbravo.decathlon.retail.scancustomizations/js/barcodeScanHook.js
+++ b/web/com.openbravo.decathlon.retail.scancustomizations/js/barcodeScanHook.js
@@ -24,7 +24,6 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
     uPCEAN,
     itemCode,
     searchkey,
-    existingSerial,
     hasDecimals = false;
   if (OB.Format.defaultDecimalSymbol === ',') {
     hasDecimals = /(?:,.{1,5})$/;
@@ -35,7 +34,14 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
   var regCardNumber = /^(209[0-9]{10})$/g;
 
   let requiredCalculateReceipt = false;
-
+  OB.info(
+    '[Hook] OBPOS_BarcodeScan EPC: ' +
+      args.attrs.obposEpccode +
+      ', UPC:' +
+      args.code +
+      ', SNo: ' +
+      args.attrs.obposSerialNumber
+  );
   switch (scannedCode.length) {
     case 13:
       //Loyalty card 1st since is the most common
@@ -119,7 +125,7 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
                     const index = existingAddedProduct.findIndex(
                       e =>
                         e.obposSerialNumber === sNumber &&
-                        searchkey === data.models[0].get('searchkey')
+                        e.searchkey === data.models[0].get('searchkey')
                     );
                     if (index > -1) {
                       existingAddedProduct.splice(index, 1);
@@ -128,6 +134,10 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
                 });
               } else {
                 OB.UTIL.showError(OB.I18N.getLabel('DECSC_AlreadyIn'));
+                OB.info(
+                  '[Hook] OBPOS_BarcodeScan Skipped addProduct since already added. EPC: ' +
+                    args.attrs.obposEpccode
+                );
               }
             } else {
               OB.Dal.findUsingCache(
@@ -193,7 +203,7 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
                                 const index = existingAddedProduct.findIndex(
                                   e =>
                                     e.obposSerialNumber === sNumber &&
-                                    searchkey ===
+                                    e.searchkey ===
                                       data.models[0].get('searchkey')
                                 );
                                 if (index > -1) {
@@ -205,6 +215,10 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
                             OB.UTIL.showError(
                               OB.I18N.getLabel('DECSC_AlreadyIn')
                             );
+                            OB.info(
+                              '[Hook] OBPOS_BarcodeScan Skipped addProduct since already added. EPC: ' +
+                                args.attrs.obposEpccode
+                            );
                           }
                         } else {
                           //call unknown item
@@ -216,34 +230,47 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
                             },
                             function(found) {
                               if (found.length !== 0) {
-                                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') ===
+                                //looking for the same product with same serial number
+                                const existingAddedProduct = OB.MobileApp.model.receipt.get(
+                                  'DECSCAddedProduct'
+                                );
+                                const existingSerial = !!existingAddedProduct.find(
+                                  e =>
+                                    e.obposSerialNumber === sNumber &&
+                                    e.searchkey ===
                                       found.models[0].get('searchkey')
-                                  ) {
-                                    existingSerial = true;
-                                    break;
-                                  }
-                                }
+                                );
                                 if (!existingSerial) {
-                                  DECUNK.UTIL.callToUnkownItem(code, args);
+                                  existingAddedProduct.push({
+                                    obposSerialNumber: sNumber,
+                                    searchkey: found.models[0].get('searchkey')
+                                  });
+                                  const callback = () => {
+                                    const index = existingAddedProduct.findIndex(
+                                      e =>
+                                        e.obposSerialNumber === sNumber &&
+                                        e.searchkey ===
+                                          found.models[0].get('searchkey')
+                                    );
+                                    if (index > -1) {
+                                      existingAddedProduct.splice(index, 1);
+                                    }
+                                  };
+                                  DECUNK.UTIL.callToUnkownItem(
+                                    code,
+                                    args,
+                                    false,
+                                    callback,
+                                    callback
+                                  );
                                 } else {
                                   OB.UTIL.showError(
                                     OB.I18N.getLabel('DECSC_AlreadyIn')
                                   );
+                                  OB.info(
+                                    '[Hook] OBPOS_BarcodeScan Skipped addProduct since already added. EPC: ' +
+                                      args.attrs.obposEpccode
+                                  );
                                 }
                               } else {
                                 OB.UTIL.showError(
@@ -277,32 +304,46 @@ OB.UTIL.HookManager.registerHook('OBPOS_BarcodeScan', function(
                       },
                       function(found) {
                         if (found.length !== 0) {
-                          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') ===
-                                found.models[0].get('searchkey')
-                            ) {
-                              existingSerial = true;
-                              break;
-                            }
-                          }
+                          //looking for the same product with same serial number
+                          const existingAddedProduct = OB.MobileApp.model.receipt.get(
+                            'DECSCAddedProduct'
+                          );
+                          const existingSerial = !!existingAddedProduct.find(
+                            e =>
+                              e.obposSerialNumber === sNumber &&
+                              e.searchkey === found.models[0].get('searchkey')
+                          );
                           if (!existingSerial) {
-                            DECUNK.UTIL.callToUnkownItem(code, args);
+                            existingAddedProduct.push({
+                              obposSerialNumber: sNumber,
+                              searchkey: found.models[0].get('searchkey')
+                            });
+                            const callback = () => {
+                              const index = existingAddedProduct.findIndex(
+                                e =>
+                                  e.obposSerialNumber === sNumber &&
+                                  e.searchkey ===
+                                    found.models[0].get('searchkey')
+                              );
+                              if (index > -1) {
+                                existingAddedProduct.splice(index, 1);
+                              }
+                            };
+                            DECUNK.UTIL.callToUnkownItem(
+                              code,
+                              args,
+                              false,
+                              callback,
+                              callback
+                            );
                           } else {
                             OB.UTIL.showError(
                               OB.I18N.getLabel('DECSC_AlreadyIn')
                             );
+                            OB.info(
+                              '[Hook] OBPOS_BarcodeScan Skipped addProduct since already added. EPC: ' +
+                                args.attrs.obposEpccode
+                            );
                           }
                         } else {
                           OB.UTIL.showError(
