diff --git a/.github/workflows/push_frontend_images.yml b/.github/workflows/push_frontend_images.yml
index c0571699..ec6258c6 100644
--- a/.github/workflows/push_frontend_images.yml
+++ b/.github/workflows/push_frontend_images.yml
@@ -29,7 +29,6 @@ jobs:
       AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
       AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
 
-
   deploy_testnet:
     if: github.event.base_ref == 'refs/heads/master'
     needs: [push-frontend-image]
diff --git a/src/hooks/useTransferToL1.js b/src/hooks/useTransferToL1.js
index c5fa0e42..908dfa74 100644
--- a/src/hooks/useTransferToL1.js
+++ b/src/hooks/useTransferToL1.js
@@ -83,7 +83,7 @@ export const useTransferToL1 = () => {
           l2hash
         });
       } catch (ex) {
-        logger.error(ex.message, {ex});
+        logger.error(ex.message, ex);
         trackError(ex);
         handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex));
       }
@@ -110,7 +110,7 @@ export const useCompleteTransferToL1 = () => {
   const progressOptions = useTransferProgress();
   const getL1Token = useL1Token();
   const getL1TokenBridgeContract = useL1TokenBridgeContract();
-  const addWithdrawalListener = useWithdrawalListener();
+  const {addListener, removeListener} = useWithdrawalListener();
   const [trackInitiated, trackSuccess, trackError, trackReject] = useCompleteTransferToL1Tracking();
 
   return useCallback(
@@ -136,7 +136,9 @@ export const useCompleteTransferToL1 = () => {
       };
 
       const onTransactionHash = (error, transactionHash) => {
-        if (!error) {
+        if (error) {
+          onError(error);
+        } else {
           logger.log('Tx signed', {transactionHash});
           handleProgress(
             progressOptions.withdraw(
@@ -145,26 +147,27 @@ export const useCompleteTransferToL1 = () => {
               stepOf(TransferStep.WITHDRAW, CompleteTransferToL1Steps)
             )
           );
-        } else {
-          trackReject(error);
-          logger.error(error.message);
-          handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
         }
       };
 
       const onWithdrawal = (error, event) => {
-        if (!error) {
+        if (error) {
+          onError(error);
+        } else {
           const {transactionHash: l1hash} = event;
           logger.log('Done', l1hash);
           trackSuccess(l1hash);
           handleData({...transfer, l1hash});
-        } else {
-          trackError(error);
-          logger.error(error.message);
-          handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
         }
       };
 
+      const onError = error => {
+        removeListener();
+        trackError(error);
+        logger.error(error?.message, error);
+        handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
+      };
+
       try {
         logger.log('CompleteTransferToL1 called');
         handleProgress(
@@ -173,13 +176,11 @@ export const useCompleteTransferToL1 = () => {
             stepOf(TransferStep.CONFIRM_TX, CompleteTransferToL1Steps)
           )
         );
-        addWithdrawalListener(onWithdrawal);
+        addListener(onWithdrawal);
         logger.log('Calling withdraw');
         await sendWithdrawal();
       } catch (ex) {
-        trackError(ex);
-        logger.error(ex.message, {ex});
-        handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex));
+        onError(ex);
       }
     },
     [
@@ -192,7 +193,8 @@ export const useCompleteTransferToL1 = () => {
       handleProgress,
       logger,
       progressOptions,
-      addWithdrawalListener
+      addListener,
+      removeListener
     ]
   );
 };
diff --git a/src/hooks/useTransferToL2.js b/src/hooks/useTransferToL2.js
index c7a5e1eb..41953bb6 100644
--- a/src/hooks/useTransferToL2.js
+++ b/src/hooks/useTransferToL2.js
@@ -32,7 +32,7 @@ export const useTransferToL2 = () => {
   const getTokenContract = useTokenContract();
   const getTokenBridgeContract = useTokenBridgeContract();
   const progressOptions = useTransferProgress();
-  const addDepositListener = useDepositListener();
+  const {addListener, removeListener} = useDepositListener();
   const getDepositMessageToL2Event = useDepositMessageToL2Event();
   const maxTotalBalance = useMaxTotalBalance();
 
@@ -81,20 +81,20 @@ export const useTransferToL2 = () => {
       };
 
       const onTransactionHash = (error, transactionHash) => {
-        if (!error) {
+        if (error) {
+          onError(error);
+        } else {
           logger.log('Tx signed', {transactionHash});
           handleProgress(
             progressOptions.deposit(amount, symbol, stepOf(TransferStep.DEPOSIT, TransferToL2Steps))
           );
-        } else {
-          trackReject(error);
-          logger.error(error.message);
-          handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
         }
       };
 
       const onDeposit = async (error, event) => {
-        if (!error) {
+        if (error) {
+          onError(error);
+        } else {
           const l2MessageEvent = await getDepositMessageToL2Event(event);
           if (l2MessageEvent) {
             handleData({
@@ -107,10 +107,6 @@ export const useTransferToL2 = () => {
               ...extractTransactionsHashFromEvent(l2MessageEvent)
             });
           }
-        } else {
-          trackError(error);
-          logger.error(error.message);
-          handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
         }
       };
 
@@ -144,6 +140,13 @@ export const useTransferToL2 = () => {
         return maxTotalBalance < tokenBridgeBalance + Number(amount);
       };
 
+      const onError = error => {
+        removeListener();
+        trackError(error);
+        logger.error(error?.message, error);
+        handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
+      };
+
       try {
         logger.log('TransferToL2 called');
         if (await isMaxBalanceExceeded()) {
@@ -170,18 +173,17 @@ export const useTransferToL2 = () => {
             stepOf(TransferStep.CONFIRM_TX, TransferToL2Steps)
           )
         );
-        addDepositListener(onDeposit);
+        addListener(onDeposit);
         logger.log('Calling deposit');
         await sendDeposit();
       } catch (ex) {
-        trackError(ex);
-        logger.error(ex.message, {ex});
-        handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex));
+        onError(ex);
       }
     },
     [
       selectedToken,
-      addDepositListener,
+      addListener,
+      removeListener,
       l1ChainId,
       l2ChainId,
       l1Account,
diff --git a/src/providers/EventManagerProvider/EventManagerProvider.js b/src/providers/EventManagerProvider/EventManagerProvider.js
index 8e410ff1..a32d4cef 100644
--- a/src/providers/EventManagerProvider/EventManagerProvider.js
+++ b/src/providers/EventManagerProvider/EventManagerProvider.js
@@ -31,6 +31,11 @@ export const EventManagerProvider = ({children}) => {
     listeners[eventName].push(callback);
   };
 
+  const removeListeners = eventName => {
+    logger.log(`Remove listeners for event ${eventName}.`);
+    listeners[eventName] = [];
+  };
+
   const getPastEvents = (contract, eventName, options = {}) => {
     logger.log(`Getting ${eventName} past events.`);
     return contract.getPastEvents(eventName, {
@@ -42,12 +47,7 @@ export const EventManagerProvider = ({children}) => {
   const emitListeners = (eventName, error, event) => {
     logger.log(`Event ${eventName} emitted to listeners.`, event);
     listeners[eventName]?.forEach(listener => listener(error, event));
-    cleanListeners(eventName);
-  };
-
-  const cleanListeners = eventName => {
-    logger.log(`Clean listeners for event ${eventName}.`);
-    listeners[eventName] = [];
+    removeListeners(eventName);
   };
 
   const onWithdrawal = (error, event) => {
@@ -111,7 +111,8 @@ export const EventManagerProvider = ({children}) => {
 
   const value = {
     addListener,
-    getPastEvents
+    getPastEvents,
+    removeListeners
   };
 
   return <EventManagerContext.Provider value={value}>{children}</EventManagerContext.Provider>;
diff --git a/src/providers/EventManagerProvider/event-manager-context.js b/src/providers/EventManagerProvider/event-manager-context.js
index a1c700d2..0cec28a5 100644
--- a/src/providers/EventManagerProvider/event-manager-context.js
+++ b/src/providers/EventManagerProvider/event-manager-context.js
@@ -2,5 +2,6 @@ import {createContext} from 'react';
 
 export const EventManagerContext = createContext({
   addListener: (eventName, callback) => ({eventName, callback}),
+  removeListeners: eventName => eventName,
   getPastEvents: async (contract, eventName, options) => ({contract, eventName, options})
 });
diff --git a/src/providers/EventManagerProvider/event-manager-hooks.js b/src/providers/EventManagerProvider/event-manager-hooks.js
index 67fce439..eb46f1ef 100644
--- a/src/providers/EventManagerProvider/event-manager-hooks.js
+++ b/src/providers/EventManagerProvider/event-manager-hooks.js
@@ -4,20 +4,31 @@ import {EventName} from '../../enums';
 import {useStarknetContract} from '../../hooks';
 import {EventManagerContext} from './event-manager-context';
 
-export const useEventListener = () => {
-  return useContext(EventManagerContext);
+export const useEventListener = eventName => {
+  const {addListener, removeListeners} = useContext(EventManagerContext);
+
+  const _addListener = useCallback(
+    callback => addListener(eventName, callback),
+    [addListener]
+  );
+
+  const _removeListeners = useCallback(
+    () => removeListeners(eventName),
+    [removeListeners]
+  );
+
+  return {
+    addListener: _addListener,
+    removeListener: _removeListeners
+  };
 };
 
 export const useDepositListener = () => {
-  const {addListener} = useContext(EventManagerContext);
-
-  return useCallback(callback => addListener(EventName.L1.LOG_DEPOSIT, callback), [addListener]);
+  return useEventListener(EventName.L1.LOG_DEPOSIT);
 };
 
 export const useWithdrawalListener = () => {
-  const {addListener} = useContext(EventManagerContext);
-
-  return useCallback(callback => addListener(EventName.L1.LOG_WITHDRAWAL, callback), [addListener]);
+  return useEventListener(EventName.L1.LOG_WITHDRAWAL);
 };
 
 export const useDepositMessageToL2Event = () => {