diff --git a/src/Peer.ts b/src/Peer.ts
index 9f42c59b65acf59e3f1c0c8990e8512f32b5799f..47f3bb3ffa5a7e626b9203ee84347775e590ed10 100644
--- a/src/Peer.ts
+++ b/src/Peer.ts
@@ -119,13 +119,14 @@ export class Peer {
         }
     
         const close = () => {
-            this.emit("disconnect", this);
             this.status = kDisconnected;
             Peer.removePeer(this);
+            this.emit("disconnect", this);
         }
     
         const error = (e) => {
             console.error("Socket error: ", e);
+            Peer.removePeer(this);
             this.sock.close();
             this.status = kDisconnected;
         }
@@ -346,11 +347,15 @@ export class Peer {
     /**
      * Closes the socket
      */
-    close() {
-        if(!isw3c(this.sock)){
-            this.sock.close();
-        }
-        this.status = kDisconnected;
+    async close() {
+        if (this.status === kDisconnected) return;
+
+        return new Promise(resolve => {
+            this.on("disconnect", resolve);
+            if(!isw3c(this.sock)){
+                this.sock.close();
+            }
+        });
     }
 
     getUuid(): string {
@@ -361,7 +366,7 @@ export class Peer {
 
     static addPeer(p: Peer) {
         Peer.peers.set(p.string_id, p);
-        if (Peer.peers.size === 1) {
+        if (Peer.peers.size === 1 && !Peer.interval) {
             Peer.interval = setInterval(() => {
                 for (const [id, peer] of Peer.peers) {
                     peer.updateStatistics();
diff --git a/tests/peer.unit.test.ts b/tests/peer.unit.test.ts
index 99fb94821b71fb864eba1c2ff8d92b30b2058ad5..a86db1a081c10163154b54422bc6ada36e858665 100644
--- a/tests/peer.unit.test.ts
+++ b/tests/peer.unit.test.ts
@@ -9,6 +9,7 @@ describe("Peer class", () => {
     let clientPeer: Peer;
     let serverPeer: Peer;
     let wss: WebSocket.Server;
+    let conn: WebSocket;
 
     beforeEach(async () => {
         return new Promise((resolve) => {
@@ -18,7 +19,7 @@ describe("Peer class", () => {
                 serverPeer = new Peer(ws, true);
             });
 
-            const conn = new WebSocket('ws://127.0.0.1:9003');
+            conn = new WebSocket('ws://127.0.0.1:9003');
             clientPeer = new Peer(conn);
             clientPeer.on('connect', () => {
                 resolve(true);
@@ -27,9 +28,9 @@ describe("Peer class", () => {
     });
 
     afterEach(async () => {
+        await clientPeer.close();
+        await serverPeer.close();
         return new Promise((resolve) => {
-            clientPeer.close();
-            serverPeer.close();
             wss.close(() => {
                 resolve(true);
             });