diff --git a/bigbluebutton-html5/imports/ui/components/app/component.jsx b/bigbluebutton-html5/imports/ui/components/app/component.jsx
index 5d8649a2b7919363157d7a5856064ca212e8bc80..e0ab16339300d06d1d9057eb77348fc6b47e5be2 100755
--- a/bigbluebutton-html5/imports/ui/components/app/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/app/component.jsx
@@ -13,7 +13,9 @@ import ModalContainer from '../modal/container';
 import NotificationsBarContainer from '../notifications-bar/container';
 import AudioContainer from '../audio/container';
 import ChatAlertContainer from '../chat/alert/container';
+import BannerBarContainer from '/imports/ui/components/banner-bar/container';
 import WaitingNotifierContainer from '/imports/ui/components/waiting-users/alert/container';
+
 import { styles } from './styles';
 
 const MOBILE_MEDIA = 'only screen and (max-width: 40em)';
@@ -214,6 +216,7 @@ class App extends Component {
     return (
       <main className={styles.main}>
         {this.renderActivityCheck()}
+        <BannerBarContainer />
         <NotificationsBarContainer />
         <section className={styles.wrapper}>
           <div className={openPanel ? styles.content : styles.noPanelContent}>
diff --git a/bigbluebutton-html5/imports/ui/components/banner-bar/component.jsx b/bigbluebutton-html5/imports/ui/components/banner-bar/component.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..eee30910d8b7bd93eb5e90fde66d97cd5db04c3c
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/banner-bar/component.jsx
@@ -0,0 +1,21 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import NotificationsBar from '/imports/ui/components/notifications-bar/component';
+import { styles } from './styles';
+
+const BannerBar = ({ text, color }) => text && (
+  <NotificationsBar
+    color={color}
+  >
+    <span className={styles.bannerTextColor}>
+      {text}
+    </span>
+  </NotificationsBar>
+);
+
+BannerBar.propTypes = {
+  text: PropTypes.string.isRequired,
+  color: PropTypes.string.isRequired,
+};
+
+export default BannerBar;
diff --git a/bigbluebutton-html5/imports/ui/components/banner-bar/container.jsx b/bigbluebutton-html5/imports/ui/components/banner-bar/container.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..df1ba9f41f50b1c04118a79580c6716b6caeeab0
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/banner-bar/container.jsx
@@ -0,0 +1,8 @@
+import { Session } from 'meteor/session';
+import { withTracker } from 'meteor/react-meteor-data';
+import BannerComponent from './component';
+
+export default withTracker(() => ({
+  color: Session.get('bannerColor') || '#0F70D7',
+  text: Session.get('bannerText') || '',
+}))(BannerComponent);
diff --git a/bigbluebutton-html5/imports/ui/components/banner-bar/styles.scss b/bigbluebutton-html5/imports/ui/components/banner-bar/styles.scss
new file mode 100644
index 0000000000000000000000000000000000000000..3421702e34bdd94b808e774631f708263a370ad8
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/banner-bar/styles.scss
@@ -0,0 +1,6 @@
+@import "/imports/ui/stylesheets/variables/_all";
+
+.bannerTextColor {
+  @extend %text-elipsis;
+  color: var(--color-white);
+}
\ No newline at end of file
diff --git a/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx b/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
index 9c140bdc89b0eaa9c740e2bfcb6d877897a2dbb4..5153b6c8198c355fbfa5df27080dbbf491de0ed0 100644
--- a/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/join-handler/component.jsx
@@ -111,6 +111,12 @@ class JoinHandler extends Component {
         resolve(true);
       });
     };
+
+    const setBannerProps = (resp) => {
+      Session.set('bannerText', resp.bannerText);
+      Session.set('bannerColor', resp.bannerColor);
+    };
+
     // use enter api to get params for the client
     const url = `/bigbluebutton/api/enter?sessionToken=${sessionToken}`;
     const fetchContent = await fetch(url, { credentials: 'same-origin' });
@@ -122,6 +128,8 @@ class JoinHandler extends Component {
     if (response.returncode !== 'FAILED') {
       await setAuth(response);
       await setCustomData(response);
+
+      setBannerProps(response);
       setLogoURL(response);
       logUserInfo();
 
diff --git a/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx b/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx
index 57d08d3e7051955731114121939356abde3e2d85..74551cded1d015e0514548ce091debe43398bdfc 100755
--- a/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/nav-bar/component.jsx
@@ -176,7 +176,7 @@ class NavBar extends PureComponent {
 
       if (!userOnMeeting) return;
 
-      if ((!didSendBreakoutInvite && !isBreakoutRoom) ) {
+      if ((!didSendBreakoutInvite && !isBreakoutRoom)) {
         this.inviteUserToBreakout(breakout);
       }
     });
diff --git a/bigbluebutton-html5/imports/ui/components/notifications-bar/component.jsx b/bigbluebutton-html5/imports/ui/components/notifications-bar/component.jsx
index 04a9e71c6c9dfeed626c6c3d092ec40f527755cc..2d80bdfab256c150860635cae4a8f4b3e9cdda3f 100644
--- a/bigbluebutton-html5/imports/ui/components/notifications-bar/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/notifications-bar/component.jsx
@@ -9,7 +9,7 @@ const COLORS = [
 ];
 
 const propTypes = {
-  color: PropTypes.oneOf(COLORS),
+  color: PropTypes.string,
 };
 
 const defaultProps = {
@@ -17,13 +17,24 @@ const defaultProps = {
 };
 
 const NotificationsBar = (props) => {
-  const { color, children } = props;
+  const {
+    color,
+    children,
+    alert,
+  } = props;
+
+  const hasColor = COLORS.includes(color);
 
   return (
     <div
-      role="alert"
+      role={alert ? 'alert' : ''}
       aria-live="off"
-      className={cx(styles.notificationsBar, styles[color])}
+      style={
+        !hasColor ? {
+          backgroundColor: `${color}`,
+        } : {}
+    }
+      className={cx(styles.notificationsBar, hasColor ? styles[color] : null)}
     >
       {children}
     </div>
diff --git a/bigbluebutton-html5/imports/ui/components/notifications-bar/container.jsx b/bigbluebutton-html5/imports/ui/components/notifications-bar/container.jsx
index 2a4e285883c6a607d4ffa4b57219806095f9b5c5..655b53243d91f7d5c858e69c938d82b62fcc1374 100644
--- a/bigbluebutton-html5/imports/ui/components/notifications-bar/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/notifications-bar/container.jsx
@@ -63,11 +63,11 @@ const intlMessages = defineMessages({
 });
 
 const NotificationsBarContainer = (props) => {
-  if (_.isEmpty(props.message)) {
+  const { message, color } = props;
+  if (_.isEmpty(message)) {
     return null;
   }
 
-  const { message, color } = props;
 
   return (
     <NotificationsBar color={color}>
@@ -144,7 +144,9 @@ export default injectIntl(withTracker(({ intl }) => {
           breakoutRoom={currentBreakout}
           messageDuration={intlMessages.breakoutTimeRemaining}
           timeEndedMessage={intlMessages.breakoutWillClose}
-          alertMessageUnderOneMinute={intl.formatMessage(intlMessages.alertBreakoutEndsUnderOneMinute)}
+          alertMessageUnderOneMinute={
+            intl.formatMessage(intlMessages.alertBreakoutEndsUnderOneMinute)
+          }
         />
       );
     }
@@ -164,13 +166,15 @@ export default injectIntl(withTracker(({ intl }) => {
           breakoutRoom={Meeting.durationProps}
           messageDuration={intlMessages.meetingTimeRemaining}
           timeEndedMessage={intlMessages.meetingWillClose}
-          alertMessageUnderOneMinute={intl.formatMessage(intlMessages.alertMeetingEndsUnderOneMinute)}
+          alertMessageUnderOneMinute={
+            intl.formatMessage(intlMessages.alertMeetingEndsUnderOneMinute)
+          }
         />
       );
     }
   }
 
-
+  data.alert = true;
   data.color = 'primary';
   return data;
 })(NotificationsBarContainer));