diff --git a/app/modules/ws2p/lib/WS2PConnection.ts b/app/modules/ws2p/lib/WS2PConnection.ts
index 5bef15d0ce786616c846d85fcfa885142a68f1a0..dad3bdbeebe643d18d3bbe02db234d483c126ccb 100644
--- a/app/modules/ws2p/lib/WS2PConnection.ts
+++ b/app/modules/ws2p/lib/WS2PConnection.ts
@@ -19,8 +19,8 @@ import {CertificationDTO} from "../../../lib/dto/CertificationDTO"
 import {MembershipDTO} from "../../../lib/dto/MembershipDTO"
 import {TransactionDTO} from "../../../lib/dto/TransactionDTO"
 import {PeerDTO} from "../../../lib/dto/PeerDTO"
-import { WS2PConstants } from './constants';
-import { ProxiesConf } from '../../../lib/proxy';
+import {WS2PConstants} from './constants';
+
 const ws = require('ws')
 const SocksProxyAgent = require('socks-proxy-agent');
 const nuuid = require('node-uuid');
@@ -253,6 +253,20 @@ export interface WS2PRequest {
   params?:any
 }
 
+export class WS2PMessageExchange {
+
+  promise: Promise<any>
+  extras: {
+    resolve: (data:any) => void
+    reject: (err:any) => void
+  }
+
+  constructor(extras: { resolve: () => void; reject: () => void }, race: any) {
+    this.promise = race
+    this.extras = extras
+  }
+}
+
 /**
  * The handler of a WS2P connection.
  *
@@ -270,14 +284,8 @@ export class WS2PConnection {
   private nbResponsesCount = 0
   private nbPushsToRemoteCount = 0
   private nbPushsByRemoteCount = 0
-  private exchanges:{
-    [uuid:string]: {
-      promise: Promise<any>,
-      extras: {
-        resolve: (data:any) => void
-        reject: (err:any) => void
-      }
-    }
+  private exchanges: {
+    [uuid: string]: WS2PMessageExchange
   } = {}
 
   constructor(
@@ -575,9 +583,9 @@ export class WS2PConnection {
             resolve: () => { console.error('resolution not implemented') },
             reject:  () => { console.error('rejection not implemented') }
           }
-          this.exchanges[uuid] = {
+          this.exchanges[uuid] = new WS2PMessageExchange(
             extras,
-            promise: Promise.race([
+            Promise.race([
               // The answer
               new Promise((res, rej) => {
                 extras.resolve = res
@@ -593,11 +601,13 @@ export class WS2PConnection {
                 }, this.options.requestTimeout)
               })
             ])
-          }
+          )
           try {
             resolve(await this.exchanges[uuid].promise)
           } catch(e) {
             reject(e)
+          } finally {
+            delete this.exchanges[uuid]
           }
         }
       })
diff --git a/app/modules/ws2p/lib/interface/WS2PServerMessageHandler.ts b/app/modules/ws2p/lib/interface/WS2PServerMessageHandler.ts
index 24c1bbe1a41c7773b6c45366b0253b80d03c2880..19a0a85deaa08d9af5cddff4335ebd3c739da7f5 100644
--- a/app/modules/ws2p/lib/interface/WS2PServerMessageHandler.ts
+++ b/app/modules/ws2p/lib/interface/WS2PServerMessageHandler.ts
@@ -115,6 +115,11 @@ export class WS2PServerMessageHandler implements WS2PMessageHandler {
           }
           this.server.logger.warn(message)
         }
+        setTimeout(() => {
+          if (this.errors[documentHash]) {
+            delete this.errors[documentHash]
+          }
+        }, 1000 * WS2PConstants.ERROR_RECALL_DURATION_IN_SECONDS)
       } else {
         // Remember the error for some time
         if (!this.errors[documentHash]) {
@@ -125,7 +130,9 @@ export class WS2PServerMessageHandler implements WS2PMessageHandler {
         }
         this.errors[documentHash].pubkeys[c.pubkey] = [json.body]
         setTimeout(() => {
-          delete this.errors[documentHash]
+          if (this.errors[documentHash]) {
+            delete this.errors[documentHash]
+          }
         }, 1000 * WS2PConstants.ERROR_RECALL_DURATION_IN_SECONDS)
       }
       if (e !== "Block already known"