diff --git a/web/com.openbravo.decathlon.retail.unknownitem/js/decUnknownUtils.js b/web/com.openbravo.decathlon.retail.unknownitem/js/decUnknownUtils.js
index c97916a..95e2970 100644
--- a/web/com.openbravo.decathlon.retail.unknownitem/js/decUnknownUtils.js
+++ b/web/com.openbravo.decathlon.retail.unknownitem/js/decUnknownUtils.js
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2017-2020 Openbravo S.L.U.
+ * Copyright (C) 2017-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.
@@ -54,10 +54,11 @@ DECUNK.UTIL = {
     errorCallback
   ) {
     var callToAddProduct = function(found, code, args) {
-        var attrs = args.attrs || {},
-          existingSerial = false,
-          receipt = OB.MobileApp.model.receipt,
-          i;
+        var attrs = args.attrs || {};
+        OB.MobileApp.model.receipt.set(
+          'DECUNKAddedProduct',
+          OB.MobileApp.model.receipt.get('DECUNKAddedProduct') || []
+        );
         //If we end in this flow we should ensure that we are sending the rfidscan & decscUPCEANUsed. If empty will be the code after applying 20/21 rules
         if (!attrs.rfidScanCode) {
           attrs.rfidScanCode = code;
@@ -70,29 +71,46 @@ DECUNK.UTIL = {
           attrs.obposSerialNumber = args.code.substr(18, 12);
         }
         //This check should be done before adding the product to ensure that we have all the properties
-        for (i = 0; i < receipt.get('lines').length; i++) {
-          if (
-            receipt.get('lines').models[i].get('obposSerialNumber') ===
-              attrs.obposSerialNumber &&
-            receipt
-              .get('lines')
-              .models[i].get('product')
-              .get('searchkey') === found.models[0].get('searchkey')
-          ) {
-            existingSerial = true;
-            break;
-          }
-        }
+        const existingAddedProduct = OB.MobileApp.model.receipt.get(
+          'DECUNKAddedProduct'
+        );
+        const existingSerial = !!existingAddedProduct.find(
+          e =>
+            e.obposSerialNumber === attrs.obposSerialNumber &&
+            e.searchkey === found.models[0].get('searchkey')
+        );
         if (!existingSerial) {
+          existingAddedProduct.push({
+            obposSerialNumber: attrs.obposSerialNumber,
+            searchkey: found.models[0].get('searchkey')
+          });
           OB.MobileApp.view.waterfall('onAddProduct', {
             product: found.models[0],
             qty: args.qty,
             options: null,
-            attrs: attrs
+            attrs: attrs,
+            callback: () => {
+              const index = existingAddedProduct.findIndex(
+                e =>
+                  e.obposSerialNumber === attrs.obposSerialNumber &&
+                  e.searchkey === found.models[0].get('searchkey')
+              );
+              if (index > -1) {
+                existingAddedProduct.splice(index, 1);
+              }
+              if (callback && callback instanceof Function) {
+                callback();
+              }
+            }
           });
-        }
-        if (callback && callback instanceof Function) {
-          callback();
+        } else {
+          if (callback && callback instanceof Function) {
+            callback();
+          }
+          OB.info(
+            '[Unknown Item] searchByItemCode Skipped addProduct since already added. searchKey: ' +
+              found.models[0].get('searchkey')
+          );
         }
       },
       goToUnknown = function() {
@@ -131,7 +149,19 @@ DECUNK.UTIL = {
       }
     );
   },
-  callToUnkownItem: function(code, args, avoidExecutionUnknown) {
-    DECUNK.UTIL.searchByItemCode(code, args, avoidExecutionUnknown);
+  callToUnkownItem: function(
+    code,
+    args,
+    avoidExecutionUnknown,
+    callback,
+    errorCallback
+  ) {
+    DECUNK.UTIL.searchByItemCode(
+      code,
+      args,
+      avoidExecutionUnknown,
+      callback,
+      errorCallback
+    );
   }
 };
