diff --git a/bigbluebutton-html5/imports/ui/components/authenticated-handler/component.jsx b/bigbluebutton-html5/imports/ui/components/authenticated-handler/component.jsx
index 9de30ed45e0ee9766f13d36160e49cc1d06c6c2d..552080bb162b1b5a107df1d7ec83600e03a34544 100644
--- a/bigbluebutton-html5/imports/ui/components/authenticated-handler/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/authenticated-handler/component.jsx
@@ -31,20 +31,25 @@ class AuthenticatedHandler extends Component {
       }
     });
   }
-  static authenticatedRouteHandler(callback) {
+  static async authenticatedRouteHandler(callback) {
     if (Auth.loggedIn) {
       callback();
     }
 
     AuthenticatedHandler.addReconnectObservable();
 
-    Auth.authenticate()
-      .then(callback)
-      .catch((reason) => {
-        log('error', reason);
-        AuthenticatedHandler.setError(reason.error);
-        callback();
-      });
+    const setReason = (reason) => {
+      log('error', reason);
+      AuthenticatedHandler.setError(reason.error);
+      callback();
+    };
+
+    try {
+      const getAuthenticate = await Auth.authenticate();
+      callback(getAuthenticate);
+    } catch (error) {
+      setReason(error);
+    }
   }
   constructor(props) {
     super(props);
diff --git a/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx b/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
index de557456643ce518fc49a52f9baad31789655751..02b969b4cb5b2ea7762d03567d644f691b9809b3 100644
--- a/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
@@ -31,7 +31,7 @@ class JoinHandler extends Component {
     this.setState({ joined: bool });
   }
 
-  fetchToken() {
+  async fetchToken() {
     const urlParams = new URLSearchParams(window.location.search);
     const sessionToken = urlParams.get('sessionToken');
     if (!sessionToken) {
@@ -64,11 +64,13 @@ class JoinHandler extends Component {
         meetingID, internalUserID, authToken, logoutUrl,
         fullname, externUserID, confname,
       } = resp;
-      Auth.set(
-        meetingID, internalUserID, authToken, logoutUrl,
-        sessionToken, fullname, externUserID, confname,
-      );
-      return resp;
+      return new Promise((resolve) => {
+        Auth.set(
+          meetingID, internalUserID, authToken, logoutUrl,
+          sessionToken, fullname, externUserID, confname,
+        );
+        resolve(resp);
+      });
     };
 
     const setLogoutURL = (url) => {
@@ -86,45 +88,33 @@ class JoinHandler extends Component {
         meetingID, internalUserID, customdata,
       } = resp;
 
-      if (customdata.length) {
-        makeCall('addUserSettings', meetingID, internalUserID, customdata);
-      }
-      return resp;
+
+      return new Promise((resolve) => {
+        if (customdata.length) {
+          makeCall('addUserSettings', meetingID, internalUserID, customdata).then(r => resolve(r));
+        }
+        resolve(true);
+      });
     };
     // use enter api to get params for the client
     const url = `/bigbluebutton/api/enter?sessionToken=${sessionToken}`;
 
-    const validAuth = new Promise((resolve, reject) => {
-      fetch(url, { credentials: 'same-origin' })
-        .then(response => response.json())
-        .then(({ response }) => response)
-        .then((resp) => {
-          setLogoutURL(resp.logoutURL);
-          if (resp.returncode !== 'FAILED') {
-            let logString;
-            try {
-              logString = JSON.stringify(resp);
-            } catch (e) {
-              logger.error(`Could not stringify object ${resp}`)
-              logString = resp;
-            }
-            logger.info(`User successfully went through main.joinRouteHandler with [${logString}].`);
-            return resolve(resp);
-          }
-          const e = new Error('Session not found');
-          logger.error(`User faced [${e}] on main.joinRouteHandler. Error was:`, JSON.stringify(resp));
-          return reject(e);
-        });
-    });
-
-    validAuth
-      .then(setCustomData)
-      .then(setAuth)
-      .then(setLogoURL)
-      .then(logUserInfo)
-      .then(() => Session.set('isUserListOpen', deviceInfo.type().isPhone))
-      .then(() => this.changeToJoin(true))
-      .catch(() => this.changeToJoin(true));
+    const fetchContent = await fetch(url, { credentials: 'same-origin' });
+    const parseToJson = await fetchContent.json();
+    const { response } = parseToJson;
+    setLogoutURL(response);
+    if (response.returncode !== 'FAILED') {
+      await setAuth(response);
+      await setCustomData(response);
+      setLogoURL(response);
+      logUserInfo();
+      Session.set('isUserListOpen', deviceInfo.type().isPhone);
+      logger.info(`User successfully went through main.joinRouteHandler with [${JSON.stringify(response)}].`);
+    } else {
+      const e = new Error('Session not found');
+      logger.error(`User faced [${e}] on main.joinRouteHandler. Error was:`, JSON.stringify(response));
+    }
+    this.changeToJoin(true);
   }
 
   render() {
diff --git a/bigbluebutton-html5/imports/ui/services/auth/index.js b/bigbluebutton-html5/imports/ui/services/auth/index.js
index d950defbd6f4164b26aaad269262c0a201f73f77..0fdba37f0d6a6e127a83020e2d0dc61db34f528b 100755
--- a/bigbluebutton-html5/imports/ui/services/auth/index.js
+++ b/bigbluebutton-html5/imports/ui/services/auth/index.js
@@ -137,7 +137,16 @@ class Auth {
     };
   }
 
-  set(meetingId, requesterUserId, requesterToken, logoutURL, sessionToken, fullname, externUserID, confname) {
+  set(
+    meetingId,
+    requesterUserId,
+    requesterToken,
+    logoutURL,
+    sessionToken,
+    fullname,
+    externUserID,
+    confname,
+  ) {
     this.meetingID = meetingId;
     this.userID = requesterUserId;
     this.token = requesterToken;
@@ -221,7 +230,7 @@ class Auth {
           computation.stop();
           clearTimeout(validationTimeout);
           // setTimeout to prevent race-conditions with subscription
-          setTimeout(resolve, 100);
+          setTimeout(() => resolve(true), 100);
         }
       });