diff --git a/bigbluebutton-html5/imports/api/auth-token-validation/server/modifiers/clearAuthTokenValidation.js b/bigbluebutton-html5/imports/api/auth-token-validation/server/modifiers/clearAuthTokenValidation.js
index 75594efe286a930b977ea77d89fea4f1f8431e90..2b93b3a10fa935750318a4bc690fd04ff0679c78 100644
--- a/bigbluebutton-html5/imports/api/auth-token-validation/server/modifiers/clearAuthTokenValidation.js
+++ b/bigbluebutton-html5/imports/api/auth-token-validation/server/modifiers/clearAuthTokenValidation.js
@@ -8,7 +8,9 @@ export default function clearAuthTokenValidation(meetingId) {
       Logger.info(`Error when removing auth-token-validation for meeting=${meetingId}`);
     }
 
-    ClientConnections.removeMeeting(meetingId);
+    if (!process.env.BBB_HTML5_ROLE || process.env.BBB_HTML5_ROLE === 'frontend') {
+      ClientConnections.removeMeeting(meetingId);
+    }
     Logger.info(`Cleared AuthTokenValidation (${meetingId})`);
   });
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js b/bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js
index 060be44012b08cbdb9b4726ec76a8be37629c964..c6308063ed95d83c6ff05d9c093e698a79b3658c 100755
--- a/bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js
+++ b/bigbluebutton-html5/imports/api/users/server/modifiers/removeUser.js
@@ -18,45 +18,39 @@ export default function removeUser(meetingId, userId) {
   check(meetingId, String);
   check(userId, String);
 
-  const userToRemove = Users.findOne({ userId, meetingId });
-
-  if (userToRemove) {
-    const { presenter } = userToRemove;
-    if (presenter) {
-      stopWatchingExternalVideoSystemCall({ meetingId, requesterUserId: 'system-presenter-was-removed' });
+  try {
+    if (!process.env.BBB_HTML5_ROLE || process.env.BBB_HTML5_ROLE === 'frontend') {
+      const sessionUserId = `${meetingId}-${userId}`;
+      ClientConnections.removeClientConnection(`${meetingId}--${userId}`);
+      clearAllSessions(sessionUserId);
+
+      // we don't want to fully process the redis message in frontend
+      // since the backend is supposed to update Mongo
+      if (process.env.BBB_HTML5_ROLE === 'frontend') {
+        return;
+      }
     }
-  }
 
-  const selector = {
-    meetingId,
-    userId,
-  };
+    const selector = {
+      meetingId,
+      userId,
+    };
 
-  try {
-    setloggedOutStatus(userId, meetingId, true);
-    VideoStreams.remove({ meetingId, userId });
-    const sessionUserId = `${meetingId}-${userId}`;
+    const userToRemove = Users.findOne({ userId, meetingId });
 
-    ClientConnections.removeClientConnection(`${meetingId}--${userId}`);
+    if (userToRemove) {
+      const { presenter } = userToRemove;
+      if (presenter) {
+        stopWatchingExternalVideoSystemCall({ meetingId, requesterUserId: 'system-presenter-was-removed' });
+      }
+    }
 
-    clearAllSessions(sessionUserId);
+    setloggedOutStatus(userId, meetingId, true);
+    VideoStreams.remove({ meetingId, userId });
 
     clearUserInfoForRequester(meetingId, userId);
 
-    /*
-    Timeout added to reduce the probability that "userRemove" happens too close to "ejectUser",
-    redirecting user to the wrong component.
-    This is a workaround and should be removed as soon as a better fix is made
-    see: https://github.com/bigbluebutton/bigbluebutton/pull/12057
-    */
-    const DELAY_USER_REMOVAL_TIMEOUT_MS = 1000;
-
-    Meteor.wrapAsync((callback) => {
-      Meteor.setTimeout(() => {
-        Users.remove(selector);
-        callback();
-      }, DELAY_USER_REMOVAL_TIMEOUT_MS);
-    })();
+    Users.remove(selector);
 
     Logger.info(`Removed user id=${userId} meeting=${meetingId}`);
   } catch (err) {
diff --git a/bigbluebutton-html5/imports/startup/server/ClientConnections.js b/bigbluebutton-html5/imports/startup/server/ClientConnections.js
index a52b1462c642613876e7659ba2b7ce8ec8a4f27a..2e575bee7baafedb40a8af55fa0f12896d028c41 100644
--- a/bigbluebutton-html5/imports/startup/server/ClientConnections.js
+++ b/bigbluebutton-html5/imports/startup/server/ClientConnections.js
@@ -171,6 +171,10 @@ class ClientConnections {
 
 }
 
-const ClientConnectionsSingleton = new ClientConnections();
+if (!process.env.BBB_HTML5_ROLE || process.env.BBB_HTML5_ROLE === 'frontend') {
+  Logger.info("ClientConnectionsSingleton was created")
 
-export default ClientConnectionsSingleton;
+  const ClientConnectionsSingleton = new ClientConnections();
+
+  export default ClientConnectionsSingleton;
+}