diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js
index 1468096f227f4c6aec38257cd056e4b4cb08c9e6..00009c24b158088a0d30b0fd6f31d608fd0d3251 100755
--- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/addMeeting.js
@@ -11,7 +11,6 @@ import createCaptions from '/imports/api/captions/server/methods/createCaptions'
 import { addAnnotationsStreamer } from '/imports/api/annotations/server/streamer';
 import { addCursorStreamer } from '/imports/api/cursor/server/streamer';
 import { addExternalVideoStreamer } from '/imports/api/external-videos/server/streamer';
-import BannedUsers from '/imports/api/users/server/store/bannedUsers';
 
 export default function addMeeting(meeting) {
   const meetingId = meeting.meetingProp.intId;
@@ -187,8 +186,6 @@ export default function addMeeting(meeting) {
       const { html5InstanceId } = meeting.systemProps;
       createNote(meetingId, html5InstanceId);
       createCaptions(meetingId, html5InstanceId);
-
-      BannedUsers.init(meetingId);
     } else if (numberAffected) {
       Logger.info(`Upserted meeting id=${meetingId}`);
     }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js
index 7651b0fd5b6cfdde951d668b40f88ccc6705de7c..33fe3eba6d6185d2e214b5fa347785cfd9dff365 100755
--- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js
@@ -1,7 +1,6 @@
 import Meetings from '/imports/api/meetings';
 import Logger from '/imports/startup/server/logger';
 
-import BannedUsers from '/imports/api/users/server/store/bannedUsers';
 import { removeAnnotationsStreamer } from '/imports/api/annotations/server/streamer';
 import { removeCursorStreamer } from '/imports/api/cursor/server/streamer';
 import { removeExternalVideoStreamer } from '/imports/api/external-videos/server/streamer';
@@ -65,7 +64,6 @@ export default function meetingHasEnded(meetingId) {
     clearWhiteboardMultiUser(meetingId);
     clearScreenshare(meetingId);
     clearUsersPersistentData(meetingId);
-    BannedUsers.delete(meetingId);
     Metrics.removeMeeting(meetingId);
 
     Logger.info(`Cleared Meetings with id ${meetingId}`);
diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js b/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js
index 7c4b385362f358dafd6f5f1e4b07ffc5a8366987..8df1f247848acbcb2b55b84784a38b6146da5b21 100644
--- a/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js
+++ b/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js
@@ -25,7 +25,7 @@ export default function handleValidateAuthToken({ body }, meetingId) {
     waitForApproval,
     registeredOn,
     authTokenValidatedOn,
-    reason,
+    reasonCode,
   } = body;
 
   check(userId, String);
@@ -34,6 +34,7 @@ export default function handleValidateAuthToken({ body }, meetingId) {
   check(waitForApproval, Boolean);
   check(registeredOn, Number);
   check(authTokenValidatedOn, Number);
+  check(reasonCode, String);
 
   const pendingAuths = pendingAuthenticationsStore.take(meetingId, userId, authToken);
 
@@ -47,7 +48,7 @@ export default function handleValidateAuthToken({ body }, meetingId) {
           const { methodInvocationObject } = pendingAuth;
           const connectionId = methodInvocationObject.connection.id;
 
-          upsertValidationState(meetingId, userId, ValidationStates.INVALID, connectionId, reason);
+          upsertValidationState(meetingId, userId, ValidationStates.INVALID, connectionId, reasonCode);
 
           // Schedule socket disconnection for this user, giving some time for client receiving the reason of disconnection
           Meteor.setTimeout(() => {
diff --git a/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js b/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js
index 0720559fbc0e5aeba53dac20d459df613645fa84..21e5427f5ec3b80cc07ec37e22b8f568df685bba 100644
--- a/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js
+++ b/bigbluebutton-html5/imports/api/users/server/methods/removeUser.js
@@ -2,8 +2,6 @@ import { Meteor } from 'meteor/meteor';
 import { check } from 'meteor/check';
 import RedisPubSub from '/imports/startup/server/redis';
 import { extractCredentials } from '/imports/api/common/server/helpers';
-import Users from '/imports/api/users';
-import BannedUsers from '/imports/api/users/server/store/bannedUsers';
 
 export default function removeUser(userId, banUser) {
   const REDIS_CONFIG = Meteor.settings.private.redis;
@@ -22,9 +20,5 @@ export default function removeUser(userId, banUser) {
     banUser,
   };
 
-  const removedUser = Users.findOne({ meetingId, userId }, { extId: 1 });
-
-  if (banUser && removedUser) BannedUsers.add(meetingId, removedUser.extId);
-
   return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, ejectedBy, payload);
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js b/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js
index e3ca329a3a6f3ee10c9a5d705f8603758fc09b7f..251724aef8da16a509e70ccdb343cbd16a1aa46b 100644
--- a/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js
+++ b/bigbluebutton-html5/imports/api/users/server/methods/validateAuthToken.js
@@ -4,7 +4,6 @@ import Logger from '/imports/startup/server/logger';
 import upsertValidationState from '/imports/api/auth-token-validation/server/modifiers/upsertValidationState';
 import { ValidationStates } from '/imports/api/auth-token-validation';
 import pendingAuthenticationsStore from '../store/pendingAuthentications';
-import BannedUsers from '../store/bannedUsers';
 
 export default function validateAuthToken(meetingId, requesterUserId, requesterToken, externalId) {
   const REDIS_CONFIG = Meteor.settings.private.redis;
@@ -13,14 +12,6 @@ export default function validateAuthToken(meetingId, requesterUserId, requesterT
 
   Logger.debug('ValidateAuthToken method called', { meetingId, requesterUserId, requesterToken, externalId });
 
-  // Check if externalId is banned from the meeting
-  if (externalId) {
-    if (BannedUsers.has(meetingId, externalId)) {
-      Logger.warn(`A banned user with extId ${externalId} tried to enter in meeting ${meetingId}`);
-      return { invalid: true, reason: 'User has been banned', error_type: 'user_banned' };
-    }
-  }
-
   if (!meetingId) return false;
 
   // Store reference of methodInvocationObject ( to postpone the connection userId definition )
diff --git a/bigbluebutton-html5/imports/api/users/server/store/bannedUsers.js b/bigbluebutton-html5/imports/api/users/server/store/bannedUsers.js
deleted file mode 100644
index fff7e6e422e1dc6c162abcc903c3e76ec440d518..0000000000000000000000000000000000000000
--- a/bigbluebutton-html5/imports/api/users/server/store/bannedUsers.js
+++ /dev/null
@@ -1,75 +0,0 @@
-import { check } from 'meteor/check';
-import Logger from '/imports/startup/server/logger';
-
-class BannedUsers {
-  constructor() {
-    Logger.debug('BannedUsers :: Initializing');
-    this.store = new Mongo.Collection('users-banned');
-
-    if (Meteor.isServer) {
-      // types of queries for the users:
-      // 1. meetingId
-      // 2. meetingId, userId
-      this.store._ensureIndex({ meetingId: 1, userId: 1 });
-    }
-  }
-
-  init(meetingId) {
-    Logger.debug('BannedUsers :: init', { meetingId });
-
-    // if (!this.store[meetingId]) this.store[meetingId] = new Set();
-  }
-
-  add(meetingId, externalId) {
-    check(meetingId, String);
-    check(externalId, String);
-
-    Logger.debug('BannedUsers :: add', { meetingId, externalId });
-
-    const selector = {
-      meetingId,
-      externalId,
-    };
-
-    const modifier = Object.assign( // TODO
-      { meetingId },
-      { externalId },
-    );
-
-    try {
-      const insertedId = this.store.upsert(selector, modifier);
-
-      if (insertedId) {
-        Logger.info('BannedUsers :: Added to BannedUsers collection', { meetingId, externalId });
-      }
-    } catch (err) {
-      Logger.error('BannedUsers :: Error on adding to BannedUsers collection', { meetingId, externalId, err });
-    }
-  }
-
-  delete(meetingId) {
-    check(meetingId, String);
-
-    const selector = {
-      meetingId,
-    };
-
-    try {
-      this.store.remove(selector);
-      Logger.info('BannedUsers :: Removed meeting', { meetingId });
-    } catch (err) {
-      Logger.error('BannedUsers :: Removing from collection', { err });
-    }
-  }
-
-  has(meetingId, externalId) {
-    check(meetingId, String);
-    check(externalId, String);
-
-    Logger.info('BannedUsers :: has', { meetingId, externalId });
-
-    return this.store.findOne({ meetingId, externalId });
-  }
-}
-
-export default new BannedUsers();
diff --git a/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx b/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx
index a5faf237e197e72cdc4bf46992e2c126f598b8e5..a58fd64104b4f237a6e7b6c033cb18dee64014b3 100644
--- a/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/error-screen/component.jsx
@@ -31,6 +31,15 @@ const intlMessages = defineMessages({
   400: {
     id: 'app.error.400',
   },
+  user_logged_out_reason: {
+    id: 'app.error.userLoggedOut',
+  },
+  validate_token_failed_eject_reason: {
+    id: 'app.error.ejectedUser',
+  },
+  banned_user_rejoining_reason: {
+    id: 'app.error.userBanned',
+  },
 });
 
 const propTypes = {
@@ -65,15 +74,21 @@ class ErrorScreen extends PureComponent {
       formatedMessage = intl.formatMessage(intlMessages[code]);
     }
 
+    let errorMessageDescription = Session.get('errorMessageDescription');
+
+    if (code === 403 && errorMessageDescription in intlMessages) {
+      errorMessageDescription = intl.formatMessage(intlMessages[errorMessageDescription]);
+    }
+
     return (
       <div className={styles.background}>
         <h1 className={styles.message}>
           {formatedMessage}
         </h1>
         {
-          !Session.get('errorMessageDescription') || (
+          !errorMessageDescription || (
             <div className={styles.sessionMessage}>
-              {Session.get('errorMessageDescription')}
+              {errorMessageDescription}
             </div>)
         }
         <div className={styles.separator} />
diff --git a/bigbluebutton-html5/imports/ui/services/auth/index.js b/bigbluebutton-html5/imports/ui/services/auth/index.js
index 4f9954a2778f1f917da88f8ede37a91dee032cbe..3c7a6e92bc6b2b829e9041b3c740bcd7a0ccbc1c 100755
--- a/bigbluebutton-html5/imports/ui/services/auth/index.js
+++ b/bigbluebutton-html5/imports/ui/services/auth/index.js
@@ -225,17 +225,7 @@ class Auth {
         });
       }, CONNECTION_TIMEOUT);
 
-      const result = await makeCall('validateAuthToken', this.meetingID, this.userID, this.token, this.externUserID);
-
-      if (result && result.invalid) {
-        clearTimeout(validationTimeout);
-        reject({
-          error: 403,
-          description: result.reason,
-          type: result.error_type,
-        });
-        return;
-      }
+      makeCall('validateAuthToken', this.meetingID, this.userID, this.token, this.externUserID);
 
       Meteor.subscribe('auth-token-validation', { meetingId: this.meetingID, userId: this.userID });
       Meteor.subscribe('current-user');
@@ -250,7 +240,7 @@ class Auth {
         switch (authenticationTokenValidation.validationStatus) {
           case ValidationStates.INVALID:
             c.stop();
-            reject({ error: 401, description: authenticationTokenValidation.reason });
+            reject({ error: 403, description: authenticationTokenValidation.reason });
             break;
           case ValidationStates.VALIDATED:
             initCursorStreamListener();
diff --git a/bigbluebutton-html5/public/locales/en.json b/bigbluebutton-html5/public/locales/en.json
index 9f51280204794cf2747d958de088c05406073f81..f1f7792ae5f809ba18223e31af4f1b0aa8ba96ef 100755
--- a/bigbluebutton-html5/public/locales/en.json
+++ b/bigbluebutton-html5/public/locales/en.json
@@ -534,6 +534,9 @@
     "app.error.404": "Not found",
     "app.error.410": "Meeting has ended",
     "app.error.500": "Ops, something went wrong",
+    "app.error.userLoggedOut": "User has an invalid sessionToken due to log out",
+    "app.error.ejectedUser": "User has an invalid sessionToken due to ejection",
+    "app.error.userBanned": "User has been banned",
     "app.error.leaveLabel": "Log in again",
     "app.error.fallback.presentation.title": "An error occurred",
     "app.error.fallback.presentation.description": "It has been logged. Please try reloading the page.",