diff --git a/package.json b/package.json
index 9c69de0390612455f6240bf4faf7cb1dd20b9658..dcb2e98c7758e6cff3739230338e57555dcf130f 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
     "extract-text-webpack-plugin": "^3.0.2",
     "material-design-lite": "^1.3.0",
     "minijanus": "^0.4.0",
-    "naf-janus-adapter": "^0.1.10",
+    "naf-janus-adapter": "^0.3.0",
     "networked-aframe": "https://github.com/netpro2k/networked-aframe#bugfix/chrome/audio",
     "nipplejs": "^0.6.7",
     "query-string": "^5.0.1",
diff --git a/src/lobby.js b/src/lobby.js
index 474b64e985f7f1be13f3248c4a6ec0e6da5f6f58..f6e77536f32b81e8438be802f4c076b2e38acf29 100644
--- a/src/lobby.js
+++ b/src/lobby.js
@@ -62,8 +62,7 @@ class Lobby extends React.Component {
   }
 
   onWebsocketMessage(event) {
-    var message = JSON.parse(event.data);
-    this.session.receive(message);
+    this.session.receive(JSON.parse(event.data));
   }
 
   render() {
diff --git a/src/room.js b/src/room.js
index 7332e61ea42b323d64b075bab6c30e105f51fd73..27391be4592b216a4a2aea2f72f799d528b39848 100644
--- a/src/room.js
+++ b/src/room.js
@@ -58,12 +58,19 @@ AFRAME.registerInputMappings(config);
 registerNetworkSchemas();
 registerTelemetry();
 
-function shareScreen() {
-  const track = NAF.connection.adapter.localMediaStream.getVideoTracks()[0];
+async function shareMedia(audio, video) {
+  const constraints = {
+    audio: !!audio,
+    video: video ? { mediaSource: "screen", height: 720, frameRate: 30 } : false
+  };
+  const mediaStream = await navigator.mediaDevices.getUserMedia(constraints);
+  NAF.connection.adapter.setLocalMediaStream(mediaStream);
 
   const id = `${NAF.clientId}-screen`;
   let entity = document.getElementById(id);
-  if (!entity) {
+  if (entity) {
+    entity.setAttribute("visible", !!video);
+  } else if (video) {
     const sceneEl = document.querySelector("a-scene");
     entity = document.createElement("a-entity");
     entity.id = id;
@@ -75,12 +82,10 @@ function shareScreen() {
     entity.setAttribute("networked", { template: "#video-template" });
     sceneEl.appendChild(entity);
   }
-
-  track.enabled = !track.enabled;
-  entity.setAttribute("visible", track.enabled);
 }
 
 window.App = {
+
   async onSceneLoad() {
     const qs = queryString.parse(location.search);
     const scene = document.querySelector("a-scene");
@@ -119,31 +124,20 @@ window.App = {
     const myNametag = document.querySelector("#player-rig .nametag");
     myNametag.setAttribute("text", "value", username);
 
-    scene.addEventListener("action_share_screen", shareScreen);
-
-    const mediaStream = await navigator.mediaDevices.getUserMedia({
-      audio: true,
-      video:
-        qs.screen === "true"
-          ? { mediaSource: "screen", height: 720, frameRate: 30 }
-          : false
+    var sharingScreen = false;
+    scene.addEventListener("action_share_screen", () => {
+      sharingScreen = !sharingScreen;
+      shareMedia(true, sharingScreen);
     });
 
-    // Don't send video by deafult
-    const videoTracks = mediaStream.getVideoTracks();
-    if (videoTracks.length) {
-      videoTracks[0].enabled = false;
-    }
-
     if (qs.offline) {
       App.onConnect();
     } else {
-      scene.components["networked-scene"].connect();
+      document.body.addEventListener("connected", App.onConnect);
 
-      // @TODO ideally the adapter should exist before connect, but it currently doesnt so we have to do this after calling connect. This might be a race condition in other adapters.
-      NAF.connection.adapter.setLocalMediaStream(mediaStream);
+      scene.components["networked-scene"].connect();
 
-      document.body.addEventListener("connected", App.onConnect);
+      await shareMedia(true, sharingScreen);
     }
   },
 
diff --git a/yarn.lock b/yarn.lock
index 98bed6882c3b58ebdde1d86e4180ca0dc712f68e..4b4c59f2f3e1251ece4f3490874f5ffa99b85f4f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3686,10 +3686,6 @@ min-document@^2.19.0:
   dependencies:
     dom-walk "^0.1.0"
 
-minijanus@^0.1.6:
-  version "0.1.7"
-  resolved "https://registry.yarnpkg.com/minijanus/-/minijanus-0.1.7.tgz#a4aba659e0fc46127450aa440b32de82c6cc46b9"
-
 minijanus@^0.4.0:
   version "0.4.0"
   resolved "https://registry.yarnpkg.com/minijanus/-/minijanus-0.4.0.tgz#4d08529da795886b1aab6714ee7c9ff122c8c802"
@@ -3794,12 +3790,12 @@ mv@^2.1.1:
     ncp "~2.0.0"
     rimraf "~2.4.0"
 
-naf-janus-adapter@^0.1.10:
-  version "0.1.10"
-  resolved "https://registry.yarnpkg.com/naf-janus-adapter/-/naf-janus-adapter-0.1.10.tgz#322d5eeccefc5078da7e4355537d739bbb167794"
+naf-janus-adapter@^0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/naf-janus-adapter/-/naf-janus-adapter-0.3.0.tgz#fee55fe0f4724238da5f87fbb0e7f75cd522905e"
   dependencies:
     debug "^3.1.0"
-    minijanus "^0.1.6"
+    minijanus "^0.4.0"
 
 nan@^2.3.0:
   version "2.8.0"