diff --git a/web/org.openbravo.retail.posterminal/js/utils/rfidWebsocket.js b/web/org.openbravo.retail.posterminal/js/utils/rfidWebsocket.js
index 3481f37a7..b99994101 100644
--- a/web/org.openbravo.retail.posterminal/js/utils/rfidWebsocket.js
+++ b/web/org.openbravo.retail.posterminal/js/utils/rfidWebsocket.js
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2015-2021 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.
@@ -10,7 +10,8 @@
 /* global WebSocket, _ Backbone, DECUAUT */
 
 OB.UTIL.RfidController = new Backbone.Model({
-  connected: false
+  connected: false,
+  epcList: []
 });
 
 OB.UTIL.RfidController.isRfidConfigured = function() {
@@ -121,11 +122,23 @@ OB.UTIL.RfidController.startRfidWebsocket = function startRfidWebsocket(
         });
       }
     }
+
+    if (OB.MobileApp.model.receipt) {
+      OB.MobileApp.model.receipt.get('lines').forEach(line => {
+        if (line.get('obposEpccode')) {
+          OB.UTIL.RfidController.get('epcList').push({
+            epc: line.get('obposEpccode'),
+            upc: line.get('product').get('uPCEAN'),
+            serialNo: line.get('obposSerialNumber')
+          });
+        }
+      });
+    }
   };
 
   // Called when a message is received from server
   OB.UTIL.RfidController.get('rfidWebsocket').onmessage = function(event) {
-    var data, ean, i, line;
+    var data, ean;
     if (event.data.startsWith('doNotReconnect')) {
       OB.UTIL.RfidController.get('rfidWebsocket').onclose = function() {};
       OB.UTIL.RfidController.set('connected', false);
@@ -444,17 +457,32 @@ OB.UTIL.RfidController.startRfidWebsocket = function startRfidWebsocket(
           60)
       );
     }
-    for (i = 0; i < OB.MobileApp.model.receipt.get('lines').length; i++) {
-      line = OB.MobileApp.model.receipt.get('lines').models[i];
-      if (
-        line.get('obposEpccode') === data.dataToSave.obposEpccode ||
-        ('0' + line.get('product').get('uPCEAN') === data.gtin &&
-          line.get('obposSerialNumber') === data.dataToSave.obposSerialNumber)
-      ) {
-        return;
-      }
-    }
     ean = data.gtin.substring(1, data.gtin.length).replace(/^0*/, '');
+    OB.info(
+      '[RFID] EPC: ' +
+        data.dataToSave.obposEpccode +
+        ', UPC:' +
+        data.gtin +
+        ', SNo: ' +
+        data.dataToSave.obposSerialNumber
+    );
+    const epcList = OB.UTIL.RfidController.get('epcList');
+    if (
+      epcList.find(
+        e =>
+          e.epc === data.dataToSave.obposEpccode ||
+          ('0' + e.upc === data.gtin &&
+            e.serialNo === data.dataToSave.obposSerialNumber)
+      )
+    ) {
+      OB.info('[RFID] EPC Skipped since addProduct event already triggered');
+      return;
+    }
+    epcList.push({
+      epc: data.dataToSave.obposEpccode,
+      upc: ean,
+      serialNo: data.dataToSave.obposSerialNumber
+    });
     // We are checking if the scanned tag is a hard tag
     // In that case, call the supervisor and never add the product to the order
     var serialNumberWithoutZeroes = data.dataToSave.obposSerialNumber.replace(
@@ -698,6 +726,11 @@ OB.UTIL.RfidController.addEpcLine = function(line, callback, errorCallback) {
               JSON.stringify(extra)
           );
         }
+        OB.UTIL.RfidController.get('epcList').push({
+          epc: line.get('obposEpccode'),
+          upc: line.attributes.product.get('uPCEAN'),
+          serialNo: line.get('obposSerialNumber')
+        });
         OB.debug('addEpcLine sent, UUID: ' + uuid);
       },
       function() {
@@ -934,6 +967,7 @@ OB.UTIL.RfidController.eraseEpcOrder = function(
               ':' +
               JSON.stringify(extra)
           );
+          OB.UTIL.RfidController.set('epcList', []);
           OB.debug('eraseEpcOrder sent, UUID: ' + uuid);
         },
         function() {
@@ -982,6 +1016,11 @@ OB.UTIL.RfidController.removeEpc = function(epc, callback, errorCallback) {
         OB.UTIL.RfidController.get('rfidWebsocket').send(
           'removeEpcs:' + uuid + ':' + epc + ':' + JSON.stringify(extra)
         );
+        const epcList = OB.UTIL.RfidController.get('epcList');
+        const epcIndex = epcList.findIndex(e => e.epc === epc);
+        if (epcIndex > -1) {
+          epcList.splice(epcIndex, 1);
+        }
         OB.debug('removeEpc sent, UUID: ' + uuid);
       },
       function() {
@@ -1079,7 +1118,13 @@ OB.UTIL.RfidController.removeEpcLine = function(line, callback, errorCallback) {
               JSON.stringify(extra)
           );
         }
-
+        const epcList = OB.UTIL.RfidController.get('epcList');
+        const epcIndex = epcList.findIndex(
+          e => e.epc === line.get('obposEpccode')
+        );
+        if (epcIndex > -1) {
+          epcList.splice(epcIndex, 1);
+        }
         OB.debug('removeEpcLine sent UUID: ' + uuid);
       },
       function() {
@@ -1205,6 +1250,7 @@ OB.UTIL.RfidController.removeAllEpcs = function(callback, errorCallback) {
       OB.UTIL.RfidController.get('rfidWebsocket').send(
         'removeAllEpcs:' + uuid + ':' + JSON.stringify(extra)
       );
+      OB.UTIL.RfidController.set('epcList', []);
       OB.debug('removeAllEpcs sent, UUID: ' + uuid);
     },
     function() {
@@ -1278,6 +1324,7 @@ OB.UTIL.RfidController.processRemainingCodes = function(
               ':' +
               JSON.stringify(extra)
           );
+          OB.UTIL.RfidController.set('epcList', []);
           OB.debug('add:processRemainingCodes sent, UUID: ' + uuid);
         },
         function() {
@@ -1337,6 +1384,7 @@ OB.UTIL.RfidController.processRemainingCodes = function(
               ':' +
               JSON.stringify(extra)
           );
+          OB.UTIL.RfidController.set('epcList', []);
           OB.debug('remove processRemainingCodes sent, UUID: ' + uuid);
         },
         function() {
