diff --git a/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingEnd.js b/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingEnd.js
index f0e1510103404819337991d84ff6bdc64933226a..1c4d79bcb17203ffc856ee8265174b3d38d7b723 100644
--- a/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingEnd.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/handlers/meetingEnd.js
@@ -1,5 +1,5 @@
 import { check } from 'meteor/check';
-import removeMeeting from '../modifiers/removeMeeting';
+import meetingHasEnded from '../modifiers/meetingHasEnded';
 import Meetings from '/imports/api/meetings';
 import Breakouts from '/imports/api/breakouts';
 
@@ -22,5 +22,5 @@ export default function handleMeetingEnd({ body }, meetingId) {
     },
   });
 
-  return setTimeout(() => removeMeeting(meetingId), 10000);
+  return setTimeout(() => meetingHasEnded(meetingId), 1000);
 }
diff --git a/bigbluebutton-html5/imports/api/meetings/server/modifiers/removeMeeting.js b/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js
similarity index 96%
rename from bigbluebutton-html5/imports/api/meetings/server/modifiers/removeMeeting.js
rename to bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js
index f75c067da62b45bdb1f86b67b9f7236e52b44432..2ecd5d34b4bc2c242304ab15f4aea261e55ea97a 100755
--- a/bigbluebutton-html5/imports/api/meetings/server/modifiers/removeMeeting.js
+++ b/bigbluebutton-html5/imports/api/meetings/server/modifiers/meetingHasEnded.js
@@ -13,7 +13,7 @@ import clearPresentationPods from '/imports/api/presentation-pods/server/modifie
 import clearVoiceUsers from '/imports/api/voice-users/server/modifiers/clearVoiceUsers';
 
 
-export default function removeMeeting(meetingId) {
+export default function meetingHasEnded(meetingId) {
   return Meetings.remove({ meetingId }, () => {
     clearCaptions(meetingId);
     clearGroupChat(meetingId);
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 8be50a07688d3c48df861ee01bf3fa48a6624d83..c9b81dc807504f728af692164d67ca14341e071e 100644
--- a/bigbluebutton-html5/imports/api/voice-users/server/modifiers/clearVoiceUsers.js
+++ b/bigbluebutton-html5/imports/api/voice-users/server/modifiers/clearVoiceUsers.js
@@ -4,11 +4,11 @@ import VoiceUsers from '/imports/api/voice-users';
 export default function clearVoiceUser(meetingId) {
   if (meetingId) {
     return VoiceUsers.remove({ meetingId }, () => {
-      Logger.info(`Cleared clearVoiceUser (${meetingId})`);
+      Logger.info(`Cleared VoiceUsers in (${meetingId})`);
     });
   }
 
   return VoiceUsers.remove({}, () => {
-    Logger.info('Cleared clearVoiceUser (all)');
+    Logger.info('Cleared VoiceUsers in all meetings');
   });
 }
diff --git a/bigbluebutton-html5/imports/startup/client/base.jsx b/bigbluebutton-html5/imports/startup/client/base.jsx
index d0df5f15c51d3d2bc374baa4aea7319d0f397d4f..fcd25ba732bc65b2e38e1e0fe2b3f72b05244525 100755
--- a/bigbluebutton-html5/imports/startup/client/base.jsx
+++ b/bigbluebutton-html5/imports/startup/client/base.jsx
@@ -29,14 +29,13 @@ const propTypes = {
   subscriptionsReady: PropTypes.bool.isRequired,
   locale: PropTypes.string,
   approved: PropTypes.bool,
-  meetingIsEnded: PropTypes.bool,
+  meetingHasEnded: PropTypes.bool.isRequired,
   meetingExist: PropTypes.bool,
 };
 
 const defaultProps = {
   locale: undefined,
   approved: undefined,
-  meetingIsEnded: false,
   meetingExist: false,
 };
 
@@ -65,7 +64,6 @@ class Base extends Component {
     this.state = {
       loading: false,
       meetingExisted: false,
-      isBreakout: false,
     };
 
     this.updateLoadingState = this.updateLoadingState.bind(this);
@@ -86,6 +84,7 @@ class Base extends Component {
       meteorIsConnected,
       subscriptionsReady,
     } = this.props;
+
     const {
       loading,
       meetingExisted,
@@ -105,7 +104,7 @@ class Base extends Component {
     }
 
     // In case the meeting delayed to load
-    if (!meetingExist) return;
+    if (!subscriptionsReady || !meetingExist) return;
 
     if (approved && loading) this.updateLoadingState(false);
 
@@ -135,14 +134,18 @@ class Base extends Component {
   renderByState() {
     const { updateLoadingState } = this;
     const stateControls = { updateLoadingState };
-    const { loading, isBreakout } = this.state;
+    const { loading } = this.state;
     const codeError = Session.get('codeError');
     const {
       ejected,
       subscriptionsReady,
-      meetingIsEnded,
+      meetingHasEnded,
+      meetingIsBreakout,
     } = this.props;
-    const isMeetingBreakout = AppService.meetingIsBreakout();
+
+    if ((loading || !subscriptionsReady) && !meetingHasEnded) {
+      return (<LoadingScreen>{loading}</LoadingScreen>);
+    }
 
     if (ejected && ejected.ejectedReason) {
       const { ejectedReason } = ejected;
@@ -150,21 +153,17 @@ class Base extends Component {
       return (<MeetingEnded code={ejectedReason} />);
     }
 
-    if (isMeetingBreakout && !isBreakout) this.setState({ isBreakout: true });
+    if (meetingHasEnded && meetingIsBreakout) window.close();
 
-    if (meetingIsEnded && !isBreakout) {
+    if (meetingHasEnded && !meetingIsBreakout) {
       AudioManager.exitAudio();
       return (<MeetingEnded code={codeError} />);
     }
 
-    if (codeError && !meetingIsEnded) {
+    if (codeError && !meetingHasEnded) {
       logger.error({ logCode: 'startup_client_usercouldnotlogin_error' }, `User could not log in HTML5, hit ${codeError}`);
       return (<ErrorScreen code={codeError} />);
     }
-
-    if ((loading || !subscriptionsReady) && !meetingIsEnded) {
-      return (<LoadingScreen>{loading}</LoadingScreen>);
-    }
     // this.props.annotationsHandler.stop();
     return (<AppContainer {...this.props} baseControls={stateControls} />);
   }
@@ -278,7 +277,8 @@ const BaseContainer = withTracker(() => {
     User,
     meteorIsConnected: Meteor.status().connected,
     meetingExist: !!Meetings.find({ meetingId }).count(),
-    meetingIsEnded: !!meeting && meeting.meetingEnded,
+    meetingHasEnded: !!meeting && meeting.meetingEnded,
+    meetingIsBreakout: AppService.meetingIsBreakout(),
   };
 })(Base);
 
diff --git a/bigbluebutton-html5/imports/ui/components/app/container.jsx b/bigbluebutton-html5/imports/ui/components/app/container.jsx
index e8de6c63016e89ec3b92f3d69a99e736e5e06b0a..16e0b3d2038e5a2fe93c43fb87b4d6f0ebd10159 100755
--- a/bigbluebutton-html5/imports/ui/components/app/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/app/container.jsx
@@ -4,7 +4,6 @@ import { defineMessages, injectIntl } from 'react-intl';
 import PropTypes from 'prop-types';
 import Auth from '/imports/ui/services/auth';
 import Users from '/imports/api/users';
-import Meetings from '/imports/api/meetings';
 
 import ClosedCaptionsContainer from '/imports/ui/components/closed-captions/container';
 import getFromUserSettings from '/imports/ui/services/users-settings';
@@ -66,7 +65,6 @@ const AppContainer = (props) => {
 
 export default injectIntl(withModalMounter(withTracker(({ intl, baseControls }) => {
   const currentUser = Users.findOne({ userId: Auth.userID });
-  const meeting = Meetings.findOne({ meetingId: Auth.meetingID });
 
   if (!currentUser.approved) {
     baseControls.updateLoadingState(intl.formatMessage(intlMessages.waitingApprovalMessage));
@@ -83,8 +81,6 @@ export default injectIntl(withModalMounter(withTracker(({ intl, baseControls })
     },
   });
 
-  if (meeting && meeting.meetingEnded) window.close();
-
   return {
     closedCaption: getCaptionsStatus() ? <ClosedCaptionsContainer /> : null,
     fontSize: getFontSize(),
diff --git a/bigbluebutton-html5/imports/ui/components/app/service.js b/bigbluebutton-html5/imports/ui/components/app/service.js
index 88838245257379a667cb05f9ff7ef1aef5495614..156cd7ab05db37b517e74a966c1f612bdb3b0cfe 100644
--- a/bigbluebutton-html5/imports/ui/components/app/service.js
+++ b/bigbluebutton-html5/imports/ui/components/app/service.js
@@ -1,4 +1,5 @@
 import Breakouts from '/imports/api/breakouts';
+import Meetings from '/imports/api/meetings';
 import Settings from '/imports/ui/services/settings';
 import Auth from '/imports/ui/services/auth/index';
 
@@ -14,9 +15,14 @@ const getFontSize = () => {
 
 const getBreakoutRooms = () => Breakouts.find().fetch();
 
+const getMeeting = () => {
+  const { meetingID } = Auth;
+  return Meetings.findOne({ meetingId: meetingID });
+};
+
 function meetingIsBreakout() {
-  const breakouts = getBreakoutRooms();
-  return (breakouts && breakouts.some(b => b.breakoutId === Auth.meetingID));
+  const meeting = getMeeting();
+  return (meeting && meeting.meetingProp.isBreakout);
 }
 
 export {
@@ -24,4 +30,5 @@ export {
   getFontSize,
   meetingIsBreakout,
   getBreakoutRooms,
+  getMeeting,
 };
diff --git a/bigbluebutton-html5/imports/ui/components/toast/container.jsx b/bigbluebutton-html5/imports/ui/components/toast/container.jsx
index dcd1f72a6b22fedec2a67b3ba19c07233c4c0af8..63ab8ac9b9d7d11b6d0812cd5a928a01092262a1 100755
--- a/bigbluebutton-html5/imports/ui/components/toast/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/toast/container.jsx
@@ -81,6 +81,6 @@ export default injectIntl(injectNotify(withTracker(({ notify, intl }) => {
     hideProgressBar: false,
     closeOnClick: true,
     pauseOnHover: true,
-    meeting: Meetings.find({ meetingId }).fetch(),
+    meeting: Meetings.findOne({ meetingId }),
   };
 })(ToastContainer)));