diff --git a/labs/bbb-webrtc-sfu/lib/video/VideoManager.js b/labs/bbb-webrtc-sfu/lib/video/VideoManager.js
index 7796972786f18ac247d14f751ab5a85ac235ec05..722cf5acd3450cf2598b8228931fd822a9f5767a 100755
--- a/labs/bbb-webrtc-sfu/lib/video/VideoManager.js
+++ b/labs/bbb-webrtc-sfu/lib/video/VideoManager.js
@@ -31,35 +31,34 @@ var _onMessage = function (_message) {
   let role = message.role? message.role : 'any';
   let cameraId = message.cameraId;
   let shared = false;
-  let iceQueue = {};
+  let iceQueues = {};
+  let iceQueue;
 
-  if (message.role == 'share') {
+  if (typeof message.cameraId === 'undefined' || !message.cameraId) {
+    console.log("  [VideoManager] Undefined message.cameraId for session ", sessionId);
+    return;
+  }
+
+  if (message.role === 'share') {
     shared = true;
+    cameraId += '-shared';
   }
 
   if (!sessions[sessionId]) {
     sessions[sessionId] = {};
   }
 
-  switch (role) {
-    case 'share':
-      if (message.cameraId && typeof sessions[sessionId][message.cameraId+'-shared'] !== 'undefined' &&  sessions[sessionId][message.cameraId+'-shared']) {
-        video = sessions[sessionId][message.cameraId+'-shared'];
-      }
-      break;
-    case 'viewer':
-      if (message.cameraId && sessions[sessionId][message.cameraId]) {
-        video = sessions[sessionId][message.cameraId];
-      }
-    case 'any':
-      if (message.cameraId && typeof sessions[sessionId][message.cameraId+'-shared'] !== 'undefined' &&  sessions[sessionId][message.cameraId+'-shared']) {
-        video = sessions[sessionId][message.cameraId+'-shared'];
-      }
-      else if (message.cameraId && sessions[sessionId][message.cameraId]) {
-        video = sessions[sessionId][message.cameraId];
-      }
+  if (!iceQueues[sessionId]) {
+      iceQueues[sessionId] = {};
+  }
 
-      break;
+  if (typeof sessions[sessionId][cameraId] !== 'undefined' &&  sessions[sessionId][cameraId]) {
+    video = sessions[sessionId][cameraId];
+  }
+
+  if (typeof iceQueues[sessionId][cameraId] !== 'undefined' &&
+      iceQueues[sessionId][cameraId]) {
+    iceQueue = iceQueues[sessionId][cameraId] ;
   }
 
   switch (message.id) {
@@ -69,22 +68,14 @@ var _onMessage = function (_message) {
       video = new Video(bbbGW, message.cameraId, shared, message.connectionId);
 
       // Empty ice queue after starting video
-      if (iceQueue[message.cameraId]) {
+      if (iceQueue) {
         let candidate;
-        while(candidate = iceQueue[message.cameraId].pop()) {
+        while(candidate = iceQueue.pop()) {
           video.onIceCandidate(cand);
         }
       }
 
-      switch (role) {
-        case 'share':
-          sessions[sessionId][message.cameraId+'-shared']= video;
-          break;
-        case 'viewer':
-          sessions[sessionId][message.cameraId] = video;
-          break;
-        default: console.log(" [VideoManager] Unknown role? ", role);
-      }
+      sessions[sessionId][cameraId] = video;
 
       video.start(message.sdpOffer, (error, sdpAnswer) => {
         if (error) {
@@ -115,7 +106,7 @@ var _onMessage = function (_message) {
       console.log('[' + message.id + '] connection ' + sessionId + " with message => " + JSON.stringify(message, null, 2));
 
       if (video) {
-        stopVideo(sessionId, role, cameraId);
+        stopVideo(sessionId, role, message.cameraId);
       } else {
         console.log(" [stop] Why is there no video on STOP?");
       }
@@ -126,12 +117,13 @@ var _onMessage = function (_message) {
       if (video) {
         video.onIceCandidate(message.candidate);
       } else {
-        console.log(" [iceCandidate] Queueing ice candidate for later in video " + message.cameraId);
-
-        if (!iceQueue[message.cameraId]) {
-          iceQueue[message.cameraId] = [];
+        console.log(" [iceCandidate] Queueing ice candidate for later in video " + cameraId);
+        if (typeof iceQueue === 'undefined' || !iceQueue) {
+          iceQueues[sessionId][cameraId] = [];
+          iceQueue = iceQueues[sessionId][cameraId];
         }
-        iceQueue[message.cameraId].push(message.candidate);
+
+        iceQueue.push(message.candidate);
       }
       break;
 
diff --git a/labs/bbb-webrtc-sfu/lib/video/video.js b/labs/bbb-webrtc-sfu/lib/video/video.js
index b99077321b18855d86db5ecc5301aa09af7cc744..48b3f1577b6c02c65faa7deaa63a8f665c6e9e8b 100644
--- a/labs/bbb-webrtc-sfu/lib/video/video.js
+++ b/labs/bbb-webrtc-sfu/lib/video/video.js
@@ -23,6 +23,7 @@ module.exports = class Video {
     this.role = this.shared? 'share' : 'view'
     this.webRtcEndpoint = null;
     this.mediaId = null;
+    this.iceQueue = null;
 
     this.candidatesQueue = [];
   }