diff --git a/package-lock.json b/package-lock.json
index bb033ce056915e3080b5ab0c745b9654286bc484..15cbdc85de4de88e8475ba0f7cc92af9022f7a13 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1112,9 +1112,9 @@
       "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
     },
     "bluebird": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.0.tgz",
-      "integrity": "sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg==",
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz",
+      "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==",
       "dev": true
     },
     "bn.js": {
@@ -7096,9 +7096,9 @@
       "dev": true
     },
     "terser": {
-      "version": "4.3.8",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.8.tgz",
-      "integrity": "sha512-otmIRlRVmLChAWsnSFNO0Bfk6YySuBp6G9qrHiJwlLDd4mxe2ta4sjI7TzIR+W1nBMjilzrMcPOz9pSusgx3hQ==",
+      "version": "4.3.9",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.9.tgz",
+      "integrity": "sha512-NFGMpHjlzmyOtPL+fDw3G7+6Ueh/sz4mkaUYa4lJCxOPTNzd0Uj0aZJOmsDYoSQyfuVoWDMSWTPU3huyOm2zdA==",
       "dev": true,
       "requires": {
         "commander": "^2.20.0",
@@ -7322,9 +7322,9 @@
       "dev": true
     },
     "uglify-js": {
-      "version": "3.6.1",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.1.tgz",
-      "integrity": "sha512-+dSJLJpXBb6oMHP+Yvw8hUgElz4gLTh82XuX68QiJVTXaE5ibl6buzhNkQdYhBlIhozWOC9ge16wyRmjG4TwVQ==",
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.2.tgz",
+      "integrity": "sha512-+gh/xFte41GPrgSMJ/oJVq15zYmqr74pY9VoM69UzMzq9NFk4YDylclb1/bhEzZSaUQjbW5RvniHeq1cdtRYjw==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -7567,9 +7567,9 @@
       "dev": true
     },
     "webpack": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.1.tgz",
-      "integrity": "sha512-ak7u4tUu/U63sCVxA571IuPZO/Q0pZ9cEXKg+R/woxkDzVovq57uB6L2Hlg/pC8LCU+TWpvtcYwsstivQwMJmw==",
+      "version": "4.41.2",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz",
+      "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==",
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.8.5",
diff --git a/src/liowebrtc b/src/liowebrtc
index f0b57a9258b117b97e1b793de27f05b0c9d5e51f..fda5000adc956b2e3884d33e3a1352fbd9189f77 160000
--- a/src/liowebrtc
+++ b/src/liowebrtc
@@ -1 +1 @@
-Subproject commit f0b57a9258b117b97e1b793de27f05b0c9d5e51f
+Subproject commit fda5000adc956b2e3884d33e3a1352fbd9189f77
diff --git a/src/y-webrtc/index.js b/src/y-webrtc/index.js
index d860ec2079d63fcf2f2216b753a3715ca62db8bb..499cf2d97e7030021b4213d67c6388b0733dc46f 100644
--- a/src/y-webrtc/index.js
+++ b/src/y-webrtc/index.js
@@ -28,10 +28,10 @@ function extend(Y) {
       this.webrtc = new LioWebRTC({
         url: this.webrtcOptions.url,
         dataOnly: true,
-        /*network: {
+        constraints: {
           minPeers: 4,
           maxPeers: 8,
-        },*/
+        },
       })
 
       this.peers = new Set()
@@ -47,6 +47,8 @@ function extend(Y) {
       this.webrtc.on("channelOpen", (dataChannel, peer) => {
         this.checkAndEnsureUser()
 
+        console.log("dataChannel", dataChannel)
+
         // Start a handshake to ensure both sides are able to use the channel
         function handshake(peer) {
           const _peer = this.webrtc.getPeerById(peer.id)
@@ -73,14 +75,18 @@ function extend(Y) {
       this.webrtc.on("receivedPeerData", (type, message, peer) => {
         this.checkAndEnsureUser()
 
+        // Message could have been forwarded but yjs only needs to know about directly connected peers
+        const peerId = peer.forwardedBy ? peer.forwardedBy.id : peer.id
+
         if (message.type !== "update") {
-          console.log("receivedData", peer.id, message)
+          console.log("receivedData", peerId, message)
         }
 
         if (type === "y-js") {
-          this.checkAndInsertPeer(peer.id)
-          this.receiveMessage(peer.id, message)
-        } else if (type === "tw-ml") {
+          this.checkAndInsertPeer(peerId)
+          this.receiveMessage(peerId, message)
+        } else if (type === "tw-ml" && !peer.forwardedBy) {
+          // Handshakes can only be sent and received directly
           if (message === "tw") {
             // Response message in the handshake
             this.webrtc.whisper(peer, "tw-ml", "ml")