diff --git a/src/queue.js b/src/queue.js
index e9359b8e902a21518621bb0337864e6fb1578542..b138bccc09c6bbaeea0bfd2a339e57bb56189fd3 100644
--- a/src/queue.js
+++ b/src/queue.js
@@ -4,11 +4,18 @@ import MessagePack from "what-the-pack"
 import pako from "pako"
 import uuidv4 from "uuid/v4"
 
-const { encode, decode } = MessagePack.initialize(2 ** 22)
+const MESSAGE_BUFFER_SIZE = 2 ** 24 // 16MB
+const MESSAGE_SLICE_SIZE = 2 ** 10 // 1KB
 
-const buffer = new Map()
+const { encode, decode } = MessagePack.initialize(MESSAGE_BUFFER_SIZE)
+
+const buffer = {}
 
 self.onmessage = (event) => {
+  if (!event || !event.data) {
+    return
+  }
+
   if (event.data.method == "send" || event.data.method == "broadcast") {
     let message = event.data.message
     const compressed = typeof message == "object"
@@ -20,12 +27,16 @@ self.onmessage = (event) => {
       message = pako.deflate(message)
     }
 
-    for (let offset = 0; offset < message.length; offset += 2 ** 10) {
+    for (
+      let offset = 0;
+      offset < message.length;
+      offset += MESSAGE_SLICE_SIZE
+    ) {
       event.data.message = {
         uuid,
-        message: message.subarray(offset, offset + 2 ** 10),
-        slice: offset / 2 ** 10,
-        length: Math.ceil(message.length / 2 ** 10),
+        message: message.subarray(offset, offset + MESSAGE_SLICE_SIZE),
+        slice: offset / MESSAGE_SLICE_SIZE,
+        length: Math.ceil(message.length / MESSAGE_SLICE_SIZE),
         compressed,
       }
 
@@ -35,16 +46,16 @@ self.onmessage = (event) => {
     let message = event.data.message.message
 
     if (event.data.message.length > 1) {
-      let messages = buffer.get(event.data.peer.id)
+      let messages = buffer[event.data.peer.id]
       if (!messages) {
-        messages = new Map()
-        buffer.set(event.data.peer.id, messages)
+        messages = {}
+        buffer[event.data.peer.id] = messages
       }
 
-      let slices = messages.get(event.data.message.uuid)
+      let slices = messages[event.data.message.uuid]
       if (!slices) {
         slices = []
-        messages.set(event.data.message.uuid, slices)
+        messages[event.data.message.uuid] = slices
       }
 
       slices.push(event.data.message)
@@ -62,7 +73,7 @@ self.onmessage = (event) => {
       let offset = 0
 
       for (const slice of slices) {
-        message.set(slice.message, offset)
+        message[slice.message] = offset
         offset += slice.message.length
       }
     }
diff --git a/src/room.js b/src/room.js
index 3f17a313f5c5b184f14a9dbb0f1bfb69ea3c90e9..88bf53474ae64d960cc451e03ddb64e9c1ead3d3 100644
--- a/src/room.js
+++ b/src/room.js
@@ -97,7 +97,7 @@ class Room extends EventTarget {
               new CustomEvent("userConnection", { detail: quality }),
             )
           } else if (event.action == "userID") {
-            const { id } = event
+            const { user: id } = event
             this.ownID = id
             this.dispatchEvent(new CustomEvent("allocateOwnID", { detail: id }))
           } else if (event.action == "userJoined") {