diff --git a/bigbluebutton-config/bin/apply-lib.sh b/bigbluebutton-config/bin/apply-lib.sh
index 4313d02f3040a91cef7a09be7c03d7a3c7f44f1e..26765caf91760dac44a08dab3c332cbe080b6817 100644
--- a/bigbluebutton-config/bin/apply-lib.sh
+++ b/bigbluebutton-config/bin/apply-lib.sh
@@ -168,7 +168,6 @@ HERE
   mkdir -p /etc/systemd/system/bbb-webrtc-sfu.service.d
   cat > /etc/systemd/system/bbb-webrtc-sfu.service.d/override.conf << HERE
 [Unit]
-After=
 After=syslog.target network.target freeswitch.service kurento-media-server-8888.service kurento-media-server-8889.service kurento-media-server-8890.service
 HERE
 
diff --git a/bigbluebutton-config/bin/bbb-conf b/bigbluebutton-config/bin/bbb-conf
index 123b1b71c533262e580714e6e00df94385f3829c..bd4e7c189f4777db91fe45f526b0ccc64d074742 100755
--- a/bigbluebutton-config/bin/bbb-conf
+++ b/bigbluebutton-config/bin/bbb-conf
@@ -798,7 +798,7 @@ check_configuration() {
        echo
     fi
 
-    if ! which ufw; then
+    if ! which ufw > /dev/null 2>&1; then
        echo
        echo "# Warning: No firewall detected.  Recommend using setting up a firewall for your server"
        echo "#"
diff --git a/bigbluebutton-config/bin/bbb-record b/bigbluebutton-config/bin/bbb-record
index c94817fe07bb76fd51fbe1271a9eb61f79339ba0..bcc3c4d0639eb1a71343f80ec45a36d2fdb2b0c4 100755
--- a/bigbluebutton-config/bin/bbb-record
+++ b/bigbluebutton-config/bin/bbb-record
@@ -117,7 +117,7 @@ need_root() {
 }
 
 need_root_or_bigbluebutton() {
-	if [ $EUID != 0 -a "$USER" != 'bigbluebutton']; then
+	if [ $EUID != 0 -a "$USER" != 'bigbluebutton' ]; then
 		echo "Need to be user root or bigbluebutton to run this option"
       exit 1
    fi
diff --git a/bigbluebutton-html5/imports/api/annotations/server/modifiers/addAnnotation.js b/bigbluebutton-html5/imports/api/annotations/server/modifiers/addAnnotation.js
index 3cc9a972a52483ffa05ec231bde3871e497b5096..4503da40b7fa3de1a1500a434ad3cd2b9dd23c51 100755
--- a/bigbluebutton-html5/imports/api/annotations/server/modifiers/addAnnotation.js
+++ b/bigbluebutton-html5/imports/api/annotations/server/modifiers/addAnnotation.js
@@ -10,17 +10,13 @@ export default function addAnnotation(meetingId, whiteboardId, userId, annotatio
 
   const query = addAnnotationQuery(meetingId, whiteboardId, userId, annotation);
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Adding annotation to collection: ${err}`);
-    }
+  try {
+    const { insertedId } = Annotations.upsert(query.selector, query.modifier);
 
-    const { insertedId } = numChanged;
     if (insertedId) {
-      return Logger.info(`Added annotation id=${annotation.id} whiteboard=${whiteboardId}`);
+      Logger.info(`Added annotation id=${annotation.id} whiteboard=${whiteboardId}`);
     }
-    return true;
-  };
-
-  return Annotations.upsert(query.selector, query.modifier, cb);
+  } catch (err) {
+    Logger.error(`Adding annotation to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/annotations/server/modifiers/clearAnnotations.js b/bigbluebutton-html5/imports/api/annotations/server/modifiers/clearAnnotations.js
index c8af5d888c7ac81a2a13c0e39a53d8dcd486562a..aafc9dbd1739cf8e6517697f5bb5d3ea8360edc2 100644
--- a/bigbluebutton-html5/imports/api/annotations/server/modifiers/clearAnnotations.js
+++ b/bigbluebutton-html5/imports/api/annotations/server/modifiers/clearAnnotations.js
@@ -16,25 +16,28 @@ export default function clearAnnotations(meetingId, whiteboardId, userId) {
     selector.userId = userId;
   }
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Removing Annotations from collection: ${err}`);
+  try {
+    const numberAffected = Annotations.remove(selector);
+
+    if (numberAffected) {
+      if (userId) {
+        Logger.info(`Cleared Annotations for userId=${userId} where whiteboard=${whiteboardId}`);
+        return;
+      }
+
+      if (whiteboardId) {
+        Logger.info(`Cleared Annotations for whiteboard=${whiteboardId}`);
+        return;
+      }
+
+      if (meetingId) {
+        Logger.info(`Cleared Annotations (${meetingId})`);
+        return;
+      }
+
+      Logger.info('Cleared Annotations (all)');
     }
-
-    if (userId) {
-      return Logger.info(`Cleared Annotations for userId=${userId} where whiteboard=${whiteboardId}`);
-    }
-
-    if (whiteboardId) {
-      return Logger.info(`Cleared Annotations for whiteboard=${whiteboardId}`);
-    }
-
-    if (meetingId) {
-      return Logger.info(`Cleared Annotations (${meetingId})`);
-    }
-
-    return Logger.info('Cleared Annotations (all)');
-  };
-
-  return Annotations.remove(selector, cb);
+  } catch (err) {
+    Logger.error(`Removing Annotations from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/annotations/server/modifiers/removeAnnotation.js b/bigbluebutton-html5/imports/api/annotations/server/modifiers/removeAnnotation.js
index 44d69397ee41c421f7c9eb7372e2e94df19126a9..fcdf337fa2ae62516e3c06c12fda1088a19be7c9 100644
--- a/bigbluebutton-html5/imports/api/annotations/server/modifiers/removeAnnotation.js
+++ b/bigbluebutton-html5/imports/api/annotations/server/modifiers/removeAnnotation.js
@@ -13,13 +13,13 @@ export default function removeAnnotation(meetingId, whiteboardId, shapeId) {
     id: shapeId,
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Removing annotation from collection: ${err}`);
-    }
-
-    return Logger.info(`Removed annotation id=${shapeId} whiteboard=${whiteboardId}`);
-  };
+  try {
+    const numberAffected = Annotations.remove(selector);
 
-  return Annotations.remove(selector, cb);
+    if (numberAffected) {
+      Logger.info(`Removed annotation id=${shapeId} whiteboard=${whiteboardId}`);
+    }
+  } catch (err) {
+    Logger.error(`Removing annotation from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js
index 720e88586a9b78e9c619601ad86d8247cdaad2be..8593519d72afeacc6a501ab11df7df4b22b43d35 100755
--- a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js
+++ b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js
@@ -180,18 +180,13 @@ class SIPSession {
       }, CALL_TRANSFER_TIMEOUT);
 
       // This is is the call transfer code ask @chadpilkey
-      if (this.sessionSupportRTPPayloadDtmf(this.currentSession)) {
-        this.currentSession.sessionDescriptionHandler.sendDtmf(1);
-      } else {
-        // RFC4733 not supported , sending DTMF through INFO
-        logger.debug({
-          logCode: 'sip_js_rtp_payload_dtmf_not_supported',
-          extraInfo: {
-            callerIdName: this.user.callerIdName,
-          },
-        }, 'Browser do not support payload dtmf, using INFO instead');
-        this.sendDtmf(1);
-      }
+      logger.debug({
+        logCode: 'sip_js_rtp_payload_send_dtmf',
+        extraInfo: {
+          callerIdName: this.user.callerIdName,
+        },
+      }, 'Sending DTMF INFO to transfer user');
+      this.sendDtmf(1);
 
       Tracker.autorun((c) => {
         trackerControl = c;
@@ -401,7 +396,6 @@ class SIPSession {
           let bridgeError;
 
           if (!this._reconnecting) {
-
             logger.info({
               logCode: 'sip_js_session_ua_disconnected',
               extraInfo: {
@@ -470,7 +464,7 @@ class SIPSession {
 
         const code = getErrorCode(error);
 
-        //Websocket's 1006 is currently mapped to BBB's 1002
+        // Websocket's 1006 is currently mapped to BBB's 1002
         if (code === 1006) {
           this.stopUserAgent();
 
@@ -955,7 +949,7 @@ export default class SIPBridge extends BaseAudioBridge {
     window.clientLogger = logger;
   }
 
-  get inputDeviceId () {
+  get inputDeviceId() {
     return this.media.inputDevice ? this.media.inputDevice.inputDeviceId : null;
   }
 
diff --git a/bigbluebutton-html5/imports/api/breakouts/server/handlers/breakoutJoinURL.js b/bigbluebutton-html5/imports/api/breakouts/server/handlers/breakoutJoinURL.js
index 0b4e593134e900035ffa8793aa0070c021e14bf2..06ccb21d5b772d1c91f98ece73af28c7e7e49c75 100644
--- a/bigbluebutton-html5/imports/api/breakouts/server/handlers/breakoutJoinURL.js
+++ b/bigbluebutton-html5/imports/api/breakouts/server/handlers/breakoutJoinURL.js
@@ -25,20 +25,15 @@ export default function handleBreakoutJoinURL({ body }) {
     },
   };
 
-  const cb = (cbErr, numChanged) => {
-    if (cbErr) {
-      return Logger.error(`Adding breakout to collection: ${cbErr}`);
-    }
+  try {
+    const { insertedId, numberAffected } = Breakouts.upsert(selector, modifier);
 
-    const {
-      insertedId,
-    } = numChanged;
     if (insertedId) {
-      return Logger.info(`Added breakout id=${breakoutId}`);
+      Logger.info(`Added breakout id=${breakoutId}`);
+    } else if (numberAffected) {
+      Logger.info(`Upserted breakout id=${breakoutId}`);
     }
-
-    return Logger.info(`Upserted breakout id=${breakoutId}`);
-  };
-
-  return Breakouts.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Adding breakout to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/breakouts/server/handlers/breakoutStarted.js b/bigbluebutton-html5/imports/api/breakouts/server/handlers/breakoutStarted.js
index 5b005073694163615d331331270b3b72bf814cb0..8b755e23bd98f1c92e2f315866ccd2909ef11ca8 100644
--- a/bigbluebutton-html5/imports/api/breakouts/server/handlers/breakoutStarted.js
+++ b/bigbluebutton-html5/imports/api/breakouts/server/handlers/breakoutStarted.js
@@ -32,14 +32,14 @@ export default function handleBreakoutRoomStarted({ body }, meetingId) {
     ),
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`updating breakout: ${err}`);
-    }
-
-    return Logger.info('Updated timeRemaining and externalMeetingId '
-      + `for breakout id=${breakoutId}`);
-  };
+  try {
+    const { numberAffected } = Breakouts.upsert(selector, modifier);
 
-  return Breakouts.upsert(selector, modifier, cb);
+    if (numberAffected) {
+      Logger.info('Updated timeRemaining and externalMeetingId '
+        + `for breakout id=${breakoutId}`);
+    }
+  } catch (err) {
+    Logger.error(`updating breakout: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/breakouts/server/handlers/joinedUsersChanged.js b/bigbluebutton-html5/imports/api/breakouts/server/handlers/joinedUsersChanged.js
index f585d65e40acdb31b5ec2ecd16dfe57b0779600c..4918a3b8ac30e1dd68813e64d24f02888c665f1b 100644
--- a/bigbluebutton-html5/imports/api/breakouts/server/handlers/joinedUsersChanged.js
+++ b/bigbluebutton-html5/imports/api/breakouts/server/handlers/joinedUsersChanged.js
@@ -27,15 +27,13 @@ export default function joinedUsersChanged({ body }) {
     },
   };
 
+  try {
+    const numberAffected = Breakouts.update(selector, modifier);
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`updating joined users in breakout: ${err}`);
+    if (numberAffected) {
+      Logger.info(`Updated joined users in breakout id=${breakoutId}`);
     }
-
-    return Logger.info('Updated joined users '
-      + `in breakout id=${breakoutId}`);
-  };
-  Breakouts.find(selector);
-  Breakouts.update(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`updating joined users in breakout: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/breakouts/server/handlers/updateTimeRemaining.js b/bigbluebutton-html5/imports/api/breakouts/server/handlers/updateTimeRemaining.js
index f26a35a449c5cdea96b12366b0963278a1a73bae..02c4d9808de11b652b5de0425efb65810b184bf3 100644
--- a/bigbluebutton-html5/imports/api/breakouts/server/handlers/updateTimeRemaining.js
+++ b/bigbluebutton-html5/imports/api/breakouts/server/handlers/updateTimeRemaining.js
@@ -24,14 +24,13 @@ export default function handleUpdateTimeRemaining({ body }, meetingId) {
     multi: true,
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Updating breakouts: ${err}`);
-    }
-
-    return Logger.info('Updated breakout time remaining for breakouts ' +
-      `where parentMeetingId=${meetingId}`);
-  };
+  try {
+    const numberAffected = Breakouts.update(selector, modifier, options);
 
-  return Breakouts.update(selector, modifier, options, cb);
+    if (numberAffected) {
+      Logger.info(`Updated breakout time remaining for breakouts where parentMeetingId=${meetingId}`);
+    }
+  } catch (err) {
+    Logger.error(`Updating breakouts: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/breakouts/server/methods/createBreakout.js b/bigbluebutton-html5/imports/api/breakouts/server/methods/createBreakout.js
index 315ce25e254efa16253cc0a873eedb37d9efe99a..9ab4adf57c20842b51c2b45b780f0165b38c4b77 100644
--- a/bigbluebutton-html5/imports/api/breakouts/server/methods/createBreakout.js
+++ b/bigbluebutton-html5/imports/api/breakouts/server/methods/createBreakout.js
@@ -13,7 +13,10 @@ export default function createBreakoutRoom(rooms, durationInMinutes, record = fa
   const { meetingId, requesterUserId } = extractCredentials(this.userId);
 
   const eventName = 'CreateBreakoutRoomsCmdMsg';
-  if (rooms.length > MAX_BREAKOUT_ROOMS) return Logger.info(`Attempt to create breakout rooms with invalid number of rooms in meeting id=${meetingId}`);
+  if (rooms.length > MAX_BREAKOUT_ROOMS) {
+    Logger.info(`Attempt to create breakout rooms with invalid number of rooms in meeting id=${meetingId}`);
+    return;
+  }
   const payload = {
     record,
     durationInMinutes,
diff --git a/bigbluebutton-html5/imports/api/breakouts/server/modifiers/clearBreakouts.js b/bigbluebutton-html5/imports/api/breakouts/server/modifiers/clearBreakouts.js
index 21fd266fcec2b346c8de8fe6f782e31efe75ef82..f9640ca80d77c07c7a56a1c82f7e88a9dd4d82b4 100644
--- a/bigbluebutton-html5/imports/api/breakouts/server/modifiers/clearBreakouts.js
+++ b/bigbluebutton-html5/imports/api/breakouts/server/modifiers/clearBreakouts.js
@@ -7,12 +7,23 @@ export default function clearBreakouts(breakoutId) {
       breakoutId,
     };
 
-    return Breakouts.remove(selector, () => {
-      Logger.info(`Cleared Breakouts (${breakoutId})`);
-    });
-  }
+    try {
+      const numberAffected = Breakouts.remove(selector);
 
-  return Breakouts.remove({}, () => {
-    Logger.info('Cleared Breakouts (all)');
-  });
+      if (numberAffected) {
+        Logger.info(`Cleared Breakouts (${breakoutId})`);
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing Breakouts (${breakoutId})`);
+    }
+  } else {
+    try {
+      const numberAffected = Breakouts.remove({});
+      if (numberAffected) {
+        Logger.info('Cleared Breakouts (all)');
+      }
+    } catch (err) {
+      Logger.error('Error on clearing Breakouts (all)');
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/captions/server/methods/editCaptions.js b/bigbluebutton-html5/imports/api/captions/server/methods/editCaptions.js
index abc45f294d0b91dab0b973a9ace141bfb41756de..9cd569810209f992f924385c630d53327d62917c 100644
--- a/bigbluebutton-html5/imports/api/captions/server/methods/editCaptions.js
+++ b/bigbluebutton-html5/imports/api/captions/server/methods/editCaptions.js
@@ -16,7 +16,11 @@ export default function editCaptions(padId, data) {
 
   const pad = Captions.findOne({ padId });
 
-  if (!pad) return Logger.error(`Editing captions history: ${padId}`);
+  if (!pad) {
+    Logger.error(`Editing captions history: ${padId}`);
+    return;
+  }
+
 
   const {
     meetingId,
diff --git a/bigbluebutton-html5/imports/api/captions/server/methods/updateOwner.js b/bigbluebutton-html5/imports/api/captions/server/methods/updateOwner.js
index 3608ec308511463fd09d72813e2b33f3cd969175..58ecca6d7723164e333ae1c868ba7e8100639627 100644
--- a/bigbluebutton-html5/imports/api/captions/server/methods/updateOwner.js
+++ b/bigbluebutton-html5/imports/api/captions/server/methods/updateOwner.js
@@ -15,7 +15,10 @@ export default function editCaptions(meetingId, userId, padId) { // TODO
 
   const pad = Captions.findOne({ meetingId, padId });
 
-  if (!pad) return Logger.error(`Editing captions owner: ${padId}`);
+  if (!pad) {
+    Logger.error(`Editing captions owner: ${padId}`);
+    return;
+  }
 
   const { locale } = pad;
 
diff --git a/bigbluebutton-html5/imports/api/captions/server/modifiers/addCaption.js b/bigbluebutton-html5/imports/api/captions/server/modifiers/addCaption.js
index c55bd8040f84662c6112835d6d1c708cc5f96097..03358e7b215e5e240bf17c3c2589b30f1cf69e9d 100644
--- a/bigbluebutton-html5/imports/api/captions/server/modifiers/addCaption.js
+++ b/bigbluebutton-html5/imports/api/captions/server/modifiers/addCaption.js
@@ -26,18 +26,15 @@ export default function addCaption(meetingId, padId, locale) {
     length: 0,
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Adding caption to collection: ${err}`);
-    }
+  try {
+    const { insertedId, numberAffected } = Captions.upsert(selector, modifier);
 
-    const { insertedId } = numChanged;
     if (insertedId) {
-      return Logger.verbose('Captions: added locale', { locale: locale.locale, meetingId });
+      Logger.verbose('Captions: added locale', { locale: locale.locale, meetingId });
+    } else if (numberAffected) {
+      Logger.verbose('Captions: upserted locale', { locale: locale.locale, meetingId });
     }
-
-    return Logger.verbose('Captions: upserted locale', { locale: locale.locale, meetingId });
-  };
-
-  return Captions.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Adding caption to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/captions/server/modifiers/clearCaptions.js b/bigbluebutton-html5/imports/api/captions/server/modifiers/clearCaptions.js
index 06e572114d7cd6ddc3abe27033e35ff004e7d4ed..88fb90cfe24e9dbee4e59d9bada0aac33bc599a1 100644
--- a/bigbluebutton-html5/imports/api/captions/server/modifiers/clearCaptions.js
+++ b/bigbluebutton-html5/imports/api/captions/server/modifiers/clearCaptions.js
@@ -3,12 +3,24 @@ import Logger from '/imports/startup/server/logger';
 
 export default function clearCaptions(meetingId) {
   if (meetingId) {
-    return Captions.remove({ meetingId }, () => {
-      Logger.info(`Cleared Captions (${meetingId})`);
-    });
-  }
+    try {
+      const numberAffected = Captions.remove({ meetingId });
+
+      if (numberAffected) {
+        Logger.info(`Cleared Captions (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing captions (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      const numberAffected = Captions.remove({});
 
-  return Captions.remove({}, () => {
-    Logger.info('Cleared Captions (all)');
-  });
+      if (numberAffected) {
+        Logger.info('Cleared Captions (all)');
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing captions (all). ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/captions/server/modifiers/updateOwnerId.js b/bigbluebutton-html5/imports/api/captions/server/modifiers/updateOwnerId.js
index 2e6b2f80ad6a5d1fa5720c37f4e732136af9b7a3..73329ad9041c4d30bf46ad9b341415ea154eb22b 100644
--- a/bigbluebutton-html5/imports/api/captions/server/modifiers/updateOwnerId.js
+++ b/bigbluebutton-html5/imports/api/captions/server/modifiers/updateOwnerId.js
@@ -19,13 +19,14 @@ export default function updateOwnerId(meetingId, userId, padId) {
     },
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error('Captions: error while updating pad', { err });
-    }
-    updateOwner(meetingId, userId, padId);
-    return Logger.verbose('Captions: updated caption', { padId, ownerId: userId });
-  };
+  try {
+    const numberAffected = Captions.update(selector, modifier, { multi: true });
 
-  return Captions.update(selector, modifier, { multi: true }, cb);
+    if (numberAffected) {
+      updateOwner(meetingId, userId, padId);
+      Logger.verbose('Captions: updated caption', { padId, ownerId: userId });
+    }
+  } catch (err) {
+    Logger.error('Captions: error while updating pad', { err });
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/captions/server/modifiers/updatePad.js b/bigbluebutton-html5/imports/api/captions/server/modifiers/updatePad.js
index dbe609b9fa869350194bcf9c3bebaedc26260e29..b3d3f4cc804603ed85aa4a24e7a085a294dba54c 100644
--- a/bigbluebutton-html5/imports/api/captions/server/modifiers/updatePad.js
+++ b/bigbluebutton-html5/imports/api/captions/server/modifiers/updatePad.js
@@ -22,13 +22,14 @@ export default function updatePad(padId, data, revs) {
     },
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Updating captions pad: ${err}`);
-    }
-    editCaptions(padId, data, revs);
-    return Logger.verbose('Captions: updated pad', { padId, revs });
-  };
+  try {
+    const numberAffected = Captions.update(selector, modifier, { multi: true });
 
-  return Captions.update(selector, modifier, { multi: true }, cb);
+    if (numberAffected) {
+      editCaptions(padId, data, revs);
+      Logger.verbose('Captions: updated pad', { padId, revs });
+    }
+  } catch (err) {
+    Logger.error(`Updating captions pad: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/captions/server/modifiers/updateReadOnlyPadId.js b/bigbluebutton-html5/imports/api/captions/server/modifiers/updateReadOnlyPadId.js
index 8a172ba444e3e8d201dc325b1b734a54a928e12c..8fddb6f814559a1e6a36762d2066c0439a4bc09d 100644
--- a/bigbluebutton-html5/imports/api/captions/server/modifiers/updateReadOnlyPadId.js
+++ b/bigbluebutton-html5/imports/api/captions/server/modifiers/updateReadOnlyPadId.js
@@ -16,13 +16,13 @@ export default function updateReadOnlyPadId(padId, readOnlyPadId) {
     },
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error('Captions: error when adding readOnlyPadId', { err });
-    }
-
-    return Logger.verbose('Captions: added readOnlyPadId', { padId, readOnlyPadId });
-  };
+  try {
+    const numberAffected = Captions.update(selector, modifier, { multi: true });
 
-  return Captions.update(selector, modifier, { multi: true }, cb);
+    if (numberAffected) {
+      Logger.verbose('Captions: added readOnlyPadId', { padId, readOnlyPadId });
+    }
+  } catch (err) {
+    Logger.error('Captions: error when adding readOnlyPadId', { err });
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/cursor/server/handlers/cursorUpdate.js b/bigbluebutton-html5/imports/api/cursor/server/handlers/cursorUpdate.js
index a3e5c2a1b07e5478626fa93ba93208a8724d66c2..6fe89e2c3e9bddc35cd65f67b4ec5e6a8165568d 100755
--- a/bigbluebutton-html5/imports/api/cursor/server/handlers/cursorUpdate.js
+++ b/bigbluebutton-html5/imports/api/cursor/server/handlers/cursorUpdate.js
@@ -17,9 +17,9 @@ const proccess = _.throttle(() => {
         delete cursorQueue[meetingId];
         CursorStreamer(meetingId).emit('message', { meetingId, cursors });
 
-        if (streamerLog) {
-          Logger.debug('CursorUpdate process has finished', { meetingId });
-        }
+        // if (streamerLog) {
+        //   Logger.debug('CursorUpdate process has finished', { meetingId });
+        // }
       } catch (error) {
         Logger.error(`Error while trying to send cursor streamer data for meeting ${meetingId}. ${error}`);
       }
diff --git a/bigbluebutton-html5/imports/api/cursor/server/modifiers/updateCursor.js b/bigbluebutton-html5/imports/api/cursor/server/modifiers/updateCursor.js
index 011144b474c5ad4e1d6392f0c7ce5d20bf256894..562ec58f0f92fe8c9e589d1819fe3ae86f51324d 100644
--- a/bigbluebutton-html5/imports/api/cursor/server/modifiers/updateCursor.js
+++ b/bigbluebutton-html5/imports/api/cursor/server/modifiers/updateCursor.js
@@ -24,21 +24,15 @@ export default function updateCursor(meetingId, whiteboardId, userId, x = -1, y
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Upserting cursor to collection: ${err}`);
-      return;
-    }
+  try {
+    const { insertedId } = Cursor.upsert(selector, modifier);
 
-    const { insertedId } = numChanged;
     if (insertedId) {
       Logger.info(`Initialized cursor meeting=${meetingId}`);
-    }
-
-    if (numChanged) {
+    } else {
       Logger.debug('Updated cursor ', { meetingId });
     }
-  };
-
-  return Cursor.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Upserting cursor to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js b/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js
index 848fae3ebe7d25998cb2b00d0d4e47f1ee87a7b3..2106862339e5af945a28132c02ce05fb56c4d4e2 100644
--- a/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js
+++ b/bigbluebutton-html5/imports/api/external-videos/server/methods/initializeExternalVideo.js
@@ -10,7 +10,9 @@ const allowRecentMessages = (eventName, message) => {
     state,
   } = message;
 
-  Logger.debug('ExternalVideo Streamer auth allowed', userId, meetingId, eventName, time, rate, state);
+  Logger.debug('ExternalVideo Streamer auth allowed', {
+    userId, meetingId, eventName, time, rate, state,
+  });
   return true;
 };
 
@@ -25,6 +27,6 @@ export default function initializeExternalVideo() {
     streamer.allowEmit(allowRecentMessages);
     Logger.info(`Created External Video streamer for ${streamName}`);
   } else {
-    Logger.debug('`External Video streamer is already created', { streamName });
+    Logger.debug('External Video streamer is already created', { streamName });
   }
 }
diff --git a/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/clearGroupChatMsg.js b/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/clearGroupChatMsg.js
index f9cdd35b9e28cdbf5e9221719c4021ce179aed2e..0a295ef9c87419635042ceb5adfb80c6461b83f9 100644
--- a/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/clearGroupChatMsg.js
+++ b/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/clearGroupChatMsg.js
@@ -9,30 +9,48 @@ export default function clearGroupChatMsg(meetingId, chatId) {
   const CHAT_CLEAR_MESSAGE = CHAT_CONFIG.system_messages_keys.chat_clear;
 
   if (chatId) {
-    GroupChatMsg.remove({ meetingId, chatId }, () => {
-      Logger.info(`Cleared GroupChatMsg (${meetingId}, ${chatId})`);
-      const clearMsg = {
-        color: '0',
-        timestamp: Date.now(),
-        correlationId: `${PUBLIC_CHAT_SYSTEM_ID}-${Date.now()}`,
-        sender: {
-          id: PUBLIC_CHAT_SYSTEM_ID,
-          name: '',
-        },
-        message: CHAT_CLEAR_MESSAGE,
-      };
-      addGroupChatMsg(meetingId, PUBLIC_GROUP_CHAT_ID, clearMsg);
-    });
+    try {
+      const numberAffected = GroupChatMsg.remove({ meetingId, chatId });
+
+      if (numberAffected) {
+        Logger.info(`Cleared GroupChatMsg (${meetingId}, ${chatId})`);
+        const clearMsg = {
+          color: '0',
+          timestamp: Date.now(),
+          correlationId: `${PUBLIC_CHAT_SYSTEM_ID}-${Date.now()}`,
+          sender: {
+            id: PUBLIC_CHAT_SYSTEM_ID,
+            name: '',
+          },
+          message: CHAT_CLEAR_MESSAGE,
+        };
+        addGroupChatMsg(meetingId, PUBLIC_GROUP_CHAT_ID, clearMsg);
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing GroupChat (${meetingId}, ${chatId}). ${err}`);
+    }
     return true;
   }
 
   if (meetingId) {
-    return GroupChatMsg.remove({ meetingId }, () => {
-      Logger.info(`Cleared GroupChatMsg (${meetingId})`);
-    });
-  }
+    try {
+      const numberAffected = GroupChatMsg.remove({ meetingId });
 
-  return GroupChatMsg.remove({ chatId: { $eq: PUBLIC_GROUP_CHAT_ID } }, () => {
-    Logger.info('Cleared GroupChatMsg (all)');
-  });
+      if (numberAffected) {
+        Logger.info(`Cleared GroupChatMsg (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing GroupChatMsg (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      const numberAffected = GroupChatMsg.remove({ chatId: { $eq: PUBLIC_GROUP_CHAT_ID } });
+
+      if (numberAffected) {
+        Logger.info('Cleared GroupChatMsg (all)');
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing GroupChatMsg (all). ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/removeGroupChat.js b/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/removeGroupChatMsg.js
similarity index 55%
rename from bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/removeGroupChat.js
rename to bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/removeGroupChatMsg.js
index 8166246159c7bec753a588dc1662ef70d5724002..d8a5f7c699c5c93dafab223404b41a387c404e17 100644
--- a/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/removeGroupChat.js
+++ b/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/removeGroupChatMsg.js
@@ -2,7 +2,7 @@ import { check } from 'meteor/check';
 import Logger from '/imports/startup/server/logger';
 import GroupChatMsg from '/imports/api/group-chat-msg';
 
-export default function removeGroupChat(meetingId, chatId) {
+export default function removeGroupChatMsg(meetingId, chatId) {
   check(meetingId, String);
   check(chatId, String);
 
@@ -11,16 +11,13 @@ export default function removeGroupChat(meetingId, chatId) {
     meetingId,
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Removing group-chat-msg from collection: ${err}`);
-      return;
-    }
+  try {
+    const numberAffected = GroupChatMsg.remove(selector);
 
-    if (numChanged) {
+    if (numberAffected) {
       Logger.info(`Removed group-chat-msg id=${chatId} meeting=${meetingId}`);
     }
-  };
-
-  return GroupChatMsg.remove(selector, cb);
+  } catch (err) {
+    Logger.error(`Removing group-chat-msg from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/startTyping.js b/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/startTyping.js
index c15ad90f2edf92efdcab799506973a652956dfe3..494fb95677c42a168b47e09bc532ee0266e2adcf 100644
--- a/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/startTyping.js
+++ b/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/startTyping.js
@@ -17,7 +17,7 @@ export default function startTyping(meetingId, userId, chatId) {
 
   const user = Users.findOne(selector);
 
-  const mod = {
+  const modifier = {
     meetingId,
     userId,
     name: user.name,
@@ -33,19 +33,19 @@ export default function startTyping(meetingId, userId, chatId) {
   });
 
   if (typingUser) {
-    if (mod.time - typingUser.time <= TYPING_TIMEOUT - 100) return;
+    if (modifier.time - typingUser.time <= TYPING_TIMEOUT - 100) return;
   }
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Typing indicator update error: ${err}`);
-    }
-
-    Meteor.setTimeout(() => {
-      stopTyping(meetingId, userId);
-    }, TYPING_TIMEOUT);
-    return Logger.debug('Typing indicator update', { userId, chatId });
-  };
+  try {
+    const { numberAffected } = UsersTyping.upsert(selector, modifier);
 
-  return UsersTyping.upsert(selector, mod, cb);
+    if (numberAffected) {
+      Logger.debug('Typing indicator update', { userId, chatId });
+      Meteor.setTimeout(() => {
+        stopTyping(meetingId, userId);
+      }, TYPING_TIMEOUT);
+    }
+  } catch (err) {
+    Logger.error(`Typing indicator update error: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/stopTyping.js b/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/stopTyping.js
index 8b8b14a099c34ddabb9475c4958ecc5ae94d7504..5db6729dd6248581419e26f80e44645f7b8de03e 100644
--- a/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/stopTyping.js
+++ b/bigbluebutton-html5/imports/api/group-chat-msg/server/modifiers/stopTyping.js
@@ -16,12 +16,13 @@ export default function stopTyping(meetingId, userId, sendMsgInitiated = false)
   const stillTyping = !sendMsgInitiated && user && (new Date()) - user.time < 3000;
   if (stillTyping) return;
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Stop user=${userId} typing indicator error: ${err}`);
-    }
-    return Logger.debug('Stopped typing indicator', { userId });
-  };
+  try {
+    const numberAffected = UsersTyping.remove(selector);
 
-  UsersTyping.remove(selector, cb);
+    if (numberAffected) {
+      Logger.debug('Stopped typing indicator', { userId });
+    }
+  } catch (err) {
+    Logger.error(`Stop user=${userId} typing indicator error: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChatCreated.js b/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChatCreated.js
index 4d359c71810d68656704af822351236da5e51e34..0ba77f4ddb00127b9cf2bc01bafcadbb2d55c9a8 100644
--- a/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChatCreated.js
+++ b/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChatCreated.js
@@ -5,5 +5,5 @@ export default function handleGroupChatCreated({ body }, meetingId) {
   check(meetingId, String);
   check(body, Object);
 
-  return addGroupChat(meetingId, body);
+  addGroupChat(meetingId, body);
 }
diff --git a/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChatDestroyed.js b/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChatDestroyed.js
index 90ef8aa8868c5aa6591c67cdcbcb1ebee50608b6..b6aec3ed45d122d0917b7934c504a019ccd860ef 100644
--- a/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChatDestroyed.js
+++ b/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChatDestroyed.js
@@ -5,5 +5,5 @@ export default function handleGroupChatDestroyed({ body }, meetingId) {
   check(meetingId, String);
   check(body, Object);
 
-  return addGroupChat(meetingId, body);
+  addGroupChat(meetingId, body);
 }
diff --git a/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChats.js b/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChats.js
index d635bd274914c6e66c4664c514a7af76b7fb84cd..158fc846219bd75b4672ae4386d1cca3cc6636ba 100644
--- a/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChats.js
+++ b/bigbluebutton-html5/imports/api/group-chat/server/handlers/groupChats.js
@@ -7,11 +7,5 @@ export default function handleGroupChats({ body }, meetingId) {
   check(meetingId, String);
   check(chats, Array);
 
-  const chatsAdded = [];
-
-  chats.forEach((chat) => {
-    chatsAdded.push(addGroupChat(meetingId, chat));
-  });
-
-  return chatsAdded;
+  chats.forEach(chat => addGroupChat(meetingId, chat));
 }
diff --git a/bigbluebutton-html5/imports/api/group-chat/server/modifiers/addGroupChat.js b/bigbluebutton-html5/imports/api/group-chat/server/modifiers/addGroupChat.js
index 75b85cae28e502a0adb85e824a508359473f5387..4b7f389d6d713c7ec76e4160f729c6f180f13646 100644
--- a/bigbluebutton-html5/imports/api/group-chat/server/modifiers/addGroupChat.js
+++ b/bigbluebutton-html5/imports/api/group-chat/server/modifiers/addGroupChat.js
@@ -35,19 +35,15 @@ export default function addGroupChat(meetingId, chat) {
     $set: flat(chatDocument, { safe: true }),
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Adding group-chat to collection: ${err}`);
-    }
-
-    const { insertedId } = numChanged;
+  try {
+    const { insertedId } = GroupChat.upsert(selector, modifier);
 
     if (insertedId) {
-      return Logger.info(`Added group-chat name=${chat.name} meetingId=${meetingId}`);
+      Logger.info(`Added group-chat name=${chat.name} meetingId=${meetingId}`);
+    } else {
+      Logger.info(`Upserted group-chat name=${chat.name} meetingId=${meetingId}`);
     }
-
-    return Logger.info(`Upserted group-chat name=${chat.name} meetingId=${meetingId}`);
-  };
-
-  return GroupChat.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Adding group-chat to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/group-chat/server/modifiers/clearGroupChat.js b/bigbluebutton-html5/imports/api/group-chat/server/modifiers/clearGroupChat.js
index 91e25bcc673ef79300f2f116a9d6f529c8cc33da..2998a5ff1c211bb4133320f2b26eb254fbf1d08c 100644
--- a/bigbluebutton-html5/imports/api/group-chat/server/modifiers/clearGroupChat.js
+++ b/bigbluebutton-html5/imports/api/group-chat/server/modifiers/clearGroupChat.js
@@ -3,8 +3,14 @@ import Logger from '/imports/startup/server/logger';
 import clearGroupChatMsg from '/imports/api/group-chat-msg/server/modifiers/clearGroupChatMsg';
 
 export default function clearGroupChat(meetingId) {
-  clearGroupChatMsg(meetingId);
-  return GroupChat.remove({ meetingId }, () => {
-    Logger.info(`Cleared GroupChat (${meetingId})`);
-  });
+  try {
+    clearGroupChatMsg(meetingId);
+    const numberAffected = GroupChat.remove({ meetingId });
+
+    if (numberAffected) {
+      Logger.info(`Cleared GroupChat (${meetingId})`);
+    }
+  } catch (err) {
+    Logger.error(`Error on clearing GroupChat (${meetingId}). ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/group-chat/server/modifiers/removeGroupChat.js b/bigbluebutton-html5/imports/api/group-chat/server/modifiers/removeGroupChat.js
index 5433518c5af69cd842372f21c916231859bd6cf7..5aa2cff9c26d3c5c0b7487a4440e5776fc8fccd3 100644
--- a/bigbluebutton-html5/imports/api/group-chat/server/modifiers/removeGroupChat.js
+++ b/bigbluebutton-html5/imports/api/group-chat/server/modifiers/removeGroupChat.js
@@ -12,17 +12,14 @@ export default function removeGroupChat(meetingId, chatId) {
     meetingId,
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Removing group-chat from collection: ${err}`);
-      return;
-    }
+  try {
+    const numberAffected = GroupChat.remove(selector);
 
-    if (numChanged) {
+    if (numberAffected) {
       Logger.info(`Removed group-chat id=${chatId} meeting=${meetingId}`);
       clearGroupChatMsg(meetingId, chatId);
     }
-  };
-
-  return GroupChat.remove(selector, cb);
+  } catch (err) {
+    Logger.error(`Removing group-chat from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/guest-users/server/handlers/guestsWaitingForApproval.js b/bigbluebutton-html5/imports/api/guest-users/server/handlers/guestsWaitingForApproval.js
index 2fa6a2bfafbd3e9a176d4e25a2edd048ab5a5944..bbd3cfe66359294abd63a933252b7c76b84a399b 100644
--- a/bigbluebutton-html5/imports/api/guest-users/server/handlers/guestsWaitingForApproval.js
+++ b/bigbluebutton-html5/imports/api/guest-users/server/handlers/guestsWaitingForApproval.js
@@ -14,28 +14,27 @@ export default function handleGuestsWaitingForApproval({ body }, meetingId) {
   check(guests, Array);
   check(meetingId, String);
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Adding guest user to collection: ${err}`);
-    }
+  return guests.map((guest) => {
+    try {
+      const { insertedId, numberAffected } = GuestUsers.upsert({
+        meetingId,
+        intId: guest.intId,
+      }, {
+        approved: false,
+        denied: false,
+        ...guest,
+        meetingId,
+        loginTime: new Date().getTime(),
+        color: COLOR_LIST[stringHash(guest.intId) % COLOR_LIST.length],
+      });
 
-    const { insertedId } = numChanged;
-    if (insertedId) {
-      return Logger.info(`Added guest user meeting=${meetingId}`);
+      if (insertedId) {
+        Logger.info(`Added guest user meeting=${meetingId}`);
+      } else if (numberAffected) {
+        Logger.info(`Upserted guest user meeting=${meetingId}`);
+      }
+    } catch (err) {
+      Logger.error(`Adding guest user to collection: ${err}`);
     }
-
-    return Logger.info(`Upserted guest user meeting=${meetingId}`);
-  };
-
-  return guests.map(guest => GuestUsers.upsert({
-    meetingId,
-    intId: guest.intId,
-  }, {
-    approved: false,
-    denied: false,
-    ...guest,
-    meetingId,
-    loginTime: new Date().getTime(),
-    color: COLOR_LIST[stringHash(guest.intId) % COLOR_LIST.length],
-  }, cb));
+  });
 }
diff --git a/bigbluebutton-html5/imports/api/guest-users/server/modifiers/setGuestStatus.js b/bigbluebutton-html5/imports/api/guest-users/server/modifiers/setGuestStatus.js
index 61ee93c96bf4770f3d5ec01841e5ece11398e1ff..f7632e2ac48a30dcab2fa77273ed283abb1025ac 100644
--- a/bigbluebutton-html5/imports/api/guest-users/server/modifiers/setGuestStatus.js
+++ b/bigbluebutton-html5/imports/api/guest-users/server/modifiers/setGuestStatus.js
@@ -21,13 +21,14 @@ export default function setGuestStatus(meetingId, intId, status, approvedBy = nu
       approvedBy,
     },
   };
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Updating status=${status} user=${intId}: ${err}`);
-    }
 
-    return Logger.info(`Updated status=${status} user=${intId} meeting=${meetingId}`);
-  };
+  try {
+    const numberAffected = GuestUsers.update(selector, modifier);
 
-  return GuestUsers.update(selector, modifier, cb);
+    if (numberAffected) {
+      Logger.info(`Updated status=${status} user=${intId} meeting=${meetingId}`);
+    }
+  } catch (err) {
+    Logger.error(`Updating status=${status} user=${intId}: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/local-settings/server/modifiers/clearLocalSettings.js b/bigbluebutton-html5/imports/api/local-settings/server/modifiers/clearLocalSettings.js
index b07d3e11c49c88f1c1963417c07ab0c565aec7f9..971113b6ca7ac0c494ead05eff77fb3383477839 100644
--- a/bigbluebutton-html5/imports/api/local-settings/server/modifiers/clearLocalSettings.js
+++ b/bigbluebutton-html5/imports/api/local-settings/server/modifiers/clearLocalSettings.js
@@ -2,7 +2,13 @@ import LocalSettings from '/imports/api/local-settings';
 import Logger from '/imports/startup/server/logger';
 
 export default function clearLocalSettings(meetingId) {
-  return LocalSettings.remove({ meetingId }, () => {
-    Logger.info(`Cleared Local Settings (${meetingId})`);
-  });
+  try {
+    const numberAffected = LocalSettings.remove({ meetingId });
+
+    if (numberAffected) {
+      Logger.info(`Cleared Local Settings (${meetingId})`);
+    }
+  } catch (err) {
+    Logger.error(`Error on clearing Local Settings (${meetingId}). ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/local-settings/server/modifiers/setChangedLocalSettings.js b/bigbluebutton-html5/imports/api/local-settings/server/modifiers/setChangedLocalSettings.js
index 404a53974d441fdede82d5d481018ee69c46e6b6..eeea822f270c114d699e3fb8e96ea96a62f9a4b1 100644
--- a/bigbluebutton-html5/imports/api/local-settings/server/modifiers/setChangedLocalSettings.js
+++ b/bigbluebutton-html5/imports/api/local-settings/server/modifiers/setChangedLocalSettings.js
@@ -18,15 +18,13 @@ export default function setChangedLocalSettings(meetingId, userId, settings) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`${err}`);
-    }
+  try {
+    const { numChanged } = LocalSettings.upsert(selector, modifier);
 
     if (numChanged) {
       Logger.info(`Updated settings for user ${userId} on meeting ${meetingId}`);
     }
-  };
-
-  return LocalSettings.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Error on update settings. ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingLockChange.js b/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingLockChange.js
index ac0a065596a1395f4e508123f323486a96cefb16..7824f009589dee0761b934dec5d2cc28f57b2cba 100644
--- a/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingLockChange.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingLockChange.js
@@ -1,5 +1,5 @@
 import changeLockSettings from '../modifiers/changeLockSettings';
 
 export default function handleLockSettingsInMeeting({ body }, meetingId) {
-  return changeLockSettings(meetingId, body);
+  changeLockSettings(meetingId, body);
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/handlers/recordingStatusChange.js b/bigbluebutton-html5/imports/api/meetings/server/handlers/recordingStatusChange.js
index eff4978c975f8f3ed79d9da78980cced883d0e3f..c85809dee679ce65230c78800074c4caf0ed79ea 100644
--- a/bigbluebutton-html5/imports/api/meetings/server/handlers/recordingStatusChange.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/handlers/recordingStatusChange.js
@@ -14,16 +14,13 @@ export default function handleRecordingStatusChange({ body }, meetingId) {
     $set: { recording },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Changing record status: ${err}`);
-      return;
-    }
+  try {
+    const { numberAffected } = RecordMeetings.upsert(selector, modifier);
 
-    if (numChanged) {
+    if (numberAffected) {
       Logger.info(`Changed meeting record status id=${meetingId} recording=${recording}`);
     }
-  };
-
-  return RecordMeetings.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Changing record status: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/handlers/recordingTimerChange.js b/bigbluebutton-html5/imports/api/meetings/server/handlers/recordingTimerChange.js
index 9e92c566cafdf000c1767342c5372b4543bb060c..a0288941bebf174297f22e0bc2ab1b216094515f 100755
--- a/bigbluebutton-html5/imports/api/meetings/server/handlers/recordingTimerChange.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/handlers/recordingTimerChange.js
@@ -2,7 +2,7 @@ import { check } from 'meteor/check';
 import { RecordMeetings } from '/imports/api/meetings';
 import Logger from '/imports/startup/server/logger';
 
-export default function handleRecordingStatusChange({ body }, meetingId) {
+export default function handleRecordingTimerChange({ body }, meetingId) {
   const { time } = body;
 
   check(meetingId, String);
@@ -19,11 +19,9 @@ export default function handleRecordingStatusChange({ body }, meetingId) {
     $set: { time },
   };
 
-  const cb = (err) => {
-    if (err) {
-      Logger.error(`Changing recording time: ${err}`);
-    }
-  };
-
-  return RecordMeetings.upsert(selector, modifier, cb);
+  try {
+    RecordMeetings.upsert(selector, modifier);
+  } catch (err) {
+    Logger.error(`Changing recording time: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/handlers/timeRemainingUpdate.js b/bigbluebutton-html5/imports/api/meetings/server/handlers/timeRemainingUpdate.js
index 786018b1ed13ebd1123de97fc0c4d50e589b8222..b3f2aa96095864506a13e63df153d11d7ab657d9 100644
--- a/bigbluebutton-html5/imports/api/meetings/server/handlers/timeRemainingUpdate.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/handlers/timeRemainingUpdate.js
@@ -20,11 +20,9 @@ export default function handleTimeRemainingUpdate({ body }, meetingId) {
     },
   };
 
-  const cb = (err) => {
-    if (err) {
-      Logger.error(`Changing recording time: ${err}`);
-    }
-  };
-
-  return MeetingTimeRemaining.upsert(selector, modifier, cb);
+  try {
+    MeetingTimeRemaining.upsert(selector, modifier);
+  } catch (err) {
+    Logger.error(`Changing recording time: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/handlers/userLockChange.js b/bigbluebutton-html5/imports/api/meetings/server/handlers/userLockChange.js
index d3cb90629441b24d16f5a3c170098933f7d3807c..08701cddad855764961589017d2f79abffb85b51 100644
--- a/bigbluebutton-html5/imports/api/meetings/server/handlers/userLockChange.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/handlers/userLockChange.js
@@ -1,5 +1,5 @@
 import changeUserLock from '../modifiers/changeUserLock';
 
 export default function handleLockSettingsInMeeting({ body }, meetingId) {
-  return changeUserLock(meetingId, body);
+  changeUserLock(meetingId, body);
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/handlers/webcamOnlyModerator.js b/bigbluebutton-html5/imports/api/meetings/server/handlers/webcamOnlyModerator.js
index 2bcd51d45028709bcdf86da07bb3383df301f512..57985aa06fab69e593fcc90c24a238a08349e8c6 100644
--- a/bigbluebutton-html5/imports/api/meetings/server/handlers/webcamOnlyModerator.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/handlers/webcamOnlyModerator.js
@@ -1,5 +1,5 @@
 import changeWebcamOnlyModerator from '../modifiers/webcamOnlyModerator';
 
 export default function handleChangeWebcamOnlyModerator({ body }, meetingId) {
-  return changeWebcamOnlyModerator(meetingId, body);
+  changeWebcamOnlyModerator(meetingId, body);
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js
index 4dce903de39c43adc4500275f40f8e11b9bb34d1..b450ccc8460f61f27f48886a9aed30f82f24664b 100755
--- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js
@@ -148,15 +148,23 @@ export default function addMeeting(meeting) {
     })),
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Adding meeting to collection: ${err}`);
-      return;
+  try {
+    const { insertedId, numberAffected } = RecordMeetings.upsert(selector, { meetingId, ...recordProp });
+
+    if (insertedId) {
+      Logger.info(`Added record prop id=${meetingId}`);
+    } else if (numberAffected) {
+      Logger.info(`Upserted record prop id=${meetingId}`);
     }
+  } catch (err) {
+    Logger.error(`Adding record prop to collection: ${err}`);
+  }
+
+  try {
+    const { insertedId, numberAffected } = Meetings.upsert(selector, modifier);
 
-    const {
-      insertedId,
-    } = numChanged;
+    addAnnotationsStreamer(meetingId);
+    addCursorStreamer(meetingId);
 
     if (insertedId) {
       Logger.info(`Added meeting id=${meetingId}`);
@@ -165,39 +173,10 @@ export default function addMeeting(meeting) {
       createNote(meetingId);
       createCaptions(meetingId);
       BannedUsers.init(meetingId);
-    }
-
-    if (numChanged) {
+    } else if (numberAffected) {
       Logger.info(`Upserted meeting id=${meetingId}`);
     }
-  };
-
-  const cbRecord = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Adding record prop to collection: ${err}`);
-      return;
-    }
-
-    const {
-      insertedId,
-    } = numChanged;
-
-    if (insertedId) {
-      Logger.info(`Added record prop id=${meetingId}`);
-    }
-
-    if (numChanged) {
-      Logger.info(`Upserted record prop id=${meetingId}`);
-    }
-  };
-
-  RecordMeetings.upsert(selector, {
-    meetingId,
-    ...recordProp,
-  }, cbRecord);
-
-  addAnnotationsStreamer(meetingId);
-  addCursorStreamer(meetingId);
-
-  return Meetings.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Adding meeting to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/changeLockSettings.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/changeLockSettings.js
index 495c7ce4a6f9531a02d834d20750e4664a992e57..991a825cc8202697816fe8d1df2cb200b21bf212 100755
--- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/changeLockSettings.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/changeLockSettings.js
@@ -51,17 +51,16 @@ export default function changeLockSettings(meetingId, payload) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Changing meeting={${meetingId}} lock settings: ${err}`);
-    }
 
-    if (!numChanged) {
-      return Logger.info(`meeting={${meetingId}} lock settings were not updated`);
-    }
+  try {
+    const { numberAffected } = Meetings.upsert(selector, modifier);
 
-    return Logger.info(`Changed meeting={${meetingId}} updated lock settings`);
-  };
-
-  return Meetings.upsert(selector, modifier, cb);
+    if (numberAffected) {
+      Logger.info(`Changed meeting={${meetingId}} updated lock settings`);
+    } else {
+      Logger.info(`meeting={${meetingId}} lock settings were not updated`);
+    }
+  } catch (err) {
+    Logger.error(`Changing meeting={${meetingId}} lock settings: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/changeUserLock.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/changeUserLock.js
index 6b2b9dd9811a56e0d1fc0d908f9f323fcdeab9e4..0dea8a3ff2bcede0642b9d5c8b1d6038bed186c7 100644
--- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/changeUserLock.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/changeUserLock.js
@@ -23,17 +23,15 @@ export default function changeUserLock(meetingId, payload) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Changing user lock setting: ${err}`);
-    }
+  try {
+    const { numberAffected } = Users.update(selector, modifier);
 
-    if (!numChanged) {
-      return Logger.info(`User's userId=${userId} lock status wasn't updated`);
+    if (numberAffected) {
+      Logger.info(`User's userId=${userId} lock status was changed to: ${locked} by user userId=${lockedBy}`);
+    } else {
+      Logger.info(`User's userId=${userId} lock status wasn't updated`);
     }
-
-    return Logger.info(`User's userId=${userId} lock status was changed to: ${locked} by user userId=${lockedBy}`);
-  };
-
-  return Users.update(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Changing user lock setting: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/clearRecordMeeting.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/clearRecordMeeting.js
index a40625f20e58fd4390b58caa8eff9a77aa9008b7..91eb131b28b251b71b679d5438a71ecd0c261e06 100644
--- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/clearRecordMeeting.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/clearRecordMeeting.js
@@ -2,5 +2,13 @@ import { RecordMeetings } from '/imports/api/meetings';
 import Logger from '/imports/startup/server/logger';
 
 export default function meetingHasEnded(meetingId) {
-  return RecordMeetings.remove({ meetingId }, () => Logger.info(`Cleared record prop from meeting with id ${meetingId}`));
+  try {
+    const numberAffected = RecordMeetings.remove({ meetingId });
+
+    if (numberAffected) {
+      Logger.info(`Cleared record prop from meeting with id ${meetingId}`);
+    }
+  } catch (err) {
+    Logger.error(`Error on clearing record prop from meeting with id ${meetingId}. ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js
index fc0b62796d8ed745c61be3d57aef2efef0b814c6..2e0cefbab9a4ed369bcb18198d870b997af538be 100755
--- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js
@@ -51,6 +51,6 @@ export default function meetingHasEnded(meetingId) {
     clearAuthTokenValidation(meetingId);
     BannedUsers.delete(meetingId);
 
-    return Logger.info(`Cleared Meetings with id ${meetingId}`);
+    Logger.info(`Cleared Meetings with id ${meetingId}`);
   });
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/setPublishedPoll.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/setPublishedPoll.js
index 7bf371914f788c4e5fab82f41d9f9cc134ca29e0..c0dc92a6d21d5998fe13a9ee97b4591b732427d6 100644
--- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/setPublishedPoll.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/setPublishedPoll.js
@@ -16,13 +16,13 @@ export default function setPublishedPoll(meetingId, isPublished) {
     },
   };
 
-  const cb = (err) => {
-    if (err != null) {
-      return Logger.error(`Setting publishedPoll=${isPublished} for meetingId=${meetingId}`);
-    }
-
-    return Logger.info(`Set publishedPoll=${isPublished} in meeitingId=${meetingId}`);
-  };
+  try {
+    const { numberAffected } = Meetings.upsert(selector, modifier);
 
-  return Meetings.upsert(selector, modifier, cb);
+    if (numberAffected) {
+      Logger.info(`Set publishedPoll=${isPublished} in meeitingId=${meetingId}`);
+    }
+  } catch (err) {
+    Logger.error(`Setting publishedPoll=${isPublished} for meetingId=${meetingId}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/webcamOnlyModerator.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/webcamOnlyModerator.js
index ad0b9929fd7c68b4677a518f3c7bbb5a7a48ea9e..44f5ded0ac2deb53956720f3b53c715c1dbfe119 100644
--- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/webcamOnlyModerator.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/webcamOnlyModerator.js
@@ -20,17 +20,15 @@ export default function changeWebcamOnlyModerator(meetingId, payload) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Changwing meeting={${meetingId}} webcam Only for Moderator: ${err}`);
-    }
+  try {
+    const { numberAffected } = Meetings.upsert(selector, modifier);
 
-    if (!numChanged) {
-      return Logger.info(`meeting={${meetingId}} webcam Only for Moderator were not updated`);
+    if (numberAffected) {
+      Logger.info(`Changed meeting={${meetingId}} updated webcam Only for Moderator`);
+    } else {
+      Logger.info(`meeting={${meetingId}} webcam Only for Moderator were not updated`);
     }
-
-    return Logger.info(`Changed meeting={${meetingId}} updated webcam Only for Moderator`);
-  };
-
-  return Meetings.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Changwing meeting={${meetingId}} webcam Only for Moderator: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/network-information/server/modifiers/clearNetworkInformation.js b/bigbluebutton-html5/imports/api/network-information/server/modifiers/clearNetworkInformation.js
index c272d64ab2a27a454d253e03758dd10d50458be0..b0bd710d99239d706c7100873fc2b366d8f9c7af 100644
--- a/bigbluebutton-html5/imports/api/network-information/server/modifiers/clearNetworkInformation.js
+++ b/bigbluebutton-html5/imports/api/network-information/server/modifiers/clearNetworkInformation.js
@@ -3,12 +3,24 @@ import Logger from '/imports/startup/server/logger';
 
 export default function clearNetworkInformation(meetingId) {
   if (meetingId) {
-    return NetworkInformation.remove({ meetingId }, () => {
-      Logger.info(`Cleared Network Information (${meetingId})`);
-    });
-  }
+    try {
+      const numberAffected = NetworkInformation.remove({ meetingId });
+
+      if (numberAffected) {
+        Logger.info(`Cleared Network Information (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing Network Information (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      const numberAffected = NetworkInformation.remove({});
 
-  return NetworkInformation.remove({}, () => {
-    Logger.info('Cleared Network Information (all)');
-  });
+      if (numberAffected) {
+        Logger.info('Cleared Network Information (all)');
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing Network Information (all). ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/note/server/modifiers/addNote.js b/bigbluebutton-html5/imports/api/note/server/modifiers/addNote.js
index 0cc7300c735951adc84f7e8ea28f9d28c3702ab8..a3f8ae2f6317a9e25068a0798f1825fb01d5b980 100644
--- a/bigbluebutton-html5/imports/api/note/server/modifiers/addNote.js
+++ b/bigbluebutton-html5/imports/api/note/server/modifiers/addNote.js
@@ -19,17 +19,15 @@ export default function addNote(meetingId, noteId, readOnlyNoteId) {
     revs: 0,
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Adding note to the collection: ${err}`);
-    }
+  try {
+    const { insertedId } = Note.upsert(selector, modifier);
 
-    if (numChanged) {
-      return Logger.info(`Added note id=${noteId} readOnlyId=${readOnlyNoteId} meeting=${meetingId}`);
+    if (insertedId) {
+      Logger.info(`Added note id=${noteId} readOnlyId=${readOnlyNoteId} meeting=${meetingId}`);
+    } else {
+      Logger.info(`Upserted note id=${noteId} readOnlyId=${readOnlyNoteId} meeting=${meetingId}`);
     }
-
-    return Logger.info(`Upserted note id=${noteId} readOnlyId=${readOnlyNoteId} meeting=${meetingId}`);
-  };
-
-  return Note.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Adding note to the collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/note/server/modifiers/clearNote.js b/bigbluebutton-html5/imports/api/note/server/modifiers/clearNote.js
index 10f4735cc93ae384e734535db3252cbce74265cc..70766fdb20c27a10227a4a9d33622ad7d4f1104d 100644
--- a/bigbluebutton-html5/imports/api/note/server/modifiers/clearNote.js
+++ b/bigbluebutton-html5/imports/api/note/server/modifiers/clearNote.js
@@ -3,12 +3,24 @@ import Logger from '/imports/startup/server/logger';
 
 export default function clearNote(meetingId) {
   if (meetingId) {
-    return Note.remove({ meetingId }, () => {
-      Logger.info(`Cleared Note (${meetingId})`);
-    });
-  }
+    try {
+      const numberAffected = Note.remove({ meetingId });
+
+      if (numberAffected) {
+        Logger.info(`Cleared Note (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing Note (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      const numberAffected = Note.remove({});
 
-  return Note.remove({}, () => {
-    Logger.info('Cleared Note (all)');
-  });
+      if (numberAffected) {
+        Logger.info('Cleared Note (all)');
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing Note (all). ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/note/server/modifiers/updateNote.js b/bigbluebutton-html5/imports/api/note/server/modifiers/updateNote.js
index 86048d534ea893efd2aa36c1178fa47159f336d4..15c263b84a007d222f07e0644900271b12ced24e 100644
--- a/bigbluebutton-html5/imports/api/note/server/modifiers/updateNote.js
+++ b/bigbluebutton-html5/imports/api/note/server/modifiers/updateNote.js
@@ -16,13 +16,13 @@ export default function updateNote(noteId, revs) {
     },
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error('Notes: error when updating note pad', { err });
-    }
-
-    return Logger.verbose('Notes: update note pad', { pad: noteId, revs });
-  };
+  try {
+    const numberAffected = Note.update(selector, modifier, { multi: true });
 
-  return Note.update(selector, modifier, { multi: true }, cb);
+    if (numberAffected) {
+      Logger.verbose('Notes: update note pad', { pad: noteId, revs });
+    }
+  } catch (err) {
+    Logger.error('Notes: error when updating note pad', { err });
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/polls/server/handlers/userResponded.js b/bigbluebutton-html5/imports/api/polls/server/handlers/userResponded.js
index 6468f67a75aed4b0d06b2e496aa29fe1bfc3ee91..6c1b835ec0d14a7252ff27e92b2af99ebfbf28ae 100644
--- a/bigbluebutton-html5/imports/api/polls/server/handlers/userResponded.js
+++ b/bigbluebutton-html5/imports/api/polls/server/handlers/userResponded.js
@@ -22,14 +22,13 @@ export default function userResponded({ body }) {
     },
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Updating Poll responses: ${err}`);
-    }
-
-    return Logger.info(`Updating Poll response (userId: ${userId},`
-      + `response: ${answerId}, pollId: ${pollId})`);
-  };
+  try {
+    const numberAffected = Polls.update(selector, modifier);
 
-  return Polls.update(selector, modifier, cb);
+    if (numberAffected) {
+      Logger.info(`Updating Poll response (userId: ${userId}, response: ${answerId}, pollId: ${pollId})`);
+    }
+  } catch (err) {
+    Logger.error(`Updating Poll responses: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js b/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js
index db2691352fc3fb34655b9b36c77db8b4cbb21de7..6aabfe10c656dea35ae1d307a041ed1b6badff70 100644
--- a/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js
+++ b/bigbluebutton-html5/imports/api/polls/server/methods/publishVote.js
@@ -48,16 +48,15 @@ export default function publishVote(pollId, pollAnswerId) {
     },
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Removing responded user from Polls collection: ${err}`);
-    }
-
-    Logger.info(`Removed responded user=${requesterUserId} from poll (meetingId: ${meetingId}, `
-      + `pollId: ${pollId}!)`);
+  try {
+    const numberAffected = Polls.update(selector, modifier);
 
-    return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload);
-  };
+    if (numberAffected) {
+      Logger.info(`Removed responded user=${requesterUserId} from poll (meetingId: ${meetingId}, pollId: ${pollId}!)`);
 
-  Polls.update(selector, modifier, cb);
+      RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload);
+    }
+  } catch (err) {
+    Logger.error(`Removing responded user from Polls collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/polls/server/modifiers/addPoll.js b/bigbluebutton-html5/imports/api/polls/server/modifiers/addPoll.js
index 07d7457f552cc4505f9f2e3407699bf000db8fd5..1449c306ca1ac707267fd865f63dd3c7017894a4 100644
--- a/bigbluebutton-html5/imports/api/polls/server/modifiers/addPoll.js
+++ b/bigbluebutton-html5/imports/api/polls/server/modifiers/addPoll.js
@@ -40,18 +40,16 @@ export default function addPoll(meetingId, requesterId, poll) {
     flat(poll, { safe: true }),
   );
 
-  const cb = (err, numChanged) => {
-    if (err != null) {
-      return Logger.error(`Adding Poll to collection: ${poll.id}`);
-    }
 
-    const { insertedId } = numChanged;
+  try {
+    const { insertedId } = Polls.upsert(selector, modifier);
+
     if (insertedId) {
-      return Logger.info(`Added Poll id=${poll.id}`);
+      Logger.info(`Added Poll id=${poll.id}`);
+    } else {
+      Logger.info(`Upserted Poll id=${poll.id}`);
     }
-
-    return Logger.info(`Upserted Poll id=${poll.id}`);
-  };
-
-  return Polls.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Adding Poll to collection: ${poll.id}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/polls/server/modifiers/clearPolls.js b/bigbluebutton-html5/imports/api/polls/server/modifiers/clearPolls.js
index 67f0136f173b9ee0dbc261a724c3193ff3df5c85..141ab3b080dd14f3e1705f07e73379401f0eccea 100644
--- a/bigbluebutton-html5/imports/api/polls/server/modifiers/clearPolls.js
+++ b/bigbluebutton-html5/imports/api/polls/server/modifiers/clearPolls.js
@@ -3,12 +3,24 @@ import Logger from '/imports/startup/server/logger';
 
 export default function clearPolls(meetingId) {
   if (meetingId) {
-    return Polls.remove({ meetingId }, () => {
-      Logger.info(`Cleared Polls (${meetingId})`);
-    });
-  }
+    try {
+      const numberAffected = Polls.remove({ meetingId });
+
+      if (numberAffected) {
+        Logger.info(`Cleared Polls (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.info(`Error on clearing Polls (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      const numberAffected = Polls.remove({});
 
-  return Polls.remove({}, () => {
-    Logger.info('Cleared Polls (all)');
-  });
+      if (numberAffected) {
+        Logger.info('Cleared Polls (all)');
+      }
+    } catch (err) {
+      Logger.info(`Error on clearing Polls (all). ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/polls/server/modifiers/removePoll.js b/bigbluebutton-html5/imports/api/polls/server/modifiers/removePoll.js
index 6d59f73cbde6cde7b0a61442b86eb5b3584c9441..d8f0920b58f3b4e18a30b1d19a316863c4de2df0 100644
--- a/bigbluebutton-html5/imports/api/polls/server/modifiers/removePoll.js
+++ b/bigbluebutton-html5/imports/api/polls/server/modifiers/removePoll.js
@@ -11,13 +11,13 @@ export default function removePoll(meetingId, id) {
     id,
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Removing Poll from collection: ${err}`);
-    }
-
-    return Logger.info(`Removed Poll id=${id}`);
-  };
+  try {
+    const numberAffected = Polls.remove(selector);
 
-  return Polls.remove(selector, cb);
+    if (numberAffected) {
+      Logger.info(`Removed Poll id=${id}`);
+    }
+  } catch (err) {
+    Logger.error(`Removing Poll from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/polls/server/modifiers/updateVotes.js b/bigbluebutton-html5/imports/api/polls/server/modifiers/updateVotes.js
index 30815aafa1c1d1d8fc90e15f5cc983dc5de3f40d..df6aca4a1da610b3d900232c9e1f7996456117bb 100644
--- a/bigbluebutton-html5/imports/api/polls/server/modifiers/updateVotes.js
+++ b/bigbluebutton-html5/imports/api/polls/server/modifiers/updateVotes.js
@@ -29,13 +29,13 @@ export default function updateVotes(poll, meetingId) {
     $set: flat(poll, { safe: true }),
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Updating Polls collection: ${err}`);
-    }
-
-    return Logger.info(`Updating Polls collection (meetingId: ${meetingId}, pollId: ${id}!)`);
-  };
+  try {
+    const numberAffected = Polls.update(selector, modifier);
 
-  return Polls.update(selector, modifier, cb);
+    if (numberAffected) {
+      Logger.info(`Updating Polls collection (meetingId: ${meetingId}, pollId: ${id}!)`);
+    }
+  } catch (err) {
+    Logger.error(`Updating Polls collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/addPresentationPod.js b/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/addPresentationPod.js
index 55f36c59a010407ff107a96557482d4242c12542..850336c47bc929807cec0e646f65632f142992d5 100644
--- a/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/addPresentationPod.js
+++ b/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/addPresentationPod.js
@@ -26,22 +26,20 @@ export default function addPresentationPod(meetingId, pod, presentations = undef
     currentPresenterId,
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Adding presentation pod to the collection: ${err}`);
-    }
+  try {
+    const { insertedId } = PresentationPods.upsert(selector, modifier);
 
     // if it's a Sync message - continue adding the attached presentations
     if (presentations) {
       presentations.forEach(presentation => addPresentation(meetingId, podId, presentation));
     }
 
-    if (numChanged) {
+    if (insertedId) {
       Logger.info(`Added presentation pod id=${podId} meeting=${meetingId}`);
+    } else {
+      Logger.info(`Upserted presentation pod id=${podId} meeting=${meetingId}`);
     }
-
-    Logger.info(`Upserted presentation pod id=${podId} meeting=${meetingId}`);
-  };
-
-  return PresentationPods.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Adding presentation pod to the collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/clearPresentationPods.js b/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/clearPresentationPods.js
index 0ab763f415ad9c64510a77f97822e103e8c87071..81bea4a5119d958d311731a77970b2f5b9fa5a47 100644
--- a/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/clearPresentationPods.js
+++ b/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/clearPresentationPods.js
@@ -5,19 +5,28 @@ import clearPresentationUploadToken from '/imports/api/presentation-upload-token
 
 export default function clearPresentationPods(meetingId) {
   if (meetingId) {
-    return PresentationPods.remove(
-      { meetingId },
-      () => {
+    try {
+      const numberAffected = PresentationPods.remove({ meetingId });
+
+      if (numberAffected) {
         clearPresentations(meetingId);
         clearPresentationUploadToken(meetingId);
         Logger.info(`Cleared Presentations Pods (${meetingId})`);
-      },
-    );
-  }
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing Presentations Pods (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      const numberAffected = PresentationPods.remove({});
 
-  return PresentationPods.remove({}, () => {
-    clearPresentations();
-    clearPresentationUploadToken();
-    Logger.info('Cleared Presentations Pods (all)');
-  });
+      if (numberAffected) {
+        clearPresentations();
+        clearPresentationUploadToken();
+        Logger.info('Cleared Presentations Pods (all)');
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing Presentations Pods (all). ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/removePresentationPod.js b/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/removePresentationPod.js
index fe9b4b938a80f1eedf50fc36c288e9d71aa9c8c9..0b933ccaa936a933c7bfd7112da6d05a78610e82 100644
--- a/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/removePresentationPod.js
+++ b/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/removePresentationPod.js
@@ -13,18 +13,15 @@ export default function removePresentationPod(meetingId, podId) {
     podId,
   };
 
-  const cb = (err) => {
-    if (err) {
-      Logger.error(`Removing presentation pod from collection: ${err}`);
-      return;
-    }
+  try {
+    const numberAffected = PresentationPods.remove(selector);
 
-    if (podId) {
+    if (numberAffected && podId) {
       Logger.info(`Removed presentation pod id=${podId} meeting=${meetingId}`);
       clearPresentations(meetingId, podId);
       clearPresentationUploadToken(meetingId, podId);
     }
-  };
-
-  return PresentationPods.remove(selector, cb);
+  } catch (err) {
+    Logger.error(`Error on removing presentation pod from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/setPresenterInPod.js b/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/setPresenterInPod.js
index 4979cc5385e872a12194f3963d22cdf325c17d47..c8d816305979e1321261aa4be76e716b4866dcb2 100644
--- a/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/setPresenterInPod.js
+++ b/bigbluebutton-html5/imports/api/presentation-pods/server/modifiers/setPresenterInPod.js
@@ -18,16 +18,13 @@ export default function setPresenterInPod(meetingId, podId, nextPresenterId) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Setting a presenter in pod: ${err}`);
-      return;
-    }
+  try {
+    const { numberAffected } = PresentationPods.upsert(selector, modifier);
 
-    if (numChanged) {
+    if (numberAffected) {
       Logger.info(`Set a new presenter in pod id=${podId} meeting=${meetingId}`);
     }
-  };
-
-  return PresentationPods.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Setting a presenter in pod: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentation-upload-token/server/handlers/presentationUploadTokenFail.js b/bigbluebutton-html5/imports/api/presentation-upload-token/server/handlers/presentationUploadTokenFail.js
index 81eca3c13aff558733a927512aeabd20330ee560..d37b98395a8f43300246428831c57bec090c6a8a 100644
--- a/bigbluebutton-html5/imports/api/presentation-upload-token/server/handlers/presentationUploadTokenFail.js
+++ b/bigbluebutton-html5/imports/api/presentation-upload-token/server/handlers/presentationUploadTokenFail.js
@@ -19,14 +19,13 @@ export default function handlePresentationUploadTokenFail({ body, header }, meet
     filename,
   };
 
-  const cb = (err) => {
-    if (err) {
-      Logger.error(`Removing presentationToken from collection: ${err}`);
-      return;
-    }
-
-    Logger.info(`Removing presentationToken filename=${filename} podId=${podId} meeting=${meetingId}`);
-  };
+  try {
+    const { numberAffected } = PresentationUploadToken.upsert(selector, { failed: true, authzToken: null });
 
-  return PresentationUploadToken.upsert(selector, { failed: true, authzToken: null }, cb);
+    if (numberAffected) {
+      Logger.info(`Removing presentationToken filename=${filename} podId=${podId} meeting=${meetingId}`);
+    }
+  } catch (err) {
+    Logger.error(`Removing presentationToken from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentation-upload-token/server/handlers/presentationUploadTokenPass.js b/bigbluebutton-html5/imports/api/presentation-upload-token/server/handlers/presentationUploadTokenPass.js
index 0859c5627ee31e93d33dbc06a50250f0128bd58a..c76f09a21383f08964b48df95643c35a711cefc4 100644
--- a/bigbluebutton-html5/imports/api/presentation-upload-token/server/handlers/presentationUploadTokenPass.js
+++ b/bigbluebutton-html5/imports/api/presentation-upload-token/server/handlers/presentationUploadTokenPass.js
@@ -20,7 +20,7 @@ export default function handlePresentationUploadTokenPass({ body, header }, meet
     filename,
   };
 
-  const doc = {
+  const modifier = {
     meetingId,
     podId,
     userId,
@@ -30,14 +30,13 @@ export default function handlePresentationUploadTokenPass({ body, header }, meet
     used: false,
   };
 
-  const cb = (err) => {
-    if (err) {
-      Logger.error(`Inserting presentationToken from collection: ${err}`);
-      return;
-    }
-
-    Logger.info(`Inserting presentationToken filename=${filename} podId=${podId} meeting=${meetingId}`);
-  };
+  try {
+    const { insertedId } = PresentationUploadToken.upsert(selector, modifier);
 
-  return PresentationUploadToken.upsert(selector, doc, cb);
+    if (insertedId) {
+      Logger.info(`Inserting presentationToken filename=${filename} podId=${podId} meeting=${meetingId}`);
+    }
+  } catch (err) {
+    Logger.error(`Inserting presentationToken from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/setUsedToken.js b/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/setUsedToken.js
index 8bb0f725c97c121d0c3a6a1a64df61782196c53a..6efd96aa4837798f80c5ecc25e2c65b2036a425e 100644
--- a/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/setUsedToken.js
+++ b/bigbluebutton-html5/imports/api/presentation-upload-token/server/methods/setUsedToken.js
@@ -10,18 +10,18 @@ export default function setUsedToken(authzToken) {
       used: true,
     },
   };
-  const cb = (err) => {
-    if (err) {
-      Logger.error(`Unable to set token as used : ${err}`);
-      return;
-    }
 
-    Logger.info(`Token: ${authzToken} has been set as used in meeting=${meetingId}`);
-  };
+  try {
+    const numberAffected = PresentationUploadToken.update({
+      meetingId,
+      userId: requesterUserId,
+      authzToken,
+    }, payload);
 
-  return PresentationUploadToken.update({
-    meetingId,
-    userId: requesterUserId,
-    authzToken,
-  }, payload, cb);
+    if (numberAffected) {
+      Logger.info(`Token: ${authzToken} has been set as used in meeting=${meetingId}`);
+    }
+  } catch (err) {
+    Logger.error(`Unable to set token as used : ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentation-upload-token/server/modifiers/clearPresentationUploadToken.js b/bigbluebutton-html5/imports/api/presentation-upload-token/server/modifiers/clearPresentationUploadToken.js
index e101a21b1cd213157c3b8a5ffa76060c0a6ac7d9..8ecbb649388b3cdbc85107f524d12462709a892d 100644
--- a/bigbluebutton-html5/imports/api/presentation-upload-token/server/modifiers/clearPresentationUploadToken.js
+++ b/bigbluebutton-html5/imports/api/presentation-upload-token/server/modifiers/clearPresentationUploadToken.js
@@ -3,19 +3,39 @@ import Logger from '/imports/startup/server/logger';
 
 export default function clearPresentationUploadToken(meetingId, podId) {
   if (meetingId && podId) {
-    return PresentationUploadToken.remove({ meetingId, podId }, () => {
-      Logger.info(`Cleared Presentations Upload Token (${meetingId}, ${podId})`);
-    });
+    try {
+      const numberAffected = PresentationUploadToken.remove({ meetingId, podId });
+
+      if (numberAffected) {
+        Logger.info(`Cleared Presentations Upload Token (${meetingId}, ${podId})`);
+        return true;
+      }
+    } catch (err) {
+      Logger.info(`Error on clearing Presentations Upload Token (${meetingId}, ${podId}). ${err}`);
+      return false;
+    }
   }
 
   if (meetingId) {
-    return PresentationUploadToken.remove({ meetingId }, () => {
-      Logger.info(`Cleared Presentations Upload Token (${meetingId})`);
-    });
-  }
+    try {
+      const numberAffected = PresentationUploadToken.remove({ meetingId });
 
-  // clearing presentations for the whole server
-  return PresentationUploadToken.remove({}, () => {
-    Logger.info('Cleared Presentations Upload Token (all)');
-  });
+      if (numberAffected) {
+        Logger.info(`Cleared Presentations Upload Token (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.info(`Error on clearing Presentations Upload Token (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      // clearing presentations for the whole server
+      const numberAffected = PresentationUploadToken.remove({});
+
+      if (numberAffected) {
+        Logger.info('Cleared Presentations Upload Token (all)');
+      }
+    } catch (err) {
+      Logger.info(`Error on clearing Presentations Upload Token (all). ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentations/server/handlers/presentationConversionUpdate.js b/bigbluebutton-html5/imports/api/presentations/server/handlers/presentationConversionUpdate.js
index b727afbd64fbd23e332491dc0446fdba0d05131b..96bd6b576102252c1390a5e53e9a6cf41a035cea 100755
--- a/bigbluebutton-html5/imports/api/presentations/server/handlers/presentationConversionUpdate.js
+++ b/bigbluebutton-html5/imports/api/presentations/server/handlers/presentationConversionUpdate.js
@@ -73,18 +73,15 @@ export default function handlePresentationConversionUpdate({ body }, meetingId)
     $set: Object.assign({ meetingId, podId }, statusModifier),
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Updating conversion status presentation to collection: ${err}`);
-    }
+  try {
+    const { insertedId } = Presentations.upsert(selector, modifier);
 
-    const { insertedId } = numChanged;
     if (insertedId) {
-      return Logger.info(`Updated presentation conversion status=${status} id=${presentationId} meeting=${meetingId}`);
+      Logger.info(`Updated presentation conversion status=${status} id=${presentationId} meeting=${meetingId}`);
+    } else {
+      Logger.debug('Upserted presentation conversion', { status, presentationId, meetingId });
     }
-
-    return Logger.debug('Upserted presentation conversion', { status, presentationId, meetingId });
-  };
-
-  return Presentations.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Updating conversion status presentation to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentations/server/modifiers/addPresentation.js b/bigbluebutton-html5/imports/api/presentations/server/modifiers/addPresentation.js
index a9c7f689f0d2d0c0fd17409d90686c43ab3da833..2050e9ee52e931f782f43f7247a4247e3467049e 100755
--- a/bigbluebutton-html5/imports/api/presentations/server/modifiers/addPresentation.js
+++ b/bigbluebutton-html5/imports/api/presentations/server/modifiers/addPresentation.js
@@ -66,24 +66,20 @@ export default function addPresentation(meetingId, podId, presentation) {
     }, flat(presentation, { safe: true })),
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Adding presentation to collection: ${err}`);
-    }
+  try {
+    const { insertedId } = Presentations.upsert(selector, modifier);
 
     addSlides(meetingId, podId, presentation.id, presentation.pages);
 
-    const { insertedId } = numChanged;
     if (insertedId) {
       if (presentation.current) {
         setCurrentPresentation(meetingId, podId, presentation.id);
+        Logger.info(`Added presentation id=${presentation.id} meeting=${meetingId}`);
+      } else {
+        Logger.info(`Upserted presentation id=${presentation.id} meeting=${meetingId}`);
       }
-
-      return Logger.info(`Added presentation id=${presentation.id} meeting=${meetingId}`);
     }
-
-    return Logger.info(`Upserted presentation id=${presentation.id} meeting=${meetingId}`);
-  };
-
-  return Presentations.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Adding presentation to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentations/server/modifiers/clearPresentations.js b/bigbluebutton-html5/imports/api/presentations/server/modifiers/clearPresentations.js
index d7ec7b9908118935a9eccfe4b203628610a9c36a..e8a788542303567d225928c0baa18b4ddf03378c 100644
--- a/bigbluebutton-html5/imports/api/presentations/server/modifiers/clearPresentations.js
+++ b/bigbluebutton-html5/imports/api/presentations/server/modifiers/clearPresentations.js
@@ -4,20 +4,39 @@ import Logger from '/imports/startup/server/logger';
 export default function clearPresentations(meetingId, podId) {
   // clearing presentations for 1 pod
   if (meetingId && podId) {
-    return Presentations.remove({ meetingId, podId }, () => {
-      Logger.info(`Cleared Presentations (${meetingId}, ${podId})`);
-    });
+    try {
+      const numberAffected = Presentations.remove({ meetingId, podId });
+
+      if (numberAffected) {
+        Logger.info(`Cleared Presentations (${meetingId}, ${podId})`);
+        return true;
+      }
+    } catch (err) {
+      Logger.error(`Error on cleaning Presentations (${meetingId}, ${podId}). ${err}`);
+      return false;
+    }
   }
 
   // clearing presentations for the whole meeting
   if (meetingId) {
-    return Presentations.remove({ meetingId }, () => {
-      Logger.info(`Cleared Presentations (${meetingId})`);
-    });
-  }
+    try {
+      const numberAffected = Presentations.remove({ meetingId });
 
-  // clearing presentations for the whole server
-  return Presentations.remove({}, () => {
-    Logger.info('Cleared Presentations (all)');
-  });
+      if (numberAffected) {
+        Logger.info(`Cleared Presentations (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.error(`Error on cleaning Presentations (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      const numberAffected = Presentations.remove({});
+
+      if (numberAffected) {
+        Logger.info('Cleared Presentations (all)');
+      }
+    } catch (err) {
+      Logger.error(`Error on cleaning Presentations (all). ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentations/server/modifiers/removePresentation.js b/bigbluebutton-html5/imports/api/presentations/server/modifiers/removePresentation.js
index cb3748a7abeafefeea558391a29458d6db8b055f..6ed2c3f9cf302a3ab4c75dc2606d0dd4b91eef46 100644
--- a/bigbluebutton-html5/imports/api/presentations/server/modifiers/removePresentation.js
+++ b/bigbluebutton-html5/imports/api/presentations/server/modifiers/removePresentation.js
@@ -15,17 +15,14 @@ export default function removePresentation(meetingId, podId, presentationId) {
     id: presentationId,
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Removing presentation from collection: ${err}`);
-      return;
-    }
+  try {
+    const numberAffected = Presentations.remove(selector);
 
-    if (numChanged) {
+    if (numberAffected) {
       clearSlidesPresentation(meetingId, presentationId);
       Logger.info(`Removed presentation id=${presentationId} meeting=${meetingId}`);
     }
-  };
-
-  return Presentations.remove(selector, cb);
+  } catch (err) {
+    Logger.error(`Removing presentation from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/presentations/server/modifiers/setCurrentPresentation.js b/bigbluebutton-html5/imports/api/presentations/server/modifiers/setCurrentPresentation.js
index a741eb237487524435f03577be4d1d140d4594fd..32a33a6354637a46683621b8d163b2577f8c749a 100644
--- a/bigbluebutton-html5/imports/api/presentations/server/modifiers/setCurrentPresentation.js
+++ b/bigbluebutton-html5/imports/api/presentations/server/modifiers/setCurrentPresentation.js
@@ -18,10 +18,11 @@ export default function setCurrentPresentation(meetingId, podId, presentationId)
     },
     callback: (err) => {
       if (err) {
-        return Logger.error(`Unsetting the current presentation: ${err}`);
+        Logger.error(`Unsetting the current presentation: ${err}`);
+        return;
       }
 
-      return Logger.info('Unsetted as current presentation');
+      Logger.info('Unsetted as current presentation');
     },
   };
 
@@ -36,10 +37,11 @@ export default function setCurrentPresentation(meetingId, podId, presentationId)
     },
     callback: (err) => {
       if (err) {
-        return Logger.error(`Setting as current presentation id=${presentationId}: ${err}`);
+        Logger.error(`Setting as current presentation id=${presentationId}: ${err}`);
+        return;
       }
 
-      return Logger.info(`Setted as current presentation id=${presentationId}`);
+      Logger.info(`Setted as current presentation id=${presentationId}`);
     },
   };
 
diff --git a/bigbluebutton-html5/imports/api/presentations/server/modifiers/setPresentationDownloadable.js b/bigbluebutton-html5/imports/api/presentations/server/modifiers/setPresentationDownloadable.js
index b61eabba17fd3450dc9eb566dc5edf944fe53c77..3a7397016fac66499fb2a7061a0131da1e211a9a 100644
--- a/bigbluebutton-html5/imports/api/presentations/server/modifiers/setPresentationDownloadable.js
+++ b/bigbluebutton-html5/imports/api/presentations/server/modifiers/setPresentationDownloadable.js
@@ -21,16 +21,13 @@ export default function setPresentationDownloadable(meetingId, podId,
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Could not set downloadable on pres {${presentationId} in meeting {${meetingId}} ${err}`);
-      return;
-    }
+  try {
+    const { numberAffected } = Presentations.upsert(selector, modifier);
 
-    if (numChanged) {
+    if (numberAffected) {
       Logger.info(`Set downloadable status on presentation {${presentationId} in meeting {${meetingId}}`);
     }
-  };
-
-  return Presentations.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Could not set downloadable on pres {${presentationId} in meeting {${meetingId}} ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/screenshare/server/modifiers/addScreenshare.js b/bigbluebutton-html5/imports/api/screenshare/server/modifiers/addScreenshare.js
index e1c38b9d18d0deca246dea55076be92056227cc1..4ed513d7b454b4d3bd8931a21ccdc6a19f103766 100644
--- a/bigbluebutton-html5/imports/api/screenshare/server/modifiers/addScreenshare.js
+++ b/bigbluebutton-html5/imports/api/screenshare/server/modifiers/addScreenshare.js
@@ -17,13 +17,13 @@ export default function addScreenshare(meetingId, body) {
     },
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Adding screenshare to collection: ${err}`);
-    }
-
-    return Logger.info(`Upserted screenshare id=${body.screenshareConf}`);
-  };
+  try {
+    const { numberAffected } = Screenshare.upsert(selector, modifier);
 
-  return Screenshare.upsert(selector, modifier, cb);
+    if (numberAffected) {
+      Logger.info(`Upserted screenshare id=${body.screenshareConf}`);
+    }
+  } catch (err) {
+    Logger.error(`Adding screenshare to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/screenshare/server/modifiers/clearScreenshare.js b/bigbluebutton-html5/imports/api/screenshare/server/modifiers/clearScreenshare.js
index 0b7265a69716656b8ef3ac7c5407fc2973ef9acc..06797304812187738cba48fc0278ec96fe721139 100644
--- a/bigbluebutton-html5/imports/api/screenshare/server/modifiers/clearScreenshare.js
+++ b/bigbluebutton-html5/imports/api/screenshare/server/modifiers/clearScreenshare.js
@@ -2,16 +2,19 @@ import Logger from '/imports/startup/server/logger';
 import Screenshare from '/imports/api/screenshare';
 
 export default function clearScreenshare(meetingId, screenshareConf) {
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`removing screenshare to collection: ${err}`);
-    }
+  try {
+    let numberAffected;
 
-    return Logger.info(`removed screenshare meetingId=${meetingId} id=${screenshareConf}`);
-  };
+    if (meetingId && screenshareConf) {
+      numberAffected = Screenshare.remove({ meetingId, 'screenshare.screenshareConf': screenshareConf });
+    } else {
+      numberAffected = Screenshare.remove({});
+    }
 
-  if (meetingId && screenshareConf) {
-    return Screenshare.remove({ meetingId, 'screenshare.screenshareConf': screenshareConf }, cb);
+    if (numberAffected) {
+      Logger.info(`removed screenshare meetingId=${meetingId} id=${screenshareConf}`);
+    }
+  } catch (err) {
+    Logger.error(`removing screenshare to collection: ${err}`);
   }
-  return Screenshare.remove({}, cb);
 }
diff --git a/bigbluebutton-html5/imports/api/slides/server/modifiers/addSlide.js b/bigbluebutton-html5/imports/api/slides/server/modifiers/addSlide.js
index e361d37b2d9819a82ac287587570159f1c8f43e5..64345cd31310d9d01bf4f268be6027a4d3aee01d 100755
--- a/bigbluebutton-html5/imports/api/slides/server/modifiers/addSlide.js
+++ b/bigbluebutton-html5/imports/api/slides/server/modifiers/addSlide.js
@@ -91,22 +91,6 @@ export default function addSlide(meetingId, podId, presentationId, slide) {
     ),
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Adding slide to collection: ${err}`);
-    }
-
-    const { insertedId } = numChanged;
-
-    requestWhiteboardHistory(meetingId, slideId);
-
-    if (insertedId) {
-      return Logger.info(`Added slide id=${slideId} pod=${podId} presentation=${presentationId}`);
-    }
-
-    return Logger.info(`Upserted slide id=${slideId} pod=${podId} presentation=${presentationId}`);
-  };
-
   const imageSizeUri = (loadSlidesFromHttpAlways ? imageUri.replace(/^https/i, 'http') : imageUri);
 
   return fetchImageSizes(imageSizeUri)
@@ -129,7 +113,19 @@ export default function addSlide(meetingId, podId, presentationId, slide) {
         addSlidePositions(meetingId, podId, presentationId, slideId, slidePosition);
       }
 
-      return Slides.upsert(selector, modifier, cb);
+      try {
+        const { insertedId, numberAffected } = Slides.upsert(selector, modifier);
+
+        requestWhiteboardHistory(meetingId, slideId);
+
+        if (insertedId) {
+          Logger.info(`Added slide id=${slideId} pod=${podId} presentation=${presentationId}`);
+        } else if (numberAffected) {
+          Logger.info(`Upserted slide id=${slideId} pod=${podId} presentation=${presentationId}`);
+        }
+      } catch (err) {
+        Logger.error(`Error on adding slide to collection: ${err}`);
+      }
     })
     .catch(reason => Logger.error(`Error parsing image size. ${reason}. slide=${slideId} uri=${imageUri}`));
 }
diff --git a/bigbluebutton-html5/imports/api/slides/server/modifiers/addSlidePositions.js b/bigbluebutton-html5/imports/api/slides/server/modifiers/addSlidePositions.js
index be4c94d6802e9b4c24ee7f2f8d1915778e6446f2..8ffa36a798256cde13daa91a69cea5e1ed735ea6 100755
--- a/bigbluebutton-html5/imports/api/slides/server/modifiers/addSlidePositions.js
+++ b/bigbluebutton-html5/imports/api/slides/server/modifiers/addSlidePositions.js
@@ -42,19 +42,15 @@ export default function addSlidePositions(
     ),
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Adding slide position to collection: ${err}`);
-    }
-
-    const { insertedId } = numChanged;
+  try {
+    const { insertedId } = SlidePositions.upsert(selector, modifier);
 
     if (insertedId) {
-      return Logger.info(`Added slide position id=${slideId} pod=${podId} presentation=${presentationId}`);
+      Logger.info(`Added slide position id=${slideId} pod=${podId} presentation=${presentationId}`);
+    } else {
+      Logger.info(`Upserted slide position id=${slideId} pod=${podId} presentation=${presentationId}`);
     }
-
-    return Logger.info(`Upserted slide position id=${slideId} pod=${podId} presentation=${presentationId}`);
-  };
-
-  return SlidePositions.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Adding slide position to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/slides/server/modifiers/changeCurrentSlide.js b/bigbluebutton-html5/imports/api/slides/server/modifiers/changeCurrentSlide.js
index 2a73fc6cae5390dc94c1a39ff03f4aaa674f460c..a83e7b5e56cb18395b7396ff5a8f471cd2f53e3a 100755
--- a/bigbluebutton-html5/imports/api/slides/server/modifiers/changeCurrentSlide.js
+++ b/bigbluebutton-html5/imports/api/slides/server/modifiers/changeCurrentSlide.js
@@ -20,10 +20,11 @@ export default function changeCurrentSlide(meetingId, podId, presentationId, sli
     },
     callback: (err) => {
       if (err) {
-        return Logger.error(`Unsetting the current slide: ${err}`);
+        Logger.error(`Unsetting the current slide: ${err}`);
+        return;
       }
 
-      return Logger.info('Unsetted the current slide');
+      Logger.info('Unsetted the current slide');
     },
   };
 
@@ -39,10 +40,11 @@ export default function changeCurrentSlide(meetingId, podId, presentationId, sli
     },
     callback: (err) => {
       if (err) {
-        return Logger.error(`Setting as current slide id=${slideId}: ${err}`);
+        Logger.error(`Setting as current slide id=${slideId}: ${err}`);
+        return;
       }
 
-      return Logger.info(`Setted as current slide id=${slideId}`);
+      Logger.info(`Setted as current slide id=${slideId}`);
     },
   };
 
diff --git a/bigbluebutton-html5/imports/api/slides/server/modifiers/clearSlides.js b/bigbluebutton-html5/imports/api/slides/server/modifiers/clearSlides.js
index 5c04c77c837e1cc1e87dfd13b0baa3d1e41c1417..d0ee149a27ba3623db7f73b8312c7bb48b50afbb 100755
--- a/bigbluebutton-html5/imports/api/slides/server/modifiers/clearSlides.js
+++ b/bigbluebutton-html5/imports/api/slides/server/modifiers/clearSlides.js
@@ -3,20 +3,36 @@ import Logger from '/imports/startup/server/logger';
 
 export default function clearSlides(meetingId) {
   if (meetingId) {
-    SlidePositions.remove({ meetingId }, () => {
-      Logger.info(`Cleared SlidePositions (${meetingId})`);
-    });
+    try {
+      const numberAffectedSlidePositions = SlidePositions.remove({ meetingId });
 
-    return Slides.remove({ meetingId }, () => {
-      Logger.info(`Cleared Slides (${meetingId})`);
-    });
-  }
+      const numberAffected = Slides.remove({ meetingId });
+
+      if (numberAffectedSlidePositions) {
+        Logger.info(`Cleared SlidePositions (${meetingId})`);
+      }
+
+      if (numberAffected) {
+        Logger.info(`Cleared Slides (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.error(`Error on cleaning Slides (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      const numberAffectedSlidePositions = SlidePositions.remove({ meetingId });
 
-  SlidePositions.remove({}, () => {
-    Logger.info('Cleared SlidePositions (all)');
-  });
+      const numberAffected = Slides.remove({ meetingId });
 
-  return Slides.remove({}, () => {
-    Logger.info('Cleared Slides (all)');
-  });
+      if (numberAffectedSlidePositions) {
+        Logger.info(`Cleared SlidePositions (${meetingId})`);
+      }
+
+      if (numberAffected) {
+        Logger.info('Cleared Slides (all)');
+      }
+    } catch (err) {
+      Logger.error(`Error on cleaning Slides (all). ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/slides/server/modifiers/clearSlidesPresentation.js b/bigbluebutton-html5/imports/api/slides/server/modifiers/clearSlidesPresentation.js
index 1413750d46dd70f0d9c4bd06f61a179c81862e47..38033ba00edf43e397d3511995b45a377062532b 100755
--- a/bigbluebutton-html5/imports/api/slides/server/modifiers/clearSlidesPresentation.js
+++ b/bigbluebutton-html5/imports/api/slides/server/modifiers/clearSlidesPresentation.js
@@ -14,17 +14,17 @@ export default function clearSlidesPresentation(meetingId, presentationId) {
 
   const whiteboardIds = Slides.find(selector, { fields: { id: 1 } }).map(row => row.id);
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Removing Slides from collection: ${err}`);
-    }
-
-    whiteboardIds.forEach(whiteboardId => clearAnnotations(meetingId, whiteboardId));
+  try {
+    SlidePositions.remove(selector);
 
-    return Logger.info(`Removed Slides where presentationId=${presentationId}`);
-  };
+    const numberAffected = Slides.remove(selector);
 
-  SlidePositions.remove(selector);
+    if (numberAffected) {
+      whiteboardIds.forEach(whiteboardId => clearAnnotations(meetingId, whiteboardId));
 
-  return Slides.remove(selector, cb);
+      Logger.info(`Removed Slides where presentationId=${presentationId}`);
+    }
+  } catch (err) {
+    Logger.error(`Removing Slides from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/slides/server/modifiers/resizeSlide.js b/bigbluebutton-html5/imports/api/slides/server/modifiers/resizeSlide.js
index 26f6af81a90b49923b0ff012ee1082a7ce2a7ab6..19da39973e2885a1b04e73ee825e44e0521c8932 100755
--- a/bigbluebutton-html5/imports/api/slides/server/modifiers/resizeSlide.js
+++ b/bigbluebutton-html5/imports/api/slides/server/modifiers/resizeSlide.js
@@ -48,18 +48,16 @@ export default function resizeSlide(meetingId, slide) {
       $set: calculatedData,
     };
 
-    const cb = (err, numChanged) => {
-      if (err) {
-        return Logger.error(`Resizing slide positions id=${pageId}: ${err}`);
-      }
+    try {
+      const numberAffected = SlidePositions.update(selector, modifier);
 
-      if (numChanged) {
-        return true;
+      if (numberAffected) {
+        Logger.debug(`Resized slide positions id=${pageId}`);
+      } else {
+        Logger.info(`No slide positions found with id=${pageId}`);
       }
-
-      return Logger.info(`No slide positions found with id=${pageId}`);
-    };
-
-    return SlidePositions.update(selector, modifier, cb);
+    } catch (err) {
+      Logger.error(`Resizing slide positions id=${pageId}: ${err}`);
+    }
   }
 }
diff --git a/bigbluebutton-html5/imports/api/users-infos/server/methods/removeUserInformation.js b/bigbluebutton-html5/imports/api/users-infos/server/methods/removeUserInformation.js
index 6bfd197f84b3307faf706458cc25e3b3f4db8f4c..4e35bbbb455c58b94bc994fcac98e0cd0fc4db81 100644
--- a/bigbluebutton-html5/imports/api/users-infos/server/methods/removeUserInformation.js
+++ b/bigbluebutton-html5/imports/api/users-infos/server/methods/removeUserInformation.js
@@ -8,11 +8,14 @@ export default function removeUserInformation() {
     meetingId,
     requesterUserId,
   };
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Removing user information from collection: ${err}`);
+
+  try {
+    const numberAffected = UserInfos.remove(selector);
+
+    if (numberAffected) {
+      Logger.info(`Removed user information: requester id=${requesterUserId} meeting=${meetingId}`);
     }
-    return Logger.info(`Removed user information: requester id=${requesterUserId} meeting=${meetingId}`);
-  };
-  return UserInfos.remove(selector, cb);
+  } catch (err) {
+    Logger.error(`Removing user information from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users-infos/server/modifiers/addUserInfo.js b/bigbluebutton-html5/imports/api/users-infos/server/modifiers/addUserInfo.js
index 034d4085e41b067df9d812f1eaf7674fc6650391..ca1491cf25726f6e1f22cf87c755df2eed50e7de 100644
--- a/bigbluebutton-html5/imports/api/users-infos/server/modifiers/addUserInfo.js
+++ b/bigbluebutton-html5/imports/api/users-infos/server/modifiers/addUserInfo.js
@@ -7,12 +7,14 @@ export default function addUserInfo(userInfo, requesterUserId, meetingId) {
     requesterUserId,
     userInfo,
   };
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Adding user information to collection: ${err}`);
-    }
-    return Logger.info(`Added user information: requester id=${requesterUserId} meeting=${meetingId}`);
-  };
 
-  return UserInfos.insert(info, cb);
+  try {
+    const numberAffected = UserInfos.insert(info);
+
+    if (numberAffected) {
+      Logger.info(`Added user information: requester id=${requesterUserId} meeting=${meetingId}`);
+    }
+  } catch (err) {
+    Logger.error(`Adding user information to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users-infos/server/modifiers/clearUserInfo.js b/bigbluebutton-html5/imports/api/users-infos/server/modifiers/clearUserInfo.js
index 30480202c238c10c3ac4eeb50bbe33bc889d44dd..1ad70fbf7738931ae3559997d3361640cadf6e9e 100644
--- a/bigbluebutton-html5/imports/api/users-infos/server/modifiers/clearUserInfo.js
+++ b/bigbluebutton-html5/imports/api/users-infos/server/modifiers/clearUserInfo.js
@@ -2,7 +2,13 @@ import UserInfos from '/imports/api/users-infos';
 import Logger from '/imports/startup/server/logger';
 
 export default function clearUsersInfo(meetingId) {
-  return UserInfos.remove({ meetingId }, () => {
-    Logger.info(`Cleared User Infos (${meetingId})`);
-  });
+  try {
+    const numberAffected = UserInfos.remove({ meetingId });
+
+    if (numberAffected) {
+      Logger.info(`Cleared User Infos (${meetingId})`);
+    }
+  } catch (err) {
+    Logger.error(`Error on clearing User Infos (${meetingId}). ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users-infos/server/modifiers/clearUserInfoForRequester.js b/bigbluebutton-html5/imports/api/users-infos/server/modifiers/clearUserInfoForRequester.js
index aff7531193012567ab06a1c68863296550e36d51..ee605005418a7b6e96576d79d6cc5f043af0212b 100644
--- a/bigbluebutton-html5/imports/api/users-infos/server/modifiers/clearUserInfoForRequester.js
+++ b/bigbluebutton-html5/imports/api/users-infos/server/modifiers/clearUserInfoForRequester.js
@@ -2,7 +2,13 @@ import UserInfos from '/imports/api/users-infos';
 import Logger from '/imports/startup/server/logger';
 
 export default function clearUsersInfoForRequester(meetingId, requesterUserId) {
-  return UserInfos.remove({ meetingId }, () => {
-    Logger.info(`Cleared User Infos requested by user=${requesterUserId}`);
-  });
+  try {
+    const numberAffected = UserInfos.remove({ meetingId });
+
+    if (numberAffected) {
+      Logger.info(`Cleared User Infos requested by user=${requesterUserId}`);
+    }
+  } catch (err) {
+    Logger.info(`Error on clearing User Infos requested by user=${requesterUserId}. ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users-settings/server/modifiers/addUserSetting.js b/bigbluebutton-html5/imports/api/users-settings/server/modifiers/addUserSetting.js
index 80ad1869b7c4154cb28e66ed4ab9596b53acfe81..e93a469af4fd7f5f37d340d1bc2ecc231df3a028 100644
--- a/bigbluebutton-html5/imports/api/users-settings/server/modifiers/addUserSetting.js
+++ b/bigbluebutton-html5/imports/api/users-settings/server/modifiers/addUserSetting.js
@@ -22,13 +22,13 @@ export default function addUserSetting(meetingId, userId, setting, value) {
     },
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Adding user setting to collection: ${err}`);
-    }
-
-    return Logger.verbose('Upserted user setting', { meetingId, userId, setting });
-  };
+  try {
+    const { numberAffected } = UserSettings.upsert(selector, modifier);
 
-  return UserSettings.upsert(selector, modifier, cb);
+    if (numberAffected) {
+      Logger.verbose('Upserted user setting', { meetingId, userId, setting });
+    }
+  } catch (err) {
+    Logger.error(`Adding user setting to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users-settings/server/modifiers/clearUsersSettings.js b/bigbluebutton-html5/imports/api/users-settings/server/modifiers/clearUsersSettings.js
index 887d6d25ba93d7461f57e2f62d22699426168626..8aa62c9575337a719fdcb240435d691537df2c73 100644
--- a/bigbluebutton-html5/imports/api/users-settings/server/modifiers/clearUsersSettings.js
+++ b/bigbluebutton-html5/imports/api/users-settings/server/modifiers/clearUsersSettings.js
@@ -2,7 +2,13 @@ import UserSettings from '/imports/api/users-settings';
 import Logger from '/imports/startup/server/logger';
 
 export default function clearUsersSettings(meetingId) {
-  return UserSettings.remove({ meetingId }, () => {
-    Logger.info(`Cleared User Settings (${meetingId})`);
-  });
+  try {
+    const numberAffected = UserSettings.remove({ meetingId });
+
+    if (numberAffected) {
+      Logger.info(`Cleared User Settings (${meetingId})`);
+    }
+  } catch (err) {
+    Logger.error(`Error on clearing User Settings (${meetingId}). ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/changeRole.js b/bigbluebutton-html5/imports/api/users/server/handlers/changeRole.js
index 143fb4b51c741cd00ba464e55a220c1a4cc7ecdb..4148a8d94c5da734bb0b4904977fbcde34887f0e 100644
--- a/bigbluebutton-html5/imports/api/users/server/handlers/changeRole.js
+++ b/bigbluebutton-html5/imports/api/users/server/handlers/changeRole.js
@@ -7,5 +7,5 @@ export default function handleChangeRole(payload, meetingId) {
 
   const { userId, role, changedBy } = payload.body;
 
-  return changeRole(role, userId, meetingId, changedBy);
+  changeRole(role, userId, meetingId, changedBy);
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/emojiStatus.js b/bigbluebutton-html5/imports/api/users/server/handlers/emojiStatus.js
index 7fe2a87a17a31a4b65f8b8df708722e622e1cb8a..4aad07c6b46489d9bd2d31af6f8dcc27acaba06c 100644
--- a/bigbluebutton-html5/imports/api/users/server/handlers/emojiStatus.js
+++ b/bigbluebutton-html5/imports/api/users/server/handlers/emojiStatus.js
@@ -20,16 +20,13 @@ export default function handleEmojiStatus({ body }, meetingId) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Assigning user emoji status: ${err}`);
-      return;
-    }
+  try {
+    const numberAffected = Users.update(selector, modifier);
 
-    if (numChanged) {
+    if (numberAffected) {
       Logger.info(`Assigned user emoji status ${emoji} id=${userId} meeting=${meetingId}`);
     }
-  };
-
-  return Users.update(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Assigning user emoji status: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js b/bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js
index 5cdbac7ccf2dc771f1be6bcdc0928ae432116c74..0018feea4c6755ce165398648e9c802db7e7a0da 100644
--- a/bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js
+++ b/bigbluebutton-html5/imports/api/users/server/handlers/presenterAssigned.js
@@ -61,5 +61,5 @@ export default function handlePresenterAssigned({ body }, meetingId) {
     return true;
   }
 
-  return changePresenter(false, prevPresenter.userId, meetingId, assignedBy);
+  changePresenter(false, prevPresenter.userId, meetingId, assignedBy);
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/userEjected.js b/bigbluebutton-html5/imports/api/users/server/handlers/userEjected.js
index 95568f555fc2eced0027f077873afbcd26861e43..c665c9720cfb428b9a14996258f82240c7e5e58c 100644
--- a/bigbluebutton-html5/imports/api/users/server/handlers/userEjected.js
+++ b/bigbluebutton-html5/imports/api/users/server/handlers/userEjected.js
@@ -4,5 +4,5 @@ export default function handleEjectedUser({ header, body }) {
   const { meetingId, userId } = header;
   const { reasonCode } = body;
 
-  return userEjected(meetingId, userId, reasonCode);
+  userEjected(meetingId, userId, reasonCode);
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/userInactivityInspect.js b/bigbluebutton-html5/imports/api/users/server/handlers/userInactivityInspect.js
index 24365a27fc2b6e4d16d79516664c907e07909243..cbe225f0bcbcae32ea19680454b745553f2224e4 100644
--- a/bigbluebutton-html5/imports/api/users/server/handlers/userInactivityInspect.js
+++ b/bigbluebutton-html5/imports/api/users/server/handlers/userInactivityInspect.js
@@ -10,5 +10,5 @@ export default function handleUserInactivityInspect({ header, body }, meetingId)
   check(meetingId, String);
 
 
-  return userInactivityInspect(userId, responseDelay);
+  userInactivityInspect(userId, responseDelay);
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/userJoined.js b/bigbluebutton-html5/imports/api/users/server/handlers/userJoined.js
index d546bd21621565f836ee43b0c7a3f29a1187a20a..122503cf146ad3217ea14b5495dd3a3c75ef90ab 100644
--- a/bigbluebutton-html5/imports/api/users/server/handlers/userJoined.js
+++ b/bigbluebutton-html5/imports/api/users/server/handlers/userJoined.js
@@ -7,5 +7,5 @@ export default function handleUserJoined({ body }, meetingId) {
 
   check(user, Object);
 
-  return addUser(meetingId, user);
+  addUser(meetingId, user);
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js b/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js
index 1c5bd46a8df5cfaca3e548c17378596773151b33..42dd7e2e7fed6fc970ed7a8526ceadad47ff251b 100644
--- a/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js
+++ b/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js
@@ -108,23 +108,21 @@ export default function handleValidateAuthToken({ body }, meetingId) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Validating auth token: ${err}`);
-    }
+  try {
+    const numberAffected = Users.update(selector, modifier);
 
-    if (numChanged) {
+    if (numberAffected) {
       if (valid) {
         const sessionUserId = `${meetingId}-${userId}`;
         const currentConnectionId = User.connectionId ? User.connectionId : false;
         clearOtherSessions(sessionUserId, currentConnectionId);
       }
 
-      return Logger.info(`Validated auth token as ${valid} user=${userId} meeting=${meetingId}`);
+      Logger.info(`Validated auth token as ${valid} user=${userId} meeting=${meetingId}`);
+    } else {
+      Logger.info('No auth to validate');
     }
-
-    return Logger.info('No auth to validate');
-  };
-
-  Users.update(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Validating auth token: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/methods/userLeaving.js b/bigbluebutton-html5/imports/api/users/server/methods/userLeaving.js
index 36abe39a2c37a71837be4289ce484c809c9e03b9..a075d36662f02270aad7bb58b6538929d0c8ac27 100755
--- a/bigbluebutton-html5/imports/api/users/server/methods/userLeaving.js
+++ b/bigbluebutton-html5/imports/api/users/server/methods/userLeaving.js
@@ -20,7 +20,8 @@ export default function userLeaving(meetingId, userId, connectionId) {
   const User = Users.findOne(selector);
 
   if (!User) {
-    return Logger.info(`Skipping userLeaving. Could not find ${userId} in ${meetingId}`);
+    Logger.info(`Skipping userLeaving. Could not find ${userId} in ${meetingId}`);
+    return;
   }
 
   const auth = AuthTokenValidation.findOne({
diff --git a/bigbluebutton-html5/imports/api/users/server/methods/userLeftMeeting.js b/bigbluebutton-html5/imports/api/users/server/methods/userLeftMeeting.js
index 269e7df8b50187caf5202c8fa8f03beb0bf5bb42..38e31316ac795c70f46fd8f980c59e1f15b90504 100644
--- a/bigbluebutton-html5/imports/api/users/server/methods/userLeftMeeting.js
+++ b/bigbluebutton-html5/imports/api/users/server/methods/userLeftMeeting.js
@@ -12,25 +12,24 @@ export default function userLeftMeeting() { // TODO-- spread the code to method/
     userId: requesterUserId,
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`leaving dummy user to collection: ${err}`);
-      return;
-    }
-    if (numChanged) {
+  try {
+    const numberAffected = Users.update(selector, { $set: { loggedOut: true } });
+
+    if (numberAffected) {
       Logger.info(`user left id=${requesterUserId} meeting=${meetingId}`);
     }
-  };
-
-  ClientConnections.removeClientConnection(this.userId, this.connection.id);
+    ClientConnections.removeClientConnection(this.userId, this.connection.id);
 
-  return Users.update(
-    selector,
-    {
-      $set: {
-        loggedOut: true,
+    Users.update(
+      selector,
+      {
+        $set: {
+          loggedOut: true,
+        },
       },
-    },
-    cb,
-  );
+      cb,
+    );
+  } catch (err) {
+    Logger.error(`leaving dummy user to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/addUser.js b/bigbluebutton-html5/imports/api/users/server/modifiers/addUser.js
index 68c2452b0efb5bd9c3a253f5a5f347d0afb4c7dd..94d7156119a9c312e3e2f618d04b8e8afe673b9f 100755
--- a/bigbluebutton-html5/imports/api/users/server/modifiers/addUser.js
+++ b/bigbluebutton-html5/imports/api/users/server/modifiers/addUser.js
@@ -94,18 +94,15 @@ export default function addUser(meetingId, userData) {
     });
   }
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Adding user to collection: ${err}`);
-    }
+  try {
+    const { insertedId } = Users.upsert(selector, modifier);
 
-    const { insertedId } = numChanged;
     if (insertedId) {
-      return Logger.info(`Added user id=${userId} meeting=${meetingId}`);
+      Logger.info(`Added user id=${userId} meeting=${meetingId}`);
+    } else {
+      Logger.info(`Upserted user id=${userId} meeting=${meetingId}`);
     }
-
-    return Logger.info(`Upserted user id=${userId} meeting=${meetingId}`);
-  };
-
-  return Users.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Adding user to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/changePresenter.js b/bigbluebutton-html5/imports/api/users/server/modifiers/changePresenter.js
index 521e3826aa01cbb343b96ee9722a95277872f9ec..dcfe69f36a2ee951340ac0e242b945c7887e2583 100755
--- a/bigbluebutton-html5/imports/api/users/server/modifiers/changePresenter.js
+++ b/bigbluebutton-html5/imports/api/users/server/modifiers/changePresenter.js
@@ -15,23 +15,20 @@ export default function changePresenter(presenter, userId, meetingId, changedBy)
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Changed user role: ${err}`);
+  try {
+    const meeting = Meetings.findOne({ meetingId });
+    if (meeting && meeting.externalVideoUrl) {
+      Logger.info(`ChangePresenter:There is external video being shared. Stopping it due to presenter change, ${meeting.externalVideoUrl}`);
+      stopWatchingExternalVideo({ meetingId, requesterUserId: userId });
     }
 
-    if (numChanged) {
-      return Logger.info(`Changed presenter=${presenter} id=${userId} meeting=${meetingId}`
-      + `${changedBy ? ` changedBy=${changedBy}` : ''}`);
-    }
-
-    return null;
-  };
+    const numberAffected = Users.update(selector, modifier);
 
-  const meeting = Meetings.findOne({ meetingId });
-  if (meeting && meeting.externalVideoUrl) {
-    Logger.info(`ChangePresenter:There is external video being shared. Stopping it due to presenter change, ${meeting.externalVideoUrl}`);
-    stopWatchingExternalVideo({ meetingId, requesterUserId: userId });
+    if (numberAffected) {
+      Logger.info(`Changed presenter=${presenter} id=${userId} meeting=${meetingId}`
+        + `${changedBy ? ` changedBy=${changedBy}` : ''}`);
+    }
+  } catch (err) {
+    Logger.error(`Changed user role: ${err}`);
   }
-  return Users.update(selector, modifier, cb);
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/changeRole.js b/bigbluebutton-html5/imports/api/users/server/modifiers/changeRole.js
index b09b4d9aafbc7b8a28ea7c09db6dbe9843b35c17..400eaac0cd17fc49a418c24735c6dc32e0ee0474 100644
--- a/bigbluebutton-html5/imports/api/users/server/modifiers/changeRole.js
+++ b/bigbluebutton-html5/imports/api/users/server/modifiers/changeRole.js
@@ -13,18 +13,14 @@ export default function changeRole(role, userId, meetingId, changedBy) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Changed user role: ${err}`);
-    }
+  try {
+    const numberAffected = Users.update(selector, modifier);
 
-    if (numChanged) {
-      return Logger.info(`Changed user role=${role} id=${userId} meeting=${meetingId}`
-      + `${changedBy ? ` changedBy=${changedBy}` : ''}`);
+    if (numberAffected) {
+      Logger.info(`Changed user role=${role} id=${userId} meeting=${meetingId}`
+        + `${changedBy ? ` changedBy=${changedBy}` : ''}`);
     }
-
-    return null;
-  };
-
-  return Users.update(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Changed user role: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/clearUsers.js b/bigbluebutton-html5/imports/api/users/server/modifiers/clearUsers.js
index 458eb4ef68d94e978f8dcc65b7559739a95a2053..c6784ee5649a7f8f0926bd971e9a2dfac988f6d9 100644
--- a/bigbluebutton-html5/imports/api/users/server/modifiers/clearUsers.js
+++ b/bigbluebutton-html5/imports/api/users/server/modifiers/clearUsers.js
@@ -1,16 +1,26 @@
 import Logger from '/imports/startup/server/logger';
 import Users from '/imports/api/users/index';
 
-const clearUsers = (meetingId) => {
+export default function clearUsers(meetingId) {
   if (meetingId) {
-    return Users.remove({ meetingId }, () => {
-      Logger.info(`Cleared Users (${meetingId})`);
-    });
-  }
+    try {
+      const numberAffected = Users.remove({ meetingId });
 
-  return Users.remove({}, () => {
-    Logger.info('Cleared Users (all)');
-  });
-};
+      if (numberAffected) {
+        Logger.info(`Cleared Users (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.error(`Error clearing Users (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      const numberAffected = Users.remove({});
 
-export default clearUsers;
+      if (numberAffected) {
+        Logger.info('Cleared Users (all)');
+      }
+    } catch (err) {
+      Logger.error(`Error clearing Users (all). ${err}`);
+    }
+  }
+}
diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/createDummyUser.js b/bigbluebutton-html5/imports/api/users/server/modifiers/createDummyUser.js
index 9625884aae452b1408ed62cc25f80e4f66e8af7b..c8551f0d634e656ab9a5d70a6119246334ad6510 100644
--- a/bigbluebutton-html5/imports/api/users/server/modifiers/createDummyUser.js
+++ b/bigbluebutton-html5/imports/api/users/server/modifiers/createDummyUser.js
@@ -21,15 +21,13 @@ export default function createDummyUser(meetingId, userId, authToken) {
     validated: null,
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Creating dummy user to collection: ${err}`);
-      return;
-    }
-    if (numChanged) {
+  try {
+    const insertedId = Users.insert(doc);
+
+    if (insertedId) {
       Logger.info(`Created dummy user id=${userId} token=${authToken} meeting=${meetingId}`);
     }
-  };
-
-  return Users.insert(doc, cb);
+  } catch (err) {
+    Logger.error(`Creating dummy user to collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js b/bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js
index e783c58b8f3fe3aa04a9018e3a5a2382d7350809..a86e2c44a39c9f624f4cd2de49bc3fd29e4df550 100755
--- a/bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js
+++ b/bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js
@@ -31,11 +31,8 @@ export default function removeUser(meetingId, userId) {
     userId,
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Removing user from collection: ${err}`);
-    }
-
+  try {
+    VideoStreams.remove({ meetingId, userId });
     const sessionUserId = `${meetingId}-${userId}`;
 
     ClientConnections.removeClientConnection(`${meetingId}--${userId}`);
@@ -44,8 +41,10 @@ export default function removeUser(meetingId, userId) {
 
     clearUserInfoForRequester(meetingId, userId);
 
-    return Logger.info(`Removed user id=${userId} meeting=${meetingId}`);
-  };
-  VideoStreams.remove({ meetingId, userId });
-  return Users.remove(selector, cb);
+    Users.remove(selector, cb);
+
+    Logger.info(`Removed user id=${userId} meeting=${meetingId}`);
+  } catch (err) {
+    Logger.error(`Removing user from Users collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/setConnectionIdAndAuthToken.js b/bigbluebutton-html5/imports/api/users/server/modifiers/setConnectionIdAndAuthToken.js
index ec044179f313d02b5172a452eee293941c62a69c..aba77f300dceb4484802c738207391f9ec26c201 100644
--- a/bigbluebutton-html5/imports/api/users/server/modifiers/setConnectionIdAndAuthToken.js
+++ b/bigbluebutton-html5/imports/api/users/server/modifiers/setConnectionIdAndAuthToken.js
@@ -20,16 +20,13 @@ export default function setConnectionIdAndAuthToken(meetingId, userId, connectio
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Updating connectionId user=${userId}: ${err}`);
-      return;
-    }
+  try {
+    const numberAffected = Users.update(selector, modifier);
 
-    if (numChanged) {
+    if (numberAffected) {
       Logger.info(`Updated connectionId and authToken user=${userId} connectionId=${connectionId} meeting=${meetingId} authToken=${authToken}`);
     }
-  };
-
-  return Users.update(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Updating connectionId user=${userId}: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/setUserEffectiveConnectionType.js b/bigbluebutton-html5/imports/api/users/server/modifiers/setUserEffectiveConnectionType.js
index 94543f5a019bd448a50e357fe928505bcd86fee7..d9888ced73b8a175fab623ada7fb874262115d84 100644
--- a/bigbluebutton-html5/imports/api/users/server/modifiers/setUserEffectiveConnectionType.js
+++ b/bigbluebutton-html5/imports/api/users/server/modifiers/setUserEffectiveConnectionType.js
@@ -19,15 +19,13 @@ export default function setUserEffectiveConnectionType(meetingId, userId, effect
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Updating user ${userId}: ${err}`);
-    }
+  try {
+    const numberAffected = Users.update(selector, modifier);
 
-    if (numChanged) {
+    if (numberAffected) {
       Logger.info(`Updated user ${userId} effective connection to ${effectiveConnectionType} in meeting ${meetingId}`);
     }
-  };
-
-  return Users.update(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Updating user ${userId}: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/userEjected.js b/bigbluebutton-html5/imports/api/users/server/modifiers/userEjected.js
index 61d2cb12cbba668f904644d79c2775cf6750052b..95a8c465ccc69d24bcf6e95ec15b181d3ccf8f6d 100644
--- a/bigbluebutton-html5/imports/api/users/server/modifiers/userEjected.js
+++ b/bigbluebutton-html5/imports/api/users/server/modifiers/userEjected.js
@@ -20,18 +20,14 @@ export default function userEjected(meetingId, userId, ejectedReason) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Ejecting user from collection: ${err}`);
-    }
+  try {
+    const numberAffected = Users.update(selector, modifier);
 
-    if (numChanged) {
+    if (numberAffected) {
       clearUserInfoForRequester(meetingId, userId);
-      return Logger.info(`Ejected user id=${userId} meeting=${meetingId} reason=${ejectedReason}`);
+      Logger.info(`Ejected user id=${userId} meeting=${meetingId} reason=${ejectedReason}`);
     }
-
-    return null;
-  };
-
-  return Users.update(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Ejecting user from collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/userInactivityInspect.js b/bigbluebutton-html5/imports/api/users/server/modifiers/userInactivityInspect.js
index 5dfcfea6f4b87be34f967ae7b2e0142a113eb12d..eb35a707ab722fe28682dd8aa43ee37a3ecf0f0b 100644
--- a/bigbluebutton-html5/imports/api/users/server/modifiers/userInactivityInspect.js
+++ b/bigbluebutton-html5/imports/api/users/server/modifiers/userInactivityInspect.js
@@ -18,17 +18,13 @@ export default function userInactivityInspect(userId, responseDelay) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Inactivity check for user ${userId}: ${err}`);
-    }
+  try {
+    const { numberAffected } = Users.update(selector, modifier);
 
-    if (numChanged) {
-      return Logger.info(`Updated user ${userId} with inactivity inspect`);
+    if (numberAffected) {
+      Logger.info(`Updated user ${userId} with inactivity inspect`);
     }
-
-    return null;
-  };
-
-  return Users.update(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Inactivity check for user ${userId}: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/video-streams/server/modifiers/clearVideoStreams.js b/bigbluebutton-html5/imports/api/video-streams/server/modifiers/clearVideoStreams.js
index 9017d745dc1f5a308fe9380391012355dc22e0d1..7013f02a9c508c7fc7d3543bf6fee8588f0f1b16 100644
--- a/bigbluebutton-html5/imports/api/video-streams/server/modifiers/clearVideoStreams.js
+++ b/bigbluebutton-html5/imports/api/video-streams/server/modifiers/clearVideoStreams.js
@@ -3,12 +3,24 @@ import VideoStreams from '/imports/api/video-streams';
 
 export default function clearVideoStreams(meetingId) {
   if (meetingId) {
-    return VideoStreams.remove({ meetingId }, () => {
-      Logger.info(`Cleared VideoStreams in (${meetingId})`);
-    });
-  }
+    try {
+      const numberAffected = VideoStreams.remove({ meetingId });
+
+      if (numberAffected) {
+        Logger.info(`Cleared VideoStreams in (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing VideoStreams (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      const numberAffected = VideoStreams.remove({});
 
-  return VideoStreams.remove({}, () => {
-    Logger.info('Cleared VideoStreams in all meetings');
-  });
+      if (numberAffected) {
+        Logger.info('Cleared VideoStreams in all meetings');
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing VideoStreams (all). ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/video-streams/server/modifiers/sharedWebcam.js b/bigbluebutton-html5/imports/api/video-streams/server/modifiers/sharedWebcam.js
index c3f9362a7dc0fcd5883a7efef13a4d9c5344d11f..6be33926f742b29439a2cd156b7f5df30b16c690 100644
--- a/bigbluebutton-html5/imports/api/video-streams/server/modifiers/sharedWebcam.js
+++ b/bigbluebutton-html5/imports/api/video-streams/server/modifiers/sharedWebcam.js
@@ -27,15 +27,13 @@ export default function sharedWebcam(meetingId, userId, stream) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Error setting stream: ${err}`);
-    }
+  try {
+    const { insertedId } = VideoStreams.upsert(selector, modifier);
 
-    if (numChanged) {
-      return Logger.info(`Updated stream=${stream} meeting=${meetingId}`);
+    if (insertedId) {
+      Logger.info(`Updated stream=${stream} meeting=${meetingId}`);
     }
-  };
-
-  return VideoStreams.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Error setting stream: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/video-streams/server/modifiers/unsharedWebcam.js b/bigbluebutton-html5/imports/api/video-streams/server/modifiers/unsharedWebcam.js
index 189bc5b5ef34c4990d7ba904881073a7e4e7330b..5d9ab4da5a0cf577e545a14f3393da2a543b2895 100644
--- a/bigbluebutton-html5/imports/api/video-streams/server/modifiers/unsharedWebcam.js
+++ b/bigbluebutton-html5/imports/api/video-streams/server/modifiers/unsharedWebcam.js
@@ -16,15 +16,11 @@ export default function unsharedWebcam(meetingId, userId, stream) {
     deviceId,
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Error removing stream: ${err}`);
-    }
+  try {
+    VideoStreams.remove(selector);
 
-    if (numChanged) {
-      return Logger.info(`Removed stream=${stream} meeting=${meetingId}`);
-    }
-  };
-
-  return VideoStreams.remove(selector, cb);
+    Logger.info(`Removed stream=${stream} meeting=${meetingId}`);
+  } catch (err) {
+    Logger.error(`Error removing stream: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/voice-call-states/server/handlers/voiceCallStateEvent.js b/bigbluebutton-html5/imports/api/voice-call-states/server/handlers/voiceCallStateEvent.js
index ec19b8ba9995c86471b3696daffdadae115807dc..d713e7a91e4e62f4485ea2735d891a02fc278066 100644
--- a/bigbluebutton-html5/imports/api/voice-call-states/server/handlers/voiceCallStateEvent.js
+++ b/bigbluebutton-html5/imports/api/voice-call-states/server/handlers/voiceCallStateEvent.js
@@ -36,15 +36,15 @@ export default function handleVoiceCallStateEvent({ body }, meetingId) {
     },
   };
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Update voice call state=${userId}: ${err}`);
-    }
-
-    return Logger.debug('Update voice call', {
-      state: userId, meetingId, clientSession, callState,
-    });
-  };
+  try {
+    const { numberAffected } = VoiceCallState.upsert(selector, modifier);
 
-  return VoiceCallState.upsert(selector, modifier, cb);
+    if (numberAffected) {
+      Logger.debug('Update voice call', {
+        state: userId, meetingId, clientSession, callState,
+      });
+    }
+  } catch (err) {
+    Logger.error(`Update voice call state=${userId}: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/voice-call-states/server/modifiers/clearVoiceCallStates.js b/bigbluebutton-html5/imports/api/voice-call-states/server/modifiers/clearVoiceCallStates.js
index 6eed55eec658887b0cd11fdb11e8b287072b9dfb..11fce2e4c55e1b0fd0393f4e503d0a79592f6d99 100644
--- a/bigbluebutton-html5/imports/api/voice-call-states/server/modifiers/clearVoiceCallStates.js
+++ b/bigbluebutton-html5/imports/api/voice-call-states/server/modifiers/clearVoiceCallStates.js
@@ -3,12 +3,24 @@ import VoiceCallStates from '/imports/api/voice-users';
 
 export default function clearVoiceCallStates(meetingId) {
   if (meetingId) {
-    return VoiceCallStates.remove({ meetingId }, () => {
-      Logger.info(`Cleared VoiceCallStates in (${meetingId})`);
-    });
-  }
+    try {
+      const numberAffected = VoiceCallStates.remove({ meetingId });
+
+      if (numberAffected) {
+        Logger.info(`Cleared VoiceCallStates in (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.info(`Error on clearing VoiceCallStates in (${meetingId}). ${err}`);
+    }
+  } else {
+    try {
+      const numberAffected = VoiceCallStates.remove({});
 
-  return VoiceCallStates.remove({}, () => {
-    Logger.info('Cleared VoiceCallStates in all meetings');
-  });
+      if (numberAffected) {
+        Logger.info('Cleared VoiceCallStates in all meetings');
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing VoiceCallStates in all meetings. ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/voice-users/server/handlers/meetingMuted.js b/bigbluebutton-html5/imports/api/voice-users/server/handlers/meetingMuted.js
index 9d14a1dc8bc2ae6e9722f5d4a6a2dfcefb5be146..b67db9f5d4eb7327b35b945f729e15bae705d5fe 100755
--- a/bigbluebutton-html5/imports/api/voice-users/server/handlers/meetingMuted.js
+++ b/bigbluebutton-html5/imports/api/voice-users/server/handlers/meetingMuted.js
@@ -1,5 +1,5 @@
 import changeMuteMeeting from '../modifiers/changeMuteMeeting';
 
 export default function handleMeetingMuted({ body }, meetingId) {
-  return changeMuteMeeting(meetingId, body);
+  changeMuteMeeting(meetingId, body);
 }
diff --git a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/addVoiceUser.js b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/addVoiceUser.js
index 3d7636dcb7b480b296d360f3594146e181609434..f0e0293361ba391f76263e952946267d6f6a1584 100644
--- a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/addVoiceUser.js
+++ b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/addVoiceUser.js
@@ -41,13 +41,13 @@ export default function addVoiceUser(meetingId, voiceUser) {
 
   if (user) modifier.$set.color = user.color;
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Add voice user=${intId}: ${err}`);
-    }
-
-    return Logger.info(`Add voice user=${intId} meeting=${meetingId}`);
-  };
+  try {
+    const { numberAffected } = VoiceUsers.upsert(selector, modifier);
 
-  return VoiceUsers.upsert(selector, modifier, cb);
+    if (numberAffected) {
+      Logger.info(`Add voice user=${intId} meeting=${meetingId}`);
+    }
+  } catch (err) {
+    Logger.error(`Add voice user=${intId}: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/changeMuteMeeting.js b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/changeMuteMeeting.js
index 63995e242945ce46c92b2f2706e8c5274dc1dea2..e18c3cf211f6998a07e802b256c5f7a8bc5a0824 100755
--- a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/changeMuteMeeting.js
+++ b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/changeMuteMeeting.js
@@ -19,17 +19,13 @@ export default function changeMuteMeeting(meetingId, payload) {
     },
   };
 
-  const cb = (err, numChanged) => {
-    if (err) {
-      Logger.error(`Changing meeting mute status meeting={${meetingId}} ${err}`);
-      return;
-    }
+  try {
+    const { numberAffected } = Meetings.upsert(selector, modifier);
 
-    if (numChanged) {
+    if (numberAffected) {
       Logger.info(`Changed meeting mute status meeting=${meetingId}`);
     }
-  };
-
-
-  return Meetings.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Changing meeting mute status meeting={${meetingId}} ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/clearVoiceUsers.js b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/clearVoiceUsers.js
index c9b81dc807504f728af692164d67ca14341e071e..63fe8e284577b0af27085bed10ad1d2a35701270 100644
--- a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/clearVoiceUsers.js
+++ b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/clearVoiceUsers.js
@@ -3,12 +3,24 @@ import VoiceUsers from '/imports/api/voice-users';
 
 export default function clearVoiceUser(meetingId) {
   if (meetingId) {
-    return VoiceUsers.remove({ meetingId }, () => {
-      Logger.info(`Cleared VoiceUsers in (${meetingId})`);
-    });
-  }
+    try {
+      const numberAffected = VoiceUsers.remove({ meetingId });
+
+      if (numberAffected) {
+        Logger.info(`Cleared VoiceUsers in (${meetingId})`);
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing VoiceUsers in ${meetingId}. ${err}`);
+    }
+  } else {
+    try {
+      const numberAffected = VoiceUsers.remove({});
 
-  return VoiceUsers.remove({}, () => {
-    Logger.info('Cleared VoiceUsers in all meetings');
-  });
+      if (numberAffected) {
+        Logger.info('Cleared VoiceUsers in all meetings');
+      }
+    } catch (err) {
+      Logger.error(`Error on clearing VoiceUsers. ${err}`);
+    }
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/removeVoiceUser.js b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/removeVoiceUser.js
index d49d8c318b0315382458a77dcbe4888f9d83644f..5e1bec81db17938d03c33c6850fb7f27dcd95562 100644
--- a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/removeVoiceUser.js
+++ b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/removeVoiceUser.js
@@ -28,15 +28,14 @@ export default function removeVoiceUser(meetingId, voiceUser) {
     },
   };
 
-  clearSpokeTimeout(meetingId, intId);
+  try {
+    clearSpokeTimeout(meetingId, intId);
+    const numberAffected = VoiceUsers.update(selector, modifier);
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Remove voiceUser=${intId}: ${err}`);
+    if (numberAffected) {
+      Logger.info(`Remove voiceUser=${intId} meeting=${meetingId}`);
     }
-
-    return Logger.info(`Remove voiceUser=${intId} meeting=${meetingId}`);
-  };
-
-  return VoiceUsers.update(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Remove voiceUser=${intId}: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/updateVoiceUser.js b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/updateVoiceUser.js
index 7f5f6dff9e2dbe4e00aa39be1fe8dca730413ce5..270ac5b8a496f5de0bd1e92f1b0df8088a15abb6 100644
--- a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/updateVoiceUser.js
+++ b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/updateVoiceUser.js
@@ -43,14 +43,6 @@ export default function updateVoiceUser(meetingId, voiceUser) {
     clearSpokeTimeout(meetingId, intId);
   }
 
-  const cb = (err) => {
-    if (err) {
-      return Logger.error(`Update voiceUser=${intId}: ${err}`);
-    }
-
-    return Logger.debug('Update voiceUser', { voiceUser: intId, meetingId });
-  };
-
   if (!voiceUser.talking) {
     const timeoutHandle = Meteor.setTimeout(() => {
       const user = VoiceUsers.findOne({ meetingId, intId }, {
@@ -66,7 +58,15 @@ export default function updateVoiceUser(meetingId, voiceUser) {
         if (talking || spokeDelay) return;
         modifier.$set.spoke = false;
         modifier.$set.startTime = null;
-        VoiceUsers.update(selector, modifier, cb);
+        try {
+          const numberAffected = VoiceUsers.update(selector, modifier);
+
+          if (numberAffected) {
+            Logger.debug('Update voiceUser', { voiceUser: intId, meetingId });
+          }
+        } catch (err) {
+          Logger.error(`Update voiceUser=${intId}: ${err}`);
+        }
       }
     }, TALKING_TIMEOUT);
 
@@ -74,5 +74,13 @@ export default function updateVoiceUser(meetingId, voiceUser) {
     modifier.$set.endTime = Date.now();
   }
 
-  return VoiceUsers.update(selector, modifier, cb);
+  try {
+    const numberAffected = VoiceUsers.update(selector, modifier);
+
+    if (numberAffected) {
+      Logger.debug('Update voiceUser', { voiceUser: intId, meetingId });
+    }
+  } catch (err) {
+    Logger.error(`Update voiceUser=${intId}: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/modifiers/modifyWhiteboardAccess.js b/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/modifiers/modifyWhiteboardAccess.js
index 17e50c94331cb45d454af6f1aa81fbdd7fa49d87..5d1944426a0bc3aee59fb4dde9c503147d6ab444 100644
--- a/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/modifiers/modifyWhiteboardAccess.js
+++ b/bigbluebutton-html5/imports/api/whiteboard-multi-user/server/modifiers/modifyWhiteboardAccess.js
@@ -2,7 +2,6 @@ import { check } from 'meteor/check';
 import Logger from '/imports/startup/server/logger';
 import WhiteboardMultiUser from '/imports/api/whiteboard-multi-user/';
 
-
 export default function modifyWhiteboardAccess(meetingId, whiteboardId, multiUser) {
   check(meetingId, String);
   check(whiteboardId, String);
@@ -19,19 +18,14 @@ export default function modifyWhiteboardAccess(meetingId, whiteboardId, multiUse
     multiUser,
   };
 
-
-  const cb = (err, numChanged) => {
-    if (err) {
-      return Logger.error(`Error while adding an entry to Multi-User collection: ${err}`);
-    }
-
-    const { insertedId } = numChanged;
+  try {
+    const { insertedId } = WhiteboardMultiUser.upsert(selector, modifier);
     if (insertedId) {
-      return Logger.info(`Added multiUser flag=${multiUser} meetingId=${meetingId} whiteboardId=${whiteboardId}`);
+      Logger.info(`Added multiUser flag=${multiUser} meetingId=${meetingId} whiteboardId=${whiteboardId}`);
+    } else {
+      Logger.info(`Upserted multiUser flag=${multiUser} meetingId=${meetingId} whiteboardId=${whiteboardId}`);
     }
-
-    return Logger.info(`Upserted multiUser flag=${multiUser} meetingId=${meetingId} whiteboardId=${whiteboardId}`);
-  };
-
-  return WhiteboardMultiUser.upsert(selector, modifier, cb);
+  } catch (err) {
+    Logger.error(`Error while adding an entry to Multi-User collection: ${err}`);
+  }
 }
diff --git a/bigbluebutton-html5/imports/startup/server/index.js b/bigbluebutton-html5/imports/startup/server/index.js
index 481700618a65ea4e98c6a9f6cb5bb8ff7f9b5189..a12dc87c0569cc7b03304f19f9339fbca4b9637b 100755
--- a/bigbluebutton-html5/imports/startup/server/index.js
+++ b/bigbluebutton-html5/imports/startup/server/index.js
@@ -45,114 +45,96 @@ Meteor.startup(() => {
   const env = Meteor.isDevelopment ? 'development' : 'production';
   const CDN_URL = APP_CONFIG.cdn;
 
-  // https://github.com/sockjs/sockjs-node/blob/1ef08901f045aae7b4df0f91ef598d7a11e82897/lib/transport/websocket.js#L74-L82
-  const newHeartbeat = function heartbeat() {
-    const currentTime = new Date().getTime();
-
-    // Skipping heartbeat, because websocket is sending data
-    if (currentTime - this.ws.lastSentFrameTimestamp < 10000) {
-      Logger.info('Skipping heartbeat, because websocket is sending data', {
-        currentTime,
-        lastSentFrameTimestamp: this.ws.lastSentFrameTimestamp,
-        userId: this.session.connection._meteorSession.userId,
-      });
-      return;
-    }
-
-    const supportsHeartbeats = this.ws.ping(null, () => clearTimeout(this.hto_ref));
-    if (supportsHeartbeats) {
-      this.hto_ref = setTimeout(() => {
-        Logger.info('Heartbeat timeout', { userId: this.session.connection._meteorSession.userId, sentAt: currentTime, now: new Date().getTime() });
-      }, Meteor.server.options.heartbeatTimeout);
-    } else {
-      Logger.error('Unexpected error supportsHeartbeats=false');
-    }
-  };
-
-  // https://github.com/davhani/hagty/blob/6a5c78e9ae5a5e4ade03e747fb4cc8ea2df4be0c/faye-websocket/lib/faye/websocket/api.js#L84-L88
-  const newSend = function send(data) {
-    this.lastSentFrameTimestamp = new Date().getTime();
-
-    // Call https://github.com/meteor/meteor/blob/1e7e56eec8414093cd0c1c70750b894069fc972a/packages/ddp-common/heartbeat.js#L80-L88
-    this.meteorHeartbeat._seenPacket = true;
-    if (this.meteorHeartbeat._heartbeatTimeoutHandle) {
-      this.meteorHeartbeat._clearHeartbeatTimeoutTimer();
-    }
+  const { customHeartbeat } = APP_CONFIG;
+
+  if (customHeartbeat) {
+    Logger.warn('Custom heartbeat functions are enabled');
+    // https://github.com/sockjs/sockjs-node/blob/1ef08901f045aae7b4df0f91ef598d7a11e82897/lib/transport/websocket.js#L74-L82
+    const newHeartbeat = function heartbeat() {
+      const currentTime = new Date().getTime();
+
+      // Skipping heartbeat, because websocket is sending data
+      if (currentTime - this.ws.lastSentFrameTimestamp < 10000) {
+        Logger.info('Skipping heartbeat, because websocket is sending data', {
+          currentTime,
+          lastSentFrameTimestamp: this.ws.lastSentFrameTimestamp,
+          userId: this.session.connection._meteorSession.userId,
+        });
+        return;
+      }
 
-    if (this.readyState > 1/* API.OPEN = 1 */) return false;
-    if (!(data instanceof Buffer)) data = String(data);
-    return this._driver.messages.write(data);
-  };
+      const supportsHeartbeats = this.ws.ping(null, () => clearTimeout(this.hto_ref));
+      if (supportsHeartbeats) {
+        this.hto_ref = setTimeout(() => {
+          Logger.info('Heartbeat timeout', {
+            userId: this.session.connection._meteorSession.userId,
+            sentAt: currentTime,
+            now: new Date().getTime(),
+          });
+        }, Meteor.server.options.heartbeatTimeout);
+      } else {
+        Logger.error('Unexpected error supportsHeartbeats=false');
+      }
+    };
 
-  Meteor.setInterval(() => {
-    for (const session of Meteor.server.sessions.values()) {
-      const { socket } = session;
-      const recv = socket._session.recv;
+    // https://github.com/davhani/hagty/blob/6a5c78e9ae5a5e4ade03e747fb4cc8ea2df4be0c/faye-websocket/lib/faye/websocket/api.js#L84-L88
+    const newSend = function send(data) {
+      this.lastSentFrameTimestamp = new Date().getTime();
 
-      if (session.bbbFixApplied || !recv || !recv.ws) {
-        continue;
+      // Call https://github.com/meteor/meteor/blob/1e7e56eec8414093cd0c1c70750b894069fc972a/packages/ddp-common/heartbeat.js#L80-L88
+      this.meteorHeartbeat._seenPacket = true;
+      if (this.meteorHeartbeat._heartbeatTimeoutHandle) {
+        this.meteorHeartbeat._clearHeartbeatTimeoutTimer();
       }
 
-      recv.ws.meteorHeartbeat = session.heartbeat;
-      recv.__proto__.heartbeat = newHeartbeat;
-      recv.ws.__proto__.send = newSend;
-      session.bbbFixApplied = true;
-    }
-  }, 5000);
-  // Commenting out in BBB 2.3 as node12 does not allow for `memwatch`.
-  // We are looking for alternatives
+      if (this.readyState > 1/* API.OPEN = 1 */) return false;
+      if (!(data instanceof Buffer)) data = String(data);
+      return this._driver.messages.write(data);
+    };
 
-  /* let heapDumpMbThreshold = 100;
+    Meteor.setInterval(() => {
+      for (const session of Meteor.server.sessions.values()) {
+        const { socket } = session;
+        const recv = socket._session.recv;
 
-  const memoryMonitoringSettings = Meteor.settings.private.memoryMonitoring;
-  if (memoryMonitoringSettings.stat.enabled) {
-    memwatch.on('stats', (stats) => {
-      let heapDumpTriggered = false;
+        if (session.bbbFixApplied || !recv || !recv.ws) {
+          continue;
+        }
 
-      if (memoryMonitoringSettings.heapdump.enabled) {
-        heapDumpTriggered = (stats.current_base / 1048576) > heapDumpMbThreshold;
+        recv.ws.meteorHeartbeat = session.heartbeat;
+        recv.__proto__.heartbeat = newHeartbeat;
+        recv.ws.__proto__.send = newSend;
+        session.bbbFixApplied = true;
       }
-      Logger.info('memwatch stats', { ...stats, heapDumpEnabled: memoryMonitoringSettings.heapdump.enabled, heapDumpTriggered });
+    }, 5000);
+
+    if (CDN_URL.trim()) {
+      // Add CDN
+      BrowserPolicy.content.disallowEval();
+      BrowserPolicy.content.allowInlineScripts();
+      BrowserPolicy.content.allowInlineStyles();
+      BrowserPolicy.content.allowImageDataUrl(CDN_URL);
+      BrowserPolicy.content.allowFontDataUrl(CDN_URL);
+      BrowserPolicy.content.allowOriginForAll(CDN_URL);
+      WebAppInternals.setBundledJsCssPrefix(CDN_URL + APP_CONFIG.basename + Meteor.settings.public.app.instanceId);
+
+      const fontRegExp = /\.(eot|ttf|otf|woff|woff2)$/;
+
+      WebApp.rawConnectHandlers.use('/', (req, res, next) => {
+        if (fontRegExp.test(req._parsedUrl.pathname)) {
+          res.setHeader('Access-Control-Allow-Origin', '*');
+          res.setHeader('Vary', 'Origin');
+          res.setHeader('Pragma', 'public');
+          res.setHeader('Cache-Control', '"public"');
+        }
+        return next();
+      });
+    }
 
-      if (heapDumpTriggered) {
-        heapdump.writeSnapshot(`./heapdump-stats-${Date.now()}.heapsnapshot`);
-        heapDumpMbThreshold += 100;
-      }
-    });
-  }
+    setMinBrowserVersions();
 
-  if (memoryMonitoringSettings.leak.enabled) {
-    memwatch.on('leak', (info) => {
-      Logger.info('memwatch leak', info);
-    });
-  } */
-
-  if (CDN_URL.trim()) {
-    // Add CDN
-    BrowserPolicy.content.disallowEval();
-    BrowserPolicy.content.allowInlineScripts();
-    BrowserPolicy.content.allowInlineStyles();
-    BrowserPolicy.content.allowImageDataUrl(CDN_URL);
-    BrowserPolicy.content.allowFontDataUrl(CDN_URL);
-    BrowserPolicy.content.allowOriginForAll(CDN_URL);
-    WebAppInternals.setBundledJsCssPrefix(CDN_URL + APP_CONFIG.basename + Meteor.settings.public.app.instanceId);
-
-    const fontRegExp = /\.(eot|ttf|otf|woff|woff2)$/;
-
-    WebApp.rawConnectHandlers.use('/', (req, res, next) => {
-      if (fontRegExp.test(req._parsedUrl.pathname)) {
-        res.setHeader('Access-Control-Allow-Origin', '*');
-        res.setHeader('Vary', 'Origin');
-        res.setHeader('Pragma', 'public');
-        res.setHeader('Cache-Control', '"public"');
-      }
-      return next();
-    });
+    Logger.warn(`SERVER STARTED.\nENV=${env},\nnodejs version=${process.version}\nCDN=${CDN_URL}\n`, APP_CONFIG);
   }
-
-  setMinBrowserVersions();
-
-  Logger.warn(`SERVER STARTED.\nENV=${env},\nnodejs version=${process.version}\nCDN=${CDN_URL}\n`, APP_CONFIG);
 });
 
 WebApp.connectHandlers.use('/check', (req, res) => {
diff --git a/bigbluebutton-html5/imports/startup/server/redis.js b/bigbluebutton-html5/imports/startup/server/redis.js
index 4c49d2750d3d9a3c2b8f781110965e96b29ffd66..ef8b2e6b7dbdbfc20048119726cbb148774ae3c7 100755
--- a/bigbluebutton-html5/imports/startup/server/redis.js
+++ b/bigbluebutton-html5/imports/startup/server/redis.js
@@ -60,7 +60,7 @@ class MeetingMessageQueue {
       }
       called = true;
       const queueLength = this.queue.length();
-      if (queueLength > 0) {
+      if (queueLength > 100) {
         Logger.warn(`Redis: MeetingMessageQueue for meetingId=${meetingId} has queue size=${queueLength} `);
       }
       next();
diff --git a/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx b/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx
index ed6cd1829e8170acf5dfa046c5265d5b7020e861..ba060c69bdc891b28352a009560af7c3beeecf22 100644
--- a/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/external-video-player/component.jsx
@@ -6,6 +6,7 @@ import { sendMessage, onMessage, removeAllListeners } from './service';
 import logger from '/imports/startup/client/logger';
 
 import ArcPlayer from './custom-players/arc-player';
+import PeerTubePlayer from './custom-players/peertube';
 
 import { styles } from './styles';
 
@@ -20,6 +21,7 @@ const SYNC_INTERVAL_SECONDS = 5;
 const THROTTLE_INTERVAL_SECONDS = 0.5;
 const AUTO_PLAY_BLOCK_DETECTION_TIMEOUT_SECONDS = 5;
 
+ReactPlayer.addCustomPlayer(PeerTubePlayer);
 ReactPlayer.addCustomPlayer(ArcPlayer);
 
 class VideoPlayer extends Component {
@@ -75,6 +77,9 @@ class VideoPlayer extends Component {
           controls: isPresenter ? 1 : 2,
         },
       },
+      peertube: {
+        isPresenter,
+      },
       twitch: {
         options: {
           controls: true,
diff --git a/bigbluebutton-html5/imports/ui/components/external-video-player/custom-players/peertube.jsx b/bigbluebutton-html5/imports/ui/components/external-video-player/custom-players/peertube.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..ea0c0d88a24f7c7f8323914da8dbedb8d8b93377
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/external-video-player/custom-players/peertube.jsx
@@ -0,0 +1,211 @@
+import loadScript from 'load-script';
+import React, { Component } from 'react'
+
+const MATCH_URL = new RegExp("(https?)://(.*)/videos/watch/(.*)");
+
+const SDK_URL = 'https://unpkg.com/@peertube/embed-api/build/player.min.js';
+
+// Util function to load an external SDK or return the SDK if it is already loaded
+// From https://github.com/CookPete/react-player/blob/master/src/utils.js
+const resolves = {};
+export function getSDK (url, sdkGlobal, sdkReady = null, isLoaded = () => true, fetchScript = loadScript) {
+  if (window[sdkGlobal] && isLoaded(window[sdkGlobal])) {
+    return Promise.resolve(window[sdkGlobal])
+  }
+  return new Promise((resolve, reject) => {
+    // If we are already loading the SDK, add the resolve
+    // function to the existing array of resolve functions
+    if (resolves[url]) {
+      resolves[url].push(resolve);
+      return
+    }
+    resolves[url] = [resolve];
+    const onLoaded = sdk => {
+      // When loaded, resolve all pending promises
+      resolves[url].forEach(resolve => resolve(sdk))
+    };
+    if (sdkReady) {
+      const previousOnReady = window[sdkReady];
+      window[sdkReady] = function () {
+        if (previousOnReady) previousOnReady();
+        onLoaded(window[sdkGlobal])
+      }
+    }
+    fetchScript(url, err => {
+      if (err) {
+        reject(err);
+      }
+      window[sdkGlobal] = url;
+      if (!sdkReady) {
+        onLoaded(window[sdkGlobal])
+      }
+    })
+  })
+}
+
+export class PeerTubePlayer extends Component {
+  static displayName = 'PeerTubePlayer';
+
+  static canPlay = url => {
+    return MATCH_URL.test(url)
+  };
+
+  constructor(props) {
+    super(props);
+
+    this.player = this;
+    this._player = null;
+
+    this.currentTime = 0;
+    this.playbackRate = 1;
+    this.getCurrentTime = this.getCurrentTime.bind(this);
+    this.getEmbedUrl = this.getEmbedUrl.bind(this);
+    this.setupEvents = this.setupEvents.bind(this);
+  }
+
+  componentDidMount () {
+    this.props.onMount && this.props.onMount(this)
+  }
+
+  getEmbedUrl = () => {
+    const { config, url } = this.props;
+    const m = MATCH_URL.exec(url);
+
+    const isPresenter = config && config.peertube && config.peertube.isPresenter;
+
+    return `${m[1]}://${m[2]}/videos/embed/${m[3]}?api=1&controls=${true}`;
+  };
+
+  load() {
+    new Promise((resolve, reject) => {
+      this.render();
+      resolve();
+    })
+    .then(() => { return getSDK(SDK_URL, 'PeerTube') })
+    .then(() => {
+      this._player = new window['PeerTubePlayer'](this.container);
+
+      this.setupEvents();
+
+      return this._player.ready.then(() => {
+        return this.props.onReady();
+      });
+    });
+  }
+
+  setupEvents(event) {
+    const player = this._player;
+
+    if (!player) {
+      return;
+    }
+
+    player.addEventListener("playbackStatusUpdate", (data) => {
+      this.currentTime = data.position;
+    });
+    player.addEventListener("playbackStatusChange", (data) => {
+      if (data === 'playing') {
+        this.props.onPlay();
+      } else {
+        this.props.onPause();
+      }
+    });
+
+  }
+
+  play() {
+    if (this._player) {
+      this._player.play();
+    }
+  }
+
+  pause() {
+    if (this._player) {
+      this._player.pause();
+    }
+  }
+
+  stop() {
+  }
+
+  seekTo(seconds) {
+    if (this._player) {
+      this._player.seek(seconds);
+    }
+  }
+
+  setVolume(fraction) {
+    // console.log("SET VOLUME");
+  }
+
+  setLoop(loop) {
+    // console.log("SET LOOP");
+  }
+
+  mute() {
+    // console.log("SET MUTE");
+  }
+
+  unmute() {
+    // console.log("SET UNMUTE");
+  }
+
+  getDuration() {
+    //console.log("GET DURATION");
+  }
+
+  getCurrentTime () {
+    return this.currentTime;
+  }
+
+  getSecondsLoaded () {
+  }
+
+  getPlaybackRate () {
+
+    if (this._player) {
+      this._player.getPlaybackRate().then((rate) => {
+        this.playbackRate = rate;
+      });
+    }
+
+    return this.playbackRate;
+  }
+
+  setPlaybackRate (rate) {
+
+    if (this._player) {
+      this._player.setPlaybackRate(rate);
+    }
+  }
+
+  render () {
+    const style = {
+      width: '100%',
+      height: '100%',
+      margin: 0,
+      padding: 0,
+      border: 0,
+      overflow: 'hidden',
+    };
+    const { url } = this.props;
+
+    return (
+      <iframe
+        key={url}
+        style={style}
+        src={this.getEmbedUrl(url)}
+        id={"peerTubeContainer"}
+        allow="autoplay; fullscreen"
+        sandbox="allow-same-origin allow-scripts allow-popups"
+        ref={(container) => {
+          this.container = container;
+        }}
+      >
+      </iframe>
+    )
+  }
+}
+
+export default PeerTubePlayer;
+
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/component.jsx
index d2b27787858e30916fa26e349ee73e8d39082bc6..ac1340fb3ecdf3b09e336eb24b8aaf696a1c139e 100755
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/component.jsx
@@ -35,6 +35,12 @@ const intlMessages = defineMessages({
   unfocusDesc: {
     id: 'app.videoDock.webcamUnfocusDesc',
   },
+  mirrorLabel: {
+    id: 'app.videoDock.webcamMirrorLabel',
+  },
+  mirrorDesc: {
+    id: 'app.videoDock.webcamMirrorDesc',
+  },
   autoplayBlockedDesc: {
     id: 'app.videoDock.autoplayBlockedDesc',
   },
@@ -84,6 +90,7 @@ class VideoList extends Component {
         filledArea: 0,
       },
       autoplayBlocked: false,
+      mirroredCameras: [],
     };
 
     this.ticking = false;
@@ -209,6 +216,24 @@ class VideoList extends Component {
     window.dispatchEvent(new Event('videoFocusChange'));
   }
 
+  mirrorCamera(cameraId) {
+    const { mirroredCameras } = this.state;
+    if (this.cameraIsMirrored(cameraId)) {
+      this.setState({
+        mirroredCameras: mirroredCameras.filter(x => x != cameraId),
+      });
+    } else {
+      this.setState({
+        mirroredCameras: mirroredCameras.concat([cameraId]),
+      });
+    }
+  }
+
+  cameraIsMirrored(cameraId) {
+    const { mirroredCameras } = this.state;
+    return mirroredCameras.indexOf(cameraId) >= 0;
+  }
+
   handleCanvasResize() {
     if (!this.ticking) {
       window.requestAnimationFrame(() => {
@@ -281,14 +306,19 @@ class VideoList extends Component {
       const { cameraId, userId, name } = stream;
       const isFocused = focusedId === cameraId;
       const isFocusedIntlKey = !isFocused ? 'focus' : 'unfocus';
-      let actions = [];
+      const isMirrored = this.cameraIsMirrored(cameraId);
+      let actions = [{
+        label: intl.formatMessage(intlMessages['mirrorLabel']),
+        description: intl.formatMessage(intlMessages['mirrorDesc']),
+        onClick: () => this.mirrorCamera(cameraId),
+      }];
 
       if (numOfStreams > 2) {
-        actions = [{
+        actions.push({
           label: intl.formatMessage(intlMessages[`${isFocusedIntlKey}Label`]),
           description: intl.formatMessage(intlMessages[`${isFocusedIntlKey}Desc`]),
           onClick: () => this.handleVideoFocus(cameraId),
-        }];
+        });
       }
 
       return (
@@ -304,6 +334,7 @@ class VideoList extends Component {
             cameraId={cameraId}
             userId={userId}
             name={name}
+            mirrored={isMirrored}
             actions={actions}
             onMount={(videoRef) => {
               this.handleCanvasResize();
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx
index f95f0f6afc441c018bf5b3025926f660d7fdd671..798d99f43fb7a379f4d70c093008bc34d05b6da5 100755
--- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx
@@ -143,6 +143,7 @@ class VideoListItem extends Component {
       numOfStreams,
       webcamDraggableState,
       swapLayout,
+      mirrored
     } = this.props;
     const availableActions = this.getAvailableActions();
     const enableVideoMenu = Meteor.settings.public.kurento.enableVideoMenu || false;
@@ -175,7 +176,7 @@ class VideoListItem extends Component {
                 && !isFullscreen && !swapLayout,
               [styles.cursorGrabbing]: webcamDraggableState.dragging
                 && !isFullscreen && !swapLayout,
-              [styles.mirroredVideo]: this.mirrorOwnWebcam,
+              [styles.mirroredVideo]: (this.mirrorOwnWebcam && !mirrored) || (!this.mirrorOwnWebcam && mirrored),
             })}
             ref={(ref) => { this.videoTag = ref; }}
             autoPlay
diff --git a/bigbluebutton-html5/private/config/settings.yml b/bigbluebutton-html5/private/config/settings.yml
index a9916dcc268b6220939e46aa37c80e5963d126b6..2b2d0df719891516de40d3144805aedc9782b60c 100755
--- a/bigbluebutton-html5/private/config/settings.yml
+++ b/bigbluebutton-html5/private/config/settings.yml
@@ -10,12 +10,12 @@ public:
     clientTitle: BigBlueButton
     appName: BigBlueButton HTML5 Client
     bbbServerVersion: 2.3-dev
-    copyright: "©2020 BigBlueButton Inc."
+    copyright: '©2020 BigBlueButton Inc.'
     html5ClientBuild: HTML5_CLIENT_VERSION
     helpLink: https://bigbluebutton.org/html5/
     lockOnJoin: true
-    cdn: ""
-    basename: "/html5client"
+    cdn: ''
+    basename: '/html5client'
     askForFeedbackOnLogout: false
     # the default logoutUrl matches window.location.origin i.e. bigbluebutton.org for demo.bigbluebutton.org
     # in some cases we want only custom logoutUrl to be used when provided on meeting create. Default value: true
@@ -27,7 +27,7 @@ public:
     enableTalkingIndicator: true
     mirrorOwnWebcam: false
     viewersInWebcam: 8
-    ipv4FallbackDomain: ""
+    ipv4FallbackDomain: ''
     allowLogout: true
     allowFullscreen: true
     preloadNextSlides: 2
@@ -42,6 +42,7 @@ public:
     # can generate excessive overhead to the server. We recommend
     # this value to be kept under 12.
     breakoutRoomLimit: 8
+    customHeartbeat: false
     defaultSettings:
       application:
         animations: true
@@ -259,8 +260,8 @@ public:
   captions:
     enabled: true
     enableDictation: false
-    backgroundColor: "#000000"
-    fontColor: "#FFFFFF"
+    backgroundColor: '#000000'
+    fontColor: '#FFFFFF'
     fontFamily: Calibri
     fontSize: 24px
     takeOwnership: true
@@ -298,13 +299,13 @@ public:
   layout:
     autoSwapLayout: false
     hidePresentation: false
-    webcamsDefaultPlacement: "top"
+    webcamsDefaultPlacement: 'top'
   media:
-    stunTurnServersFetchAddress: "/bigbluebutton/api/stuns"
+    stunTurnServersFetchAddress: '/bigbluebutton/api/stuns'
     cacheStunTurnServers: true
-    fallbackStunServer:  ''
+    fallbackStunServer: ''
     recvonlyIceGatheringCheck: true
-    mediaTag: "#remote-media"
+    mediaTag: '#remote-media'
     callTransferTimeout: 5000
     callHangupTimeout: 2000
     callHangupMaximumRetries: 10
@@ -340,46 +341,46 @@ public:
     defaultPresentationFile: default.pdf
     panZoomThrottle: 32
     restoreOnUpdate: false
-    uploadEndpoint: "/bigbluebutton/presentation/upload"
+    uploadEndpoint: '/bigbluebutton/presentation/upload'
     uploadSizeMin: 0
     uploadSizeMax: 50000000
     uploadValidMimeTypes:
-    - extension: .pdf
-      mime: application/pdf
-    - extension: .doc
-      mime: application/msword
-    - extension: .docx
-      mime: application/vnd.openxmlformats-officedocument.wordprocessingml.document
-    - extension: .xls
-      mime: application/vnd.ms-excel
-    - extension: .xlsx
-      mime: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
-    - extension: .ppt
-      mime: application/vnd.ms-powerpoint
-    - extension: .pptx
-      mime: application/vnd.openxmlformats-officedocument.presentationml.presentation
-    - extension: .txt
-      mime: text/plain
-    - extension: .rtf
-      mime: application/rtf
-    - extension: .odt
-      mime: application/vnd.oasis.opendocument.text
-    - extension: .ods
-      mime: application/vnd.oasis.opendocument.spreadsheet
-    - extension: .odp
-      mime: application/vnd.oasis.opendocument.presentation
-    - extension: .odg
-      mime: application/vnd.oasis.opendocument.graphics
-    - extension: .odc
-      mime: application/vnd.oasis.opendocument.chart
-    - extension: .odi
-      mime: application/vnd.oasis.opendocument.image
-    - extension: .jpg
-      mime: image/jpeg
-    - extension: .jpeg
-      mime: image/jpeg
-    - extension: .png
-      mime: image/png
+      - extension: .pdf
+        mime: application/pdf
+      - extension: .doc
+        mime: application/msword
+      - extension: .docx
+        mime: application/vnd.openxmlformats-officedocument.wordprocessingml.document
+      - extension: .xls
+        mime: application/vnd.ms-excel
+      - extension: .xlsx
+        mime: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
+      - extension: .ppt
+        mime: application/vnd.ms-powerpoint
+      - extension: .pptx
+        mime: application/vnd.openxmlformats-officedocument.presentationml.presentation
+      - extension: .txt
+        mime: text/plain
+      - extension: .rtf
+        mime: application/rtf
+      - extension: .odt
+        mime: application/vnd.oasis.opendocument.text
+      - extension: .ods
+        mime: application/vnd.oasis.opendocument.spreadsheet
+      - extension: .odp
+        mime: application/vnd.oasis.opendocument.presentation
+      - extension: .odg
+        mime: application/vnd.oasis.opendocument.graphics
+      - extension: .odc
+        mime: application/vnd.oasis.opendocument.chart
+      - extension: .odi
+        mime: application/vnd.oasis.opendocument.image
+      - extension: .jpg
+        mime: image/jpeg
+      - extension: .jpeg
+        mime: image/jpeg
+      - extension: .png
+        mime: image/png
   user:
     role_moderator: MODERATOR
     role_viewer: VIEWER
@@ -392,80 +393,80 @@ public:
     toolbar:
       multiUserPenOnly: false
       colors:
-      - label: black
-        value: "#000000"
-      - label: white
-        value: "#ffffff"
-      - label: red
-        value: "#ff0000"
-      - label: orange
-        value: "#ff8800"
-      - label: eletricLime
-        value: "#ccff00"
-      - label: Lime
-        value: "#00ff00"
-      - label: Cyan
-        value: "#00ffff"
-      - label: dodgerBlue
-        value: "#0088ff"
-      - label: blue
-        value: "#0000ff"
-      - label: violet
-        value: "#8800ff"
-      - label: magenta
-        value: "#ff00ff"
-      - label: silver
-        value: "#c0c0c0"
+        - label: black
+          value: '#000000'
+        - label: white
+          value: '#ffffff'
+        - label: red
+          value: '#ff0000'
+        - label: orange
+          value: '#ff8800'
+        - label: eletricLime
+          value: '#ccff00'
+        - label: Lime
+          value: '#00ff00'
+        - label: Cyan
+          value: '#00ffff'
+        - label: dodgerBlue
+          value: '#0088ff'
+        - label: blue
+          value: '#0000ff'
+        - label: violet
+          value: '#8800ff'
+        - label: magenta
+          value: '#ff00ff'
+        - label: silver
+          value: '#c0c0c0'
       thickness:
-      - value: 14
-      - value: 12
-      - value: 10
-      - value: 8
-      - value: 6
-      - value: 4
-      - value: 2
-      - value: 1
+        - value: 14
+        - value: 12
+        - value: 10
+        - value: 8
+        - value: 6
+        - value: 4
+        - value: 2
+        - value: 1
       font_sizes:
-      - value: 36
-      - value: 32
-      - value: 28
-      - value: 24
-      - value: 20
-      - value: 16
+        - value: 36
+        - value: 32
+        - value: 28
+        - value: 24
+        - value: 20
+        - value: 16
       tools:
-      - icon: text_tool
-        value: text
-      - icon: line_tool
-        value: line
-      - icon: circle_tool
-        value: ellipse
-      - icon: triangle_tool
-        value: triangle
-      - icon: rectangle_tool
-        value: rectangle
-      - icon: pen_tool
-        value: pencil
-      - icon: hand
-        value: hand
+        - icon: text_tool
+          value: text
+        - icon: line_tool
+          value: line
+        - icon: circle_tool
+          value: ellipse
+        - icon: triangle_tool
+          value: triangle
+        - icon: rectangle_tool
+          value: rectangle
+        - icon: pen_tool
+          value: pencil
+        - icon: hand
+          value: hand
       presenterTools:
-      - text
-      - line
-      - ellipse
-      - triangle
-      - rectangle
-      - pencil
-      - hand
+        - text
+        - line
+        - ellipse
+        - triangle
+        - rectangle
+        - pencil
+        - hand
       multiUserTools:
-      - text
-      - line
-      - ellipse
-      - triangle
-      - rectangle
-      - pencil
-      - hand
+        - text
+        - line
+        - ellipse
+        - triangle
+        - rectangle
+        - pencil
+        - hand
   clientLog:
     server:
-      enabled: true
+      enabled: false
       level: info
     console:
       enabled: true
@@ -477,7 +478,7 @@ public:
       method: POST
       throttleInterval: 400
       flushOnClose: true
-      logTag: ""
+      logTag: ''
 private:
   app:
     host: 127.0.0.1
@@ -499,15 +500,15 @@ private:
       toAkkaApps: to-akka-apps-redis-channel
       toThirdParty: to-third-party-redis-channel
     subscribeTo:
-    - to-html5-redis-channel
-    - from-akka-apps-*
-    - from-third-party-redis-channel
-    - from-etherpad-redis-channel
+      - to-html5-redis-channel
+      - from-akka-apps-*
+      - from-third-party-redis-channel
+      - from-etherpad-redis-channel
     async:
-    - from-akka-apps-wb-redis-channel
+      - from-akka-apps-wb-redis-channel
     ignored:
-    - CheckAlivePongSysMsg
-    - DoLatencyTracerMsg
+      - CheckAlivePongSysMsg
+      - DoLatencyTracerMsg
   serverLog:
     level: info
     streamerLog: false
@@ -543,4 +544,3 @@ private:
       version: 10
     - browser: YandexBrowser
       version: 19
-