diff --git a/bigbluebutton-html5/imports/api/cursor/server/handlers/cursorUpdate.js b/bigbluebutton-html5/imports/api/cursor/server/handlers/cursorUpdate.js
index 2e4b1c3ab3cbd219e7f04cd4c1fbff1d4a5b5f70..2e094fb1cf52696469f52ad44b5c2162f58d1ad1 100755
--- a/bigbluebutton-html5/imports/api/cursor/server/handlers/cursorUpdate.js
+++ b/bigbluebutton-html5/imports/api/cursor/server/handlers/cursorUpdate.js
@@ -1,24 +1,33 @@
 import { check } from 'meteor/check';
 import CursorStreamer from '/imports/api/cursor/server/streamer';
+import Logger from '/imports/startup/server/logger';
+
+
+const { streamerLog } = Meteor.settings.private.serverLog;
 
 const CURSOR_PROCCESS_INTERVAL = 30;
 
-let cursorQueue = [];
-let cursorRecieverIsRunning = false;
+let cursorQueue = {};
+let cursorReceiverIsRunning = false;
 
 const proccess = () => {
   if (!Object.keys(cursorQueue).length) {
-    cursorRecieverIsRunning = false;
+    cursorReceiverIsRunning = false;
     return;
   }
-  cursorRecieverIsRunning = true;
-
-  Object.keys(cursorQueue).forEach((meetingId) => {
-    CursorStreamer(meetingId).emit('message', { meetingId, cursors: cursorQueue[meetingId] });
-  });
-  cursorQueue = {};
-
-  Meteor.setTimeout(proccess, CURSOR_PROCCESS_INTERVAL);
+  cursorReceiverIsRunning = true;
+
+  try {
+    Object.keys(cursorQueue).forEach((meetingId) => {
+      CursorStreamer(meetingId).emit('message', { meetingId, cursors: cursorQueue[meetingId] });
+    });
+    cursorQueue = {};
+
+    Meteor.setTimeout(proccess, CURSOR_PROCCESS_INTERVAL);
+  } catch (error) {
+    Logger.error(`Error while trying to send cursor streamer data. ${error}`);
+    cursorReceiverIsRunning = false;
+  }
 };
 
 export default function handleCursorUpdate({ header, body }, meetingId) {
@@ -31,7 +40,12 @@ export default function handleCursorUpdate({ header, body }, meetingId) {
   if (!cursorQueue.hasOwnProperty(meetingId)) {
     cursorQueue[meetingId] = {};
   }
+
+  if (streamerLog) {
+    Logger.debug(`CursorUpdate process for meeting ${meetingId} is running: ${cursorReceiverIsRunning}`);
+  }
+
   // overwrite since we dont care about the other positions
   cursorQueue[meetingId][userId] = body;
-  if (!cursorRecieverIsRunning) proccess();
+  if (!cursorReceiverIsRunning) proccess();
 }
diff --git a/bigbluebutton-html5/imports/api/cursor/server/streamer.js b/bigbluebutton-html5/imports/api/cursor/server/streamer.js
index 5ae5ed6e66622eb89307f81bee59515139d0e500..4c3218960b71813ef6b108f3fb04f9d5c9a7d95d 100644
--- a/bigbluebutton-html5/imports/api/cursor/server/streamer.js
+++ b/bigbluebutton-html5/imports/api/cursor/server/streamer.js
@@ -1,6 +1,8 @@
 import Logger from '/imports/startup/server/logger';
 import publishCursorUpdate from './methods/publishCursorUpdate';
 
+const { streamerLog } = Meteor.settings.private.serverLog;
+
 export function removeCursorStreamer(meetingId) {
   Logger.info(`Removing Cursor streamer object for meeting ${meetingId}`);
   delete Meteor.StreamerCentral.instances[`cursor-${meetingId}`];
@@ -8,8 +10,14 @@ export function removeCursorStreamer(meetingId) {
 
 export function addCursorStreamer(meetingId) {
   const streamer = new Meteor.Streamer(`cursor-${meetingId}`, { retransmit: false });
+  if (streamerLog) {
+    Logger.debug(`Cursor streamer created for meeting ${meetingId}`);
+  }
 
   streamer.allowRead(function allowRead() {
+    if (streamerLog) {
+      Logger.debug(`Cursor streamer called allowRead for user ${this.userId} in meeting ${meetingId}`);
+    }
     return this.userId && this.userId.includes(meetingId);
   });
 
diff --git a/bigbluebutton-html5/imports/ui/components/cursor/service.js b/bigbluebutton-html5/imports/ui/components/cursor/service.js
index 5d5e9f7f1458ea8cb9ecb87fff0cb14158a07434..56746d56e6cef74e63637443b2922a59753ba51b 100755
--- a/bigbluebutton-html5/imports/ui/components/cursor/service.js
+++ b/bigbluebutton-html5/imports/ui/components/cursor/service.js
@@ -1,5 +1,6 @@
 import Auth from '/imports/ui/services/auth';
 import { throttle } from 'lodash';
+import logger from '/imports/startup/client/logger';
 
 const Cursor = new Mongo.Collection(null);
 let cursorStreamListener = null;
@@ -34,9 +35,17 @@ export function publishCursorUpdate(payload) {
 }
 
 export function initCursorStreamListener() {
+  logger.debug({
+    logCode: 'init_cursor_stream_listener',
+  }, 'initCursorStreamListener called');
+
   if (!cursorStreamListener) {
     cursorStreamListener = new Meteor.Streamer(`cursor-${Auth.meetingID}`, { retransmit: false });
 
+    logger.debug({
+      logCode: 'init_cursor_stream_listener',
+    }, 'initCursorStreamListener called');
+
     cursorStreamListener.on('message', ({ cursors }) => {
       Object.keys(cursors).forEach((userId) => {
         if (Auth.userID === userId) return;
diff --git a/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx b/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx
index b9ef128011f292e5db7f2d3ad761cdfad18f1946..554b05d940856fc72c6096201f94a4cdeae1cfb8 100755
--- a/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/subscriptions/component.jsx
@@ -95,6 +95,7 @@ export default withTracker(() => {
     Meteor.subscribe('users', credentials, userIsModerator, subscriptionErrorHandler);
     Meteor.subscribe('breakouts', credentials, userIsModerator, subscriptionErrorHandler);
     Meteor.subscribe('meetings', credentials, userIsModerator, subscriptionErrorHandler);
+    logger.debug({ logCode: 'startup_client_subscription_init_streamers', extraInfo: { role: User.role } }, 'Calling init streamers functions');
     initAnnotationsStreamListener();
     initCursorStreamListener();
   }
diff --git a/bigbluebutton-html5/private/config/settings.yml b/bigbluebutton-html5/private/config/settings.yml
index 9b910f74c0ffde8c9c0fd039ed01f504c568a193..2ae195c99be606cbdaea9e56cfa2abb0db3c7b15 100755
--- a/bigbluebutton-html5/private/config/settings.yml
+++ b/bigbluebutton-html5/private/config/settings.yml
@@ -338,6 +338,7 @@ private:
     - DoLatencyTracerMsg
   serverLog:
     level: info
+    streamerLog: false
   memoryMonitoring:
     stat:
       enabled: false