diff --git a/bigbluebutton-client/locale/ar/bbbResources.properties b/bigbluebutton-client/locale/ar/bbbResources.properties
index 17bbf6a6fd8009f569f66c05582c7f8dc43669f7..39b2ac585233a98354ec51d6978be76a12e091fc 100644
--- a/bigbluebutton-client/locale/ar/bbbResources.properties
+++ b/bigbluebutton-client/locale/ar/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = الإتصال بالخادم
 bbb.mainshell.statusProgress.loading = تحميل
 bbb.mainshell.statusProgress.cannotConnectServer = عفوا, لا يمكن الاتصال بالخادم.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (إصدار {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = افتح نافذة السجلّ
 bbb.mainshell.meetingNotFound = الاجتماع غير موجود
 bbb.mainshell.invalidAuthToken = رمز مصادقة غير صالح
@@ -140,7 +140,7 @@ bbb.clientstatus.title = تنبيه الاعدادات
 bbb.clientstatus.notification = الإخطارات الغير مقروءة
 bbb.clientstatus.close = إغلاق
 bbb.clientstatus.tunneling.title = برنامج الحماية
-bbb.clientstatus.tunneling.message = "يمنع أحد جدران الحماية العميل التابع لك من الاتصال بصورة مباشرة من خلال بوابة 1935 بالخادم البعيد؛ ونرجح الاتصال من خلال شبكة أقل تقييدا لإمكانية التواصل بشكل أكثر استقرارا وثباتا. "
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = إصدار المتصفح
 bbb.clientstatus.browser.message = "إذا كان لمتصفح الخاص بك ({0}) غير مُحدث؛ نرجح تحديث هذا المتصفح ليتواكب مع أحدث نسخة صادرة من هذا النوع من المتصفحات. "
 bbb.clientstatus.flash.title = مشغل الفلاش
diff --git a/bigbluebutton-client/locale/cs_CZ/bbbResources.properties b/bigbluebutton-client/locale/cs_CZ/bbbResources.properties
index abecc53cf48a7f434d10d97161760a1159a8c18f..a23d37469b962d7a51d66fefaa31b0c409accca6 100644
--- a/bigbluebutton-client/locale/cs_CZ/bbbResources.properties
+++ b/bigbluebutton-client/locale/cs_CZ/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfigurační oznámení
 bbb.clientstatus.notification = Nepřečtená oznámení
 bbb.clientstatus.close = Zavřít
 bbb.clientstatus.tunneling.title = Firewall
-bbb.clientstatus.tunneling.message = Firewall znemožňuje přímé připojení ke vzdálenému serveru na portu 1935. Pro stabilní připojení doporučujeme méně retriktivní nastavení sítě.
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Verze prohlížeče
 bbb.clientstatus.browser.message = Váš prohlížeč ({0}) je zastaralý. Doporučujeme aktualizovat na poslední verzi.
 bbb.clientstatus.flash.title = Flash přehrávač
diff --git a/bigbluebutton-client/locale/cy_GB/bbbResources.properties b/bigbluebutton-client/locale/cy_GB/bbbResources.properties
index f9a5c25a4d156e1851869e150efeba94a03b2f49..924d75bb5fdfc62e4dfd635f38022c7c09f7203a 100644
--- a/bigbluebutton-client/locale/cy_GB/bbbResources.properties
+++ b/bigbluebutton-client/locale/cy_GB/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title =
 bbb.clientstatus.notification = 
 bbb.clientstatus.close = Cau
 bbb.clientstatus.tunneling.title = Mur gwarchod
-bbb.clientstatus.tunneling.message = Mae mur gwarchod yn atal eich cleient rhag cysylltu yn uniongyrchol ar borth 1935 i'r gweinydd. Argymell ymuno â rhwydwaith llai cyfyngol ar gyfer cysylltiad mwy sefydlog
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Fersiwn Porwr
 bbb.clientstatus.browser.message = 
 bbb.clientstatus.flash.title = Flash Player
diff --git a/bigbluebutton-client/locale/da_DK/bbbResources.properties b/bigbluebutton-client/locale/da_DK/bbbResources.properties
index 6530e862603dc8205b0f8966ebcc438c40fb1135..9fa30d0d13f82f54f922aca196e477ee20c2e932 100644
--- a/bigbluebutton-client/locale/da_DK/bbbResources.properties
+++ b/bigbluebutton-client/locale/da_DK/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Tilslutter til serveren
 bbb.mainshell.statusProgress.loading = Indlæser
 bbb.mainshell.statusProgress.cannotConnectServer = Vi kan desværre ikke oprette forbindelse til serveren.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = Ã…bn log-vinduet
 bbb.mainshell.meetingNotFound = Ingen møde fundet. 
 bbb.mainshell.invalidAuthToken = Ugyldig godkendelse
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfigurations meddelelser
 bbb.clientstatus.notification = Ikke læst notifikationer
 bbb.clientstatus.close = Luk
 bbb.clientstatus.tunneling.title = Firewall
-bbb.clientstatus.tunneling.message = En firewall forhindrer din klient i at forbinde direkte med port 1935. Vi anbefaler at deltage i en mindre restriktiv netværk for at opnå en mere stabil forbindelse.
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Browser version
 bbb.clientstatus.browser.message = Din browser ({0}) er ikke op til date. Vi anbefaler at du opdatere til den seneste version.
 bbb.clientstatus.flash.title = Flash Player
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Offentliggør
 bbb.polling.closeButton.label = Luk
 bbb.polling.customPollOption.label = Brugeropsat afstemning...
 bbb.polling.pollModal.title = Live undersøgelse resultater
-bbb.polling.pollModal.hint = Efterlad dette vindue åbent for at give eleverne mulighed for at svare på afstemningen. Afstemningen lukkes ved trykke på Luk eller Offentliggør. 
+bbb.polling.pollModal.hint = 
 bbb.polling.customChoices.title = Indtast svarmuligheder
 bbb.polling.respondersLabel.novotes = Venter på svar
 bbb.polling.respondersLabel.text = {0} brugere har svaret
diff --git a/bigbluebutton-client/locale/de_DE/bbbResources.properties b/bigbluebutton-client/locale/de_DE/bbbResources.properties
index 167387278f0d38972b74d613891cc0a757a821cd..21382cb375554c4904814b5f605579dde146681b 100644
--- a/bigbluebutton-client/locale/de_DE/bbbResources.properties
+++ b/bigbluebutton-client/locale/de_DE/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Baue Verbindung zum Server auf
 bbb.mainshell.statusProgress.loading = Lade
 bbb.mainshell.statusProgress.cannotConnectServer = Verbindung zum Server konnte nicht hergestellt werden.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
 bbb.mainshell.logBtn.toolTip = Protokollfenster öffnen
 bbb.mainshell.meetingNotFound = Kein Meeting gefunden
 bbb.mainshell.invalidAuthToken = Ungültiges Authentifizierungs-Token
@@ -45,7 +45,7 @@ bbb.micSettings.changeMic = Mikrofon testen oder ändern
 bbb.micSettings.changeMic.toolTip = Öffne die Mikrofoneinstellungen des Flash Players
 bbb.micSettings.comboMicList.toolTip = Wählen Sie ein Mikrofon
 bbb.micSettings.micRecordVolume.label = Pegel
-bbb.micSettings.micRecordVolume.toolTip = Stellen Sie Ihr Mikrofon erneut ein
+bbb.micSettings.micRecordVolume.toolTip = Stellen Sie Ihren Mikrofonpegel ein
 bbb.micSettings.nextButton = Weiter
 bbb.micSettings.nextButton.toolTip = Echotest starten
 bbb.micSettings.join = Jetzt teilnehmen
@@ -115,8 +115,8 @@ bbb.mainToolbar.recordBtn.toolTip.onlyModerators = Nur Moderatoren können die A
 bbb.mainToolbar.recordBtn.toolTip.wontInterrupt = Die Aufzeichnung kann nicht unterbrochen werden
 bbb.mainToolbar.recordBtn.toolTip.wontRecord = Diese Sitzung kann nicht aufgezeichnet werden
 bbb.mainToolbar.recordBtn.confirm.title = Aufzeichnung bestätigen
-bbb.mainToolbar.recordBtn.confirm.message.start = Sind Sie sicher, dass Sie die Aufzeichnung der Sitzung starten wollen?
-bbb.mainToolbar.recordBtn.confirm.message.stop = Sind Sie sicher, dass Sie die Aufzeichnung der Sitzung beenden wollen?
+bbb.mainToolbar.recordBtn.confirm.message.start = Sind Sie sicher, dass Sie die Aufzeichnung der Konferenz starten wollen?
+bbb.mainToolbar.recordBtn.confirm.message.stop = Sind Sie sicher, dass Sie die Aufzeichnung der Konferenz beenden wollen?
 bbb.mainToolbar.recordBtn.notification.title = Aufnahme-Benachrichtigung
 bbb.mainToolbar.recordBtn.notification.message1 = Sie können diese Konferenz aufnehmen.
 bbb.mainToolbar.recordBtn.notification.message2 = Klicken Sie den Aufnahme Start-/Stop-Button in der Titelleiste, um die Aufnahme zu beginnen oder zu beenden.
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfigurationsmeldungen
 bbb.clientstatus.notification = Ungelesene Meldungen
 bbb.clientstatus.close = Schließen
 bbb.clientstatus.tunneling.title = Firewall
-bbb.clientstatus.tunneling.message = Eine Firewall verhindert, dass ihr BBB Client sich direkt auf Port 1935 mit dem Server verbindet. Es wird empfohlen ein weniger restriktives Netzwerk zu verwenden, um eine stabilere Verbindung zum Server herzustellen.
+bbb.clientstatus.tunneling.message = Eine Firewall verhindert, dass sich Ihr Client direkt mit dem Server verbinden kann. Es wird empfohlen, aus einem weniger restriktiven Netzwerk an Konferenzen teilzunehmen, damit die Verbindung stabiler ist.
 bbb.clientstatus.browser.title = Browser Version
 bbb.clientstatus.browser.message = Ihr Browser ({0}) ist nicht aktuell. Es wird empfohlen, ihn auf die neuste Version zu aktualisieren
 bbb.clientstatus.flash.title = Flash Player
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Veröffentlichen
 bbb.polling.closeButton.label = Schließen
 bbb.polling.customPollOption.label = Benutzerdefinierte Umfrage...
 bbb.polling.pollModal.title = Live Umfrageergebnisse
-bbb.polling.pollModal.hint = Lassen Sie dieses Fenster geöffnet, damit die Teilnehmer ihre Antworten abgeben können. Wenn Sie auf Veröffentlichen oder Schließen klicken, wird die Umfrage dadurch beendet. 
+bbb.polling.pollModal.hint = Lassen Sie dieses Fenster offen, um auf die Antworten der Teilnehmer zu warten. Sobald Sie auf Veröffentlichen oder Schließen klicken, wird die Umfrage beendet.
 bbb.polling.customChoices.title = Antwortoptionen eingeben
 bbb.polling.respondersLabel.novotes = Warte auf Rückmeldungen
 bbb.polling.respondersLabel.text = {0} Nutzer haben geantwortet
@@ -801,7 +801,7 @@ bbb.shortcutkey.specialKeys.minus = Minus
 bbb.toolbar.videodock.toolTip.closeAllVideos = Alle Videos schließen
 bbb.users.settings.lockAll = Alle Teilnehmer stummschalten
 bbb.users.settings.lockAllExcept = Teilnehmer sperren außer Präsentator
-bbb.users.settings.lockSettings = Teilnehmer sperren...
+bbb.users.settings.lockSettings = Teilnehmerfunktionen einschränken
 bbb.users.settings.breakoutRooms = Breakout-Räume ...
 bbb.users.settings.sendBreakoutRoomsInvitations = Einladungen für Breakout-Räume verschicken ...
 bbb.users.settings.unlockAll = Alle Teilnehmer freigeben
@@ -815,15 +815,15 @@ bbb.lockSettings.cancel.toolTip = Fenster schließen ohne zu speichern
 
 bbb.lockSettings.hint = Diese Optionen ermöglichen es, bestimmte Funktionen für Zuschauer einzuschränken, wie z.B. die Nutzung des privaten Chats. (Diese Einschränkungen gelten nicht für Moderatoren)
 bbb.lockSettings.moderatorLocking = Sperrung durch Moderator
-bbb.lockSettings.privateChat = Privater Chat
-bbb.lockSettings.publicChat = Öffentlicher Chat
-bbb.lockSettings.webcam = Webcam
-bbb.lockSettings.webcamsOnlyForModerator = Webcams der anderen Zuschauer ausblenden
-bbb.lockSettings.microphone = Mikrofon
-bbb.lockSettings.layout = Layout
-bbb.lockSettings.title=Teilnehmer sperren
+bbb.lockSettings.privateChat = Privater Chat gesperrt
+bbb.lockSettings.publicChat = Öffentlicher Chat gesperrt
+bbb.lockSettings.webcam = Webcamfreigabe gesperrt
+bbb.lockSettings.webcamsOnlyForModerator = Webcams anderer Teilnehmer sehen
+bbb.lockSettings.microphone = Mikrofonfreigabe gesperrt
+bbb.lockSettings.layout = Layoutwechsel gesperrt
+bbb.lockSettings.title=Funktionen einschränken
 bbb.lockSettings.feature=Eigenschaft
-bbb.lockSettings.locked=Gesperrt
+bbb.lockSettings.locked=Aktiviert
 bbb.lockSettings.lockOnJoin=Beim Konferenzbeitritt sperren
 
 bbb.users.breakout.breakoutRooms = Breakout-Räume
diff --git a/bigbluebutton-client/locale/el_GR/bbbResources.properties b/bigbluebutton-client/locale/el_GR/bbbResources.properties
index ed233676b4bbdf594b99eb667d26ddf03ec27bf9..3888d43c13fa8821eda3620a04ba1bc15118739b 100644
--- a/bigbluebutton-client/locale/el_GR/bbbResources.properties
+++ b/bigbluebutton-client/locale/el_GR/bbbResources.properties
@@ -1,8 +1,8 @@
 bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Σύνδεση στον διακομιστή
-bbb.mainshell.statusProgress.loading = 
+bbb.mainshell.statusProgress.loading = Φορτώνει
 bbb.mainshell.statusProgress.cannotConnectServer = Λυπούμαστε, αλλά δεν μπορούμε να συνδεθούμε στο διακομιστή
-bbb.mainshell.copyrightLabel2 = 
+bbb.mainshell.copyrightLabel2 = (c) 2016 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
 bbb.mainshell.logBtn.toolTip = Ανοίξτε το παράθυρο καταγραφής
 bbb.mainshell.meetingNotFound = Δεν βρέθηκε η συνεδρίαση
 bbb.mainshell.invalidAuthToken = Λάθος στοιχεία πιστοποίησης
@@ -17,9 +17,9 @@ bbb.mainshell.quote.attribution.2 =
 bbb.mainshell.quote.sentence.3 = 
 bbb.mainshell.quote.attribution.3 = 
 bbb.mainshell.quote.sentence.4 = 
-bbb.mainshell.quote.attribution.4 = 
+bbb.mainshell.quote.attribution.4 = Anthony J. D'Angelo
 bbb.mainshell.quote.sentence.5 = 
-bbb.mainshell.quote.attribution.5 = 
+bbb.mainshell.quote.attribution.5 = Neil Armstrong
 bbb.oldlocalewindow.reminder1 = Μπορεί να έχετε παλαιότερη μετάφραση του BigBlueButton.
 bbb.oldlocalewindow.reminder2 = Παρακαλούμε εκκαθαρίστε το πρόσφατο ιστορικό του περιηγητή σας και ξαναπροσπαθήστε.
 bbb.oldlocalewindow.windowTitle = Προσοχή: Παλαιά Μετάφραση
@@ -97,7 +97,7 @@ bbb.webrtcWarning.connection.reestablished = Αποκαταστάθηκε η σ
 bbb.inactivityWarning.title = 
 bbb.inactivityWarning.message = 
 bbb.shuttingDown.message = 
-bbb.inactivityWarning.cancel = 
+bbb.inactivityWarning.cancel = Ακύρωση
 bbb.mainToolbar.helpBtn = Βοήθεια
 bbb.mainToolbar.logoutBtn = Αποσύνδεση
 bbb.mainToolbar.logoutBtn.toolTip = Αποσύνδεση
@@ -123,16 +123,16 @@ bbb.mainToolbar.recordBtn.notification.message2 = Για την εκκίνηση
 bbb.mainToolbar.recordingLabel.recording = (Εγγραφή)
 bbb.mainToolbar.recordingLabel.notRecording = Δεν γίνεται εγγραφή
 bbb.waitWindow.waitMessage.message = 
-bbb.waitWindow.waitMessage.title = 
-bbb.guests.title = 
+bbb.waitWindow.waitMessage.title = Αναμονή
+bbb.guests.title = Επισκέπτες
 bbb.guests.message.singular = 
 bbb.guests.message.plural = 
-bbb.guests.allowBtn.toolTip = 
+bbb.guests.allowBtn.toolTip = Επιτρέπω
 bbb.guests.allowEveryoneBtn.text = 
 bbb.guests.denyBtn.toolTip = 
 bbb.guests.denyEveryoneBtn.text = 
 bbb.guests.rememberAction.text = 
-bbb.guests.alwaysAccept = 
+bbb.guests.alwaysAccept = Αποδοχή πάντα
 bbb.guests.alwaysDeny = 
 bbb.guests.askModerator = 
 bbb.guests.Management = 
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Ειδοποιήσεις ρυθμίσεων
 bbb.clientstatus.notification = Αδιάβαστες ειδοποιήσεις
 bbb.clientstatus.close = Κλείσιμο
 bbb.clientstatus.tunneling.title = Τείχος Προστασίας
-bbb.clientstatus.tunneling.message = Ένα τείχος προστασίας εμποδίζει τον πελάτη σας να συνδεθεί απευθείας στη θύρα 1935 στον απομακρυσμένο διακομιστή. Προτείνουμε να ενταχθεί σε ένα λιγότερο περιοριστικό δίκτυο για μια πιο σταθερή σύνδεση.
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Έκδοση περιηγητή
 bbb.clientstatus.browser.message = Ο περιηγητής σας ({0}) δεν είναι ενημερωμένος. Προτείνεται ενημέρωση στην τελευταία έκδοση.
 bbb.clientstatus.flash.title = Flash Player
@@ -151,7 +151,7 @@ bbb.clientstatus.webrtc.almostStrongStatus =
 bbb.clientstatus.webrtc.almostWeakStatus = 
 bbb.clientstatus.webrtc.weakStatus = 
 bbb.clientstatus.webrtc.message = Συνιστούμε τη χρήση είτε του Firefox ή του Chrome για καλύτερη ακουστική.
-bbb.clientstatus.java.title = 
+bbb.clientstatus.java.title = Java
 bbb.clientstatus.java.notdetected = 
 bbb.clientstatus.java.notinstalled = 
 bbb.clientstatus.java.oldversion = 
@@ -200,7 +200,7 @@ bbb.users.usersGrid.statusItemRenderer.speakFaster =
 bbb.users.usersGrid.statusItemRenderer.speakSlower = 
 bbb.users.usersGrid.statusItemRenderer.away = 
 bbb.users.usersGrid.statusItemRenderer.confused = 
-bbb.users.usersGrid.statusItemRenderer.neutral = 
+bbb.users.usersGrid.statusItemRenderer.neutral = Ουδέτερο
 bbb.users.usersGrid.statusItemRenderer.happy = 
 bbb.users.usersGrid.statusItemRenderer.sad = 
 bbb.users.usersGrid.statusItemRenderer.clearStatus = Καθαρισμός κατάστασης
@@ -215,7 +215,7 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Κάντε κλικ για ν
 bbb.users.usersGrid.mediaItemRenderer.pushToMute = Κάντε κλικ για να απενεργοποιήσετε τον ήχο στον χρήστη
 bbb.users.usersGrid.mediaItemRenderer.pushToLock = Κλείδωμα του χρήστη {0}
 bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = Ξεκλείδωμα του χρήστη {0}
-bbb.users.usersGrid.mediaItemRenderer.kickUser = 
+bbb.users.usersGrid.mediaItemRenderer.kickUser = Διαγραφή {0}
 bbb.users.usersGrid.mediaItemRenderer.webcam = Η κάμερα διαμοιράζεται
 bbb.users.usersGrid.mediaItemRenderer.micOff = Μικρόφωνο κλειστό
 bbb.users.usersGrid.mediaItemRenderer.micOn = Μικρόφωνο ανοικτό
@@ -225,15 +225,15 @@ bbb.users.usersGrid.mediaItemRenderer.demoteUser =
 bbb.users.emojiStatus.clear = Καθαρισμός
 bbb.users.emojiStatus.raiseHand = 
 bbb.users.emojiStatus.happy = 
-bbb.users.emojiStatus.neutral = 
+bbb.users.emojiStatus.neutral = Ουδέτερο
 bbb.users.emojiStatus.sad = 
 bbb.users.emojiStatus.confused = 
 bbb.users.emojiStatus.away = 
 bbb.users.emojiStatus.thumbsUp = 
 bbb.users.emojiStatus.thumbsDown = 
 bbb.users.emojiStatus.applause = 
-bbb.users.emojiStatus.agree = 
-bbb.users.emojiStatus.disagree = 
+bbb.users.emojiStatus.agree = Συμφωνώ
+bbb.users.emojiStatus.disagree = Δεν Συμφωνώ
 bbb.users.emojiStatus.none = 
 bbb.users.emojiStatus.speakLouder = 
 bbb.users.emojiStatus.speakSofter = 
@@ -257,7 +257,7 @@ bbb.presentation.uploadcomplete = Η μεταφόρτωση ολοκληρώθη
 bbb.presentation.uploaded = μεταφορτώθηκε.
 bbb.presentation.document.supported = Το μεταφορτωμένο έγγραφο υποστηρίζεται. Ξεκινάει η διαδικασία μετατροπής...
 bbb.presentation.document.converted = Το έγγραφο του office μετατράπηκε επιτυχώς.
-bbb.presentation.error.document.convert.failed = 
+bbb.presentation.error.document.convert.failed = Δοκιμάστε να μετατρέψετε το έγγραφο σε PDF και ανεβάστε το ξανά.
 bbb.presentation.error.document.convert.invalid = 
 bbb.presentation.error.io = IO (ERROR)Σφάλμα (Εισόδου-Εξόδου): Παρακαλούμε επικοινωνήστε με τον διαχειριστή.
 bbb.presentation.error.security = Security Σφάλμα (Σφάλμα Ασφαλείας): Παρακαλούμε επικοινωνήστε με τον διαχειριστή.
@@ -287,7 +287,7 @@ bbb.fileupload.deleteBtn.toolTip = Διαγραφή παρουσίασης
 bbb.fileupload.showBtn = Προβολή
 bbb.fileupload.retry = 
 bbb.fileupload.showBtn.toolTip = Προβολή παρουσίασης
-bbb.fileupload.close.tooltip = 
+bbb.fileupload.close.tooltip = Κλείσιμο
 bbb.fileupload.close.accessibilityName = 
 bbb.fileupload.genThumbText = Δημιουργία μικρογραφιών...
 bbb.fileupload.progBarLbl = Πρόοδος:
@@ -295,10 +295,10 @@ bbb.fileupload.fileFormatHint =
 bbb.fileupload.letUserDownload = 
 bbb.fileupload.letUserDownload.tooltip = 
 bbb.filedownload.title = 
-bbb.filedownload.close.tooltip = 
+bbb.filedownload.close.tooltip = Κλείσιμο
 bbb.filedownload.close.accessibilityName = 
 bbb.filedownload.fileLbl = 
-bbb.filedownload.downloadBtn = 
+bbb.filedownload.downloadBtn = Κατέβασμα
 bbb.filedownload.downloadBtn.toolTip = 
 bbb.filedownload.thisFileIsDownloadable = 
 bbb.chat.title = Συζήτηση
@@ -309,13 +309,13 @@ bbb.chat.sendBtn.toolTip = Αποστολή μηνύματος
 bbb.chat.sendBtn.accessibilityName = Αποστολή μηνύματος
 bbb.chat.saveBtn.toolTip = 
 bbb.chat.saveBtn.accessibilityName = 
-bbb.chat.saveBtn.label = 
+bbb.chat.saveBtn.label = Αποθήκευση
 bbb.chat.save.complete = 
 bbb.chat.save.ioerror = 
 bbb.chat.save.filename = 
 bbb.chat.copyBtn.toolTip = 
 bbb.chat.copyBtn.accessibilityName = 
-bbb.chat.copyBtn.label = 
+bbb.chat.copyBtn.label = Αντιγραφή
 bbb.chat.copy.complete = 
 bbb.chat.clearBtn.toolTip = 
 bbb.chat.clearBtn.accessibilityName = 
@@ -334,7 +334,7 @@ bbb.chat.usersList.accessibilityName = Επιλέξτε το χρήστη για
 bbb.chat.chatOptions = Παράθυρο συνομιλίας Επιλογές συνομιλίας
 bbb.chat.fontSize = Παράθυρο συνομιλίας Μέγεθος γραμματοσειράς
 bbb.chat.cmbFontSize.toolTip = Επιλογή Μεγέθους Γραμματοσειράς Παράθυρου Συνομιλίας
-bbb.chat.messageList = 
+bbb.chat.messageList = Μηνύματα Συνομιλίας
 bbb.chat.minimizeBtn.accessibilityName = Ελαχιστοποίηση του παραθύρου συνομιλίας
 bbb.chat.maximizeRestoreBtn.accessibilityName = Μεγιστοποίηση του παραθύρου συνομιλίας
 bbb.chat.closeBtn.accessibilityName = Κλείσιμο του παραθύρου συνομιλίας
@@ -373,17 +373,17 @@ bbb.video.streamClose.toolTip = Κλείσιμο ροής για: {0}
 bbb.video.message.browserhttp = 
 bbb.screensharePublish.title = 
 bbb.screensharePublish.pause.tooltip = 
-bbb.screensharePublish.pause.label = 
+bbb.screensharePublish.pause.label = Παύση
 bbb.screensharePublish.restart.tooltip = 
-bbb.screensharePublish.restart.label = 
+bbb.screensharePublish.restart.label = Συνέχεια
 bbb.screensharePublish.maximizeRestoreBtn.toolTip = 
 bbb.screensharePublish.closeBtn.toolTip = 
 bbb.screensharePublish.closeBtn.accessibilityName = 
-bbb.screensharePublish.minimizeBtn.toolTip = 
+bbb.screensharePublish.minimizeBtn.toolTip = Ελαχιστοποίηση
 bbb.screensharePublish.minimizeBtn.accessibilityName = 
 bbb.screensharePublish.maximizeRestoreBtn.accessibilityName = 
 bbb.screensharePublish.commonHelpText.text = 
-bbb.screensharePublish.helpButton.toolTip = 
+bbb.screensharePublish.helpButton.toolTip = Βοήθεια
 bbb.screensharePublish.helpButton.accessibilityName = 
 bbb.screensharePublish.helpText.PCIE1 = 
 bbb.screensharePublish.helpText.PCIE2 = 
@@ -413,7 +413,7 @@ bbb.screensharePublish.helpText.LinuxChrome1 =
 bbb.screensharePublish.helpText.LinuxChrome2 = 
 bbb.screensharePublish.helpText.LinuxChrome3 = 
 bbb.screensharePublish.shareTypeLabel.text = 
-bbb.screensharePublish.shareType.fullScreen = 
+bbb.screensharePublish.shareType.fullScreen = Πλήρης οθόνη
 bbb.screensharePublish.shareType.region = 
 bbb.screensharePublish.pauseMessage.label = 
 bbb.screensharePublish.startFailed.label = 
@@ -422,9 +422,9 @@ bbb.screensharePublish.jwsCrashed.label =
 bbb.screensharePublish.commonErrorMessage.label = 
 bbb.screensharePublish.tunnelingErrorMessage.one = 
 bbb.screensharePublish.tunnelingErrorMessage.two = 
-bbb.screensharePublish.cancelButton.label = 
-bbb.screensharePublish.startButton.label = 
-bbb.screensharePublish.stopButton.label = 
+bbb.screensharePublish.cancelButton.label = Ακύρωση
+bbb.screensharePublish.startButton.label = Έναρξη
+bbb.screensharePublish.stopButton.label = Διακοπή
 bbb.screensharePublish.stopButton.toolTip = 
 bbb.screensharePublish.WebRTCChromeExtensionMissing.label = 
 bbb.screensharePublish.WebRTCRetryExtensionInstallation.label = 
@@ -440,17 +440,17 @@ bbb.screenshareView.actualSize =
 bbb.screenshareView.minimizeBtn.accessibilityName = 
 bbb.screenshareView.maximizeRestoreBtn.accessibilityName = 
 bbb.screenshareView.closeBtn.accessibilityName = 
-bbb.toolbar.phone.toolTip.start = 
-bbb.toolbar.phone.toolTip.stop = 
+bbb.toolbar.phone.toolTip.start = Ενεργοποίηση Ήχου (μικρόφωνο ή μόνο ακρόαση)
+bbb.toolbar.phone.toolTip.stop = Απενεργοποίηση Ήχου
 bbb.toolbar.phone.toolTip.mute = Διακοπή παρακολούθησης συνεδρίου
 bbb.toolbar.phone.toolTip.unmute = Εκκίνηση παρακολούθησης συνεδρίου
 bbb.toolbar.phone.toolTip.nomic = Δε βρέθηκε μικρόφωνο
-bbb.toolbar.deskshare.toolTip.start = 
-bbb.toolbar.deskshare.toolTip.stop = 
+bbb.toolbar.deskshare.toolTip.start = Άνοιγμα του παραθύρου διαμοιρασμού επιφάνειας εργασίας 
+bbb.toolbar.deskshare.toolTip.stop = Διακοπή διαμοιρασμού της επιφάνειας εργασίας σου
 bbb.toolbar.sharednotes.toolTip = 
 bbb.toolbar.video.toolTip.start = Διαμοιρασμός της κάμερας σας
 bbb.toolbar.video.toolTip.stop = Κλείσιμο διαμοιρασμού της κάμεράς σου
-bbb.layout.addButton.label = 
+bbb.layout.addButton.label = Προσθήκη
 bbb.layout.addButton.toolTip = Προσθήκη της προσαρμοσμένης εμφάνισης στην λίστα
 bbb.layout.overwriteLayoutName.title = 
 bbb.layout.overwriteLayoutName.text = 
@@ -464,7 +464,7 @@ bbb.layout.combo.custom = * Προσαρμοσμένη εμφάνιση
 bbb.layout.combo.customName = Προσαρμοσμένη εμφάνιση
 bbb.layout.combo.remote = Απομακρυσμένο
 bbb.layout.window.name = 
-bbb.layout.window.close.tooltip = 
+bbb.layout.window.close.tooltip = Κλείσιμο
 bbb.layout.window.close.accessibilityName = 
 bbb.layout.save.complete = Οι εμφανίσεις αποθηκεύτηκαν επιτυχώς
 bbb.layout.save.ioerror = 
@@ -517,9 +517,9 @@ bbb.logout.refresh.message = Εάν αυτή η αποσύνδεση ήταν α
 bbb.logout.refresh.label = Επανασύνδεση
 bbb.logout.feedback.hint = 
 bbb.logout.feedback.label = 
-bbb.settings.title = 
-bbb.settings.ok = 
-bbb.settings.cancel = 
+bbb.settings.title = Ρυθμίσεις
+bbb.settings.ok = OK
+bbb.settings.cancel = Ακύρωση
 bbb.settings.btn.toolTip = 
 bbb.logout.confirm.title = Επιβεβαίωση Αποσύνδεσης
 bbb.logout.confirm.message = Είστε σίγουρος/η οτι θέλετε να αποσυνδεθείτε;
@@ -542,7 +542,7 @@ bbb.notes.saveBtn.toolTip = Αποθήκευση σημείωσης
 bbb.sharedNotes.title = 
 bbb.sharedNotes.quickLink.label = 
 bbb.sharedNotes.createNoteWindow.label = 
-bbb.sharedNotes.createNoteWindow.close.tooltip = 
+bbb.sharedNotes.createNoteWindow.close.tooltip = Κλείσιμο
 bbb.sharedNotes.createNoteWindow.close.accessibilityName = 
 bbb.sharedNotes.typing.single = 
 bbb.sharedNotes.typing.double = 
@@ -551,8 +551,8 @@ bbb.sharedNotes.save.toolTip =
 bbb.sharedNotes.save.complete = 
 bbb.sharedNotes.save.ioerror = 
 bbb.sharedNotes.save.htmlLabel = 
-bbb.sharedNotes.save.txtLabel = 
-bbb.sharedNotes.new.label = 
+bbb.sharedNotes.save.txtLabel = Απλο κείμενο (.txt)
+bbb.sharedNotes.new.label = Δημιουργία
 bbb.sharedNotes.new.toolTip = 
 bbb.sharedNotes.limit.label = 
 bbb.sharedNotes.clear.label = 
@@ -578,21 +578,21 @@ bbb.settings.flash.label = Σφάλμα έκδοσης Flash
 bbb.settings.flash.text = Έχετε εγκατεστημένη την έκδοση {0} του Flash, αλλά χρειάζεστε τουλάχιστον την έκδοση {1} για να λειτουργεί το BigBlueButton απρόσκοπτα. Κάντε κλικ στο πλήκτρο παρακάτω για να εγκαταστήσετε τη νεότερη έκδοση του προγράμματος Adobe Flash.
 bbb.settings.flash.command = Εγκατάσταση νεότερης έκδοσης Flash
 bbb.settings.isight.label = Σφάλμα κάμερας iSight
-bbb.settings.isight.text = 
+bbb.settings.isight.text = Εάν αντιμετωπίζετε προβλήματα με την iSight κάμερά σας, ενδεχομένως αυτό να οφείλεται στο ότι χρησιμοποιείτε OS X 10.6.5., κάτι που είναι γνωστό ότι δημιουργεί προβλήματα στο Flash και δεν είναι δυνατή η σύλληψη εικόνας από την iSight κάμερα. Για να το διορθώσετε, κάντε κλικ στον παρακάτω σύνδεσμο για να εγκαταστήσετε μια νεότερη έκδοση του Flash, ή αναβαθμίστε το λογισμικό Mac σε νεότερη έκδοση.
 bbb.settings.isight.command = Εγκατάσταση Flash 10.2 RC2
 bbb.settings.warning.label = Προειδοποίηση
 bbb.settings.warning.close = Κλείσιμο της προειδοποίησης
 bbb.settings.noissues = Δεν εντοπίστηκαν εκκρεμή ζητήματα
 bbb.settings.instructions = Αποδεχτείτε το αίτημα του Flash που ζητά δικαιώματα πρόσβασης στην κάμερά σας. Εάν βλέπετε και ακούτε τον εαυτό σας σωστά, ο περιηγητής σας έχει ρυθμιστεί σωστά. Άλλα σημαντικά ζητήματα εμφανίζονται παρακάτω. Κάντε κλικ σε καθένα από αυτά για να βρείτε πιθανές λύσεις.
 bbb.bwmonitor.title = 
-bbb.bwmonitor.upload = 
-bbb.bwmonitor.upload.short = 
-bbb.bwmonitor.download = 
-bbb.bwmonitor.download.short = 
-bbb.bwmonitor.total = 
+bbb.bwmonitor.upload = Μεταφόρτωση
+bbb.bwmonitor.upload.short = Πάνω
+bbb.bwmonitor.download = Κατέβασμα
+bbb.bwmonitor.download.short = Κάτω
+bbb.bwmonitor.total = Σύνολο
 bbb.bwmonitor.current = 
-bbb.bwmonitor.available = 
-bbb.bwmonitor.latency = 
+bbb.bwmonitor.available = Διαθέσιμος/η
+bbb.bwmonitor.latency = Καθυστέρηση
 ltbcustom.bbb.highlighter.toolbar.triangle = Τρίγωνο
 ltbcustom.bbb.highlighter.toolbar.triangle.accessibilityName = Αλλαγή του κέρσορα της οθόνης σε τρίγωνο
 ltbcustom.bbb.highlighter.toolbar.line = Γραμμή
@@ -620,12 +620,12 @@ bbb.caption.option.takeowner =
 bbb.caption.option.takeowner.tooltip = 
 bbb.caption.option.fontfamily = 
 bbb.caption.option.fontfamily.tooltip = 
-bbb.caption.option.fontsize = 
-bbb.caption.option.fontsize.tooltip = 
+bbb.caption.option.fontsize = Μέγεθος γραμματοσειράς:
+bbb.caption.option.fontsize.tooltip = Μέγεθος γραμματοσειράς
 bbb.caption.option.backcolor = 
 bbb.caption.option.backcolor.tooltip = 
-bbb.caption.option.textcolor = 
-bbb.caption.option.textcolor.tooltip = 
+bbb.caption.option.textcolor = Χρώμα γραμματοσειράς:
+bbb.caption.option.textcolor.tooltip = Χρώμα γραμματοσειράς
 
 
 bbb.accessibility.clientReady = Έτοιμο
@@ -662,7 +662,7 @@ bbb.shortcutkey.general.minimize.function = Ελαχιστοποίηση τρέ
 bbb.shortcutkey.general.maximize = 187
 bbb.shortcutkey.general.maximize.function = Μεγιστοποίηση τρέχοντος παραθύρου
 
-bbb.shortcutkey.flash.exit = 
+bbb.shortcutkey.flash.exit = 79
 bbb.shortcutkey.flash.exit.function = Επικέντρωση εκτός του flash παραθύρου
 bbb.shortcutkey.users.muteme = 77
 bbb.shortcutkey.users.muteme.function = Σίγαση και ενεργοποίηση του μικροφώνου σου
@@ -681,7 +681,7 @@ bbb.shortcutkey.focus.presentation = 51
 bbb.shortcutkey.focus.presentation.function = Μετακίνηση της εστίασης στο παράθυρο της Παρουσίασης
 bbb.shortcutkey.focus.chat = 52
 bbb.shortcutkey.focus.chat.function = Μεταφορά της εστίασης στο παράθυρο συνομιλίας
-bbb.shortcutkey.focus.caption = 
+bbb.shortcutkey.focus.caption = 53
 bbb.shortcutkey.focus.caption.function = 
 
 bbb.shortcutkey.share.desktop = 68
@@ -696,7 +696,7 @@ bbb.shortcutkey.logout.function = Αποσύνδεση από αυτή την σ
 bbb.shortcutkey.raiseHand = 82
 bbb.shortcutkey.raiseHand.function = Ύψωσε το χέρι σου
 
-bbb.shortcutkey.present.upload = 
+bbb.shortcutkey.present.upload = 89
 bbb.shortcutkey.present.upload.function = Ανέβασμα παρουσίασης
 bbb.shortcutkey.present.previous = 65
 bbb.shortcutkey.present.previous.function = Πήγαινε στην προηγούμενη διαφάνεια
@@ -706,12 +706,12 @@ bbb.shortcutkey.present.next = 69
 bbb.shortcutkey.present.next.function = Πήγαινε στην επόμενη διαφάνεια
 bbb.shortcutkey.present.fitWidth = 70
 bbb.shortcutkey.present.fitWidth.function = Προσάρμοσε τις διαφάνειες στο πλάτος
-bbb.shortcutkey.present.fitPage = 
+bbb.shortcutkey.present.fitPage = 82
 bbb.shortcutkey.present.fitPage.function = Προσάρμοσε τις διαφάνειες στη σελίδα
 
-bbb.shortcutkey.users.makePresenter = 
+bbb.shortcutkey.users.makePresenter = 89
 bbb.shortcutkey.users.makePresenter.function = Κάνε το επιλεγμένο άτομο παρουσιαστή
-bbb.shortcutkey.users.kick = 
+bbb.shortcutkey.users.kick = 69
 bbb.shortcutkey.users.kick.function = 
 bbb.shortcutkey.users.mute = 83
 bbb.shortcutkey.users.mute.function = Σίγαση ή ενεργοποίηση του ήχου στο επιλεγμένο άτομο
@@ -719,18 +719,18 @@ bbb.shortcutkey.users.muteall = 65
 bbb.shortcutkey.users.muteall.function = Σίγαση ή ενεργοποίηση του ήχου σε όλους τους χρήστες
 bbb.shortcutkey.users.muteAllButPres = 65
 bbb.shortcutkey.users.muteAllButPres.function = Σίγαση σε όλους εκτός του παρουσιαστή
-bbb.shortcutkey.users.breakoutRooms = 
+bbb.shortcutkey.users.breakoutRooms = 75
 bbb.shortcutkey.users.breakoutRooms.function = 
-bbb.shortcutkey.users.focusBreakoutRooms = 
+bbb.shortcutkey.users.focusBreakoutRooms = 82
 bbb.shortcutkey.users.focusBreakoutRooms.function = 
-bbb.shortcutkey.users.listenToBreakoutRoom = 
+bbb.shortcutkey.users.listenToBreakoutRoom = 76
 bbb.shortcutkey.users.listenToBreakoutRoom.function = 
-bbb.shortcutkey.users.joinBreakoutRoom = 
+bbb.shortcutkey.users.joinBreakoutRoom = 79
 bbb.shortcutkey.users.joinBreakoutRoom.function = 
 
 bbb.shortcutkey.chat.focusTabs = 89
 bbb.shortcutkey.chat.focusTabs.function = Εστίασε στις καρτέλες συνομιλιών
-bbb.shortcutkey.chat.focusBox = 
+bbb.shortcutkey.chat.focusBox = 82
 bbb.shortcutkey.chat.focusBox.function = 
 bbb.shortcutkey.chat.changeColour = 67
 bbb.shortcutkey.chat.changeColour.function = Εστίαση στην επιλογή χρώματος γραμματαοσειράς.
@@ -756,7 +756,7 @@ bbb.shortcutkey.chat.chatbox.goread.function = Πλοήγηση στο πιο π
 bbb.shortcutkey.chat.chatbox.debug = 71
 bbb.shortcutkey.chat.chatbox.debug.function = Προσωρινό ενεργό κουμπί αποσφαλμάτωσης
 
-bbb.shortcutkey.caption.takeOwnership = 
+bbb.shortcutkey.caption.takeOwnership = 79
 bbb.shortcutkey.caption.takeOwnership.function = 
 
 bbb.polling.startButton.tooltip = Έναρξη Ψηφοφορίας
@@ -831,21 +831,21 @@ bbb.users.breakout.updateBreakoutRooms =
 bbb.users.breakout.timerForRoom.toolTip = 
 bbb.users.breakout.timer.toolTip = 
 bbb.users.breakout.calculatingRemainingTime = 
-bbb.users.breakout.closing = 
+bbb.users.breakout.closing = Κλείνει
 bbb.users.breakout.closewarning.text = 
-bbb.users.breakout.rooms = 
+bbb.users.breakout.rooms = Δωμάτια
 bbb.users.breakout.roomsCombo.accessibilityName = 
-bbb.users.breakout.room = 
+bbb.users.breakout.room = Δωμάτιο
 bbb.users.breakout.timeLimit = 
 bbb.users.breakout.durationStepper.accessibilityName = 
-bbb.users.breakout.minutes = 
-bbb.users.breakout.record = 
+bbb.users.breakout.minutes = Λεπτά
+bbb.users.breakout.record = Εγγραφή
 bbb.users.breakout.recordCheckbox.accessibilityName = 
 bbb.users.breakout.notAssigned = 
 bbb.users.breakout.dragAndDropToolTip = 
-bbb.users.breakout.start = 
-bbb.users.breakout.invite = 
-bbb.users.breakout.close = 
+bbb.users.breakout.start = Έναρξη
+bbb.users.breakout.invite = Προσκάλεσε
+bbb.users.breakout.close = Κλείσιμο
 bbb.users.breakout.closeAllRooms = 
 bbb.users.breakout.insufficientUsers = 
 bbb.users.breakout.confirm = 
@@ -853,19 +853,19 @@ bbb.users.breakout.invited =
 bbb.users.breakout.accept = 
 bbb.users.breakout.joinSession = 
 bbb.users.breakout.joinSession.accessibilityName = 
-bbb.users.breakout.joinSession.close.tooltip = 
+bbb.users.breakout.joinSession.close.tooltip = Κλείσιμο
 bbb.users.breakout.joinSession.close.accessibilityName = 
 bbb.users.breakout.youareinroom = 
-bbb.users.roomsGrid.room = 
-bbb.users.roomsGrid.users = 
-bbb.users.roomsGrid.action = 
+bbb.users.roomsGrid.room = Δωμάτιο
+bbb.users.roomsGrid.users = Χρήστες
+bbb.users.roomsGrid.action = Ενέργεια
 bbb.users.roomsGrid.transfer = 
 bbb.users.roomsGrid.join = 
 bbb.users.roomsGrid.noUsers = 
 
 bbb.langSelector.default=
 
-bbb.alert.cancel = 
-bbb.alert.ok = 
-bbb.alert.no = 
-bbb.alert.yes = 
+bbb.alert.cancel = Ακύρωση
+bbb.alert.ok = OK
+bbb.alert.no = Οχι
+bbb.alert.yes = Ναι
diff --git a/bigbluebutton-client/locale/es_419/bbbResources.properties b/bigbluebutton-client/locale/es_419/bbbResources.properties
index fe87e9ff650ad8d4247056e1653ed10d244c4d94..b99e7a232d6d49cecf45c7d207ebbbeb6bee3020 100644
--- a/bigbluebutton-client/locale/es_419/bbbResources.properties
+++ b/bigbluebutton-client/locale/es_419/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Conectando al servidor
 bbb.mainshell.statusProgress.loading = Cargando
 bbb.mainshell.statusProgress.cannotConnectServer = Lo sentimos, no se puede conectar al servidor.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (versión {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = Abrir la ventana de Registro (Log)
 bbb.mainshell.meetingNotFound = Sesión no encontrada
 bbb.mainshell.invalidAuthToken = Token de autenticación inválido
@@ -70,7 +70,7 @@ bbb.micPermissions.message.browserhttp =
 bbb.micPermissions.firefox.title = Permisos de micrófono en Firefox
 bbb.micPermissions.firefox.message = 
 bbb.micPermissions.chrome.title = Permisos de micrófono en Chrome
-bbb.micPermissions.chrome.message = 
+bbb.micPermissions.chrome.message = Haz click para dar permiso a Chrome de usar tu micrófono.
 bbb.micWarning.title = Alerta de audio
 bbb.micWarning.joinBtn.label = Unirse de todas formas
 bbb.micWarning.testAgain.label = Probar de nuevo
@@ -123,33 +123,33 @@ bbb.mainToolbar.recordBtn.notification.message2 = Debe hacer click en el botón
 bbb.mainToolbar.recordingLabel.recording = (Grabación)
 bbb.mainToolbar.recordingLabel.notRecording = No grabando
 bbb.waitWindow.waitMessage.message = 
-bbb.waitWindow.waitMessage.title = 
+bbb.waitWindow.waitMessage.title = Esperando
 bbb.guests.title = 
-bbb.guests.message.singular = 
-bbb.guests.message.plural = 
+bbb.guests.message.singular = {0} participantes desean unirse a esta reunión
+bbb.guests.message.plural = {0} participantes desean ingresar a esta reunión
 bbb.guests.allowBtn.toolTip = 
 bbb.guests.allowEveryoneBtn.text = 
-bbb.guests.denyBtn.toolTip = 
-bbb.guests.denyEveryoneBtn.text = 
+bbb.guests.denyBtn.toolTip = Negar
+bbb.guests.denyEveryoneBtn.text = Negar a todos
 bbb.guests.rememberAction.text = 
 bbb.guests.alwaysAccept = 
-bbb.guests.alwaysDeny = 
-bbb.guests.askModerator = 
-bbb.guests.Management = 
+bbb.guests.alwaysDeny = Siempre negar
+bbb.guests.askModerator = Preguntar al moderador
+bbb.guests.Management = Gestión de invitados
 bbb.clientstatus.title = Notificaciones de configuración
 bbb.clientstatus.notification = Notificaciones sin leer
 bbb.clientstatus.close = Cerrar
 bbb.clientstatus.tunneling.title = Contrafuegos
-bbb.clientstatus.tunneling.message = Un cortafuegos está evitando que el cliente se conecte directamente al servidor remoto por el puerto 1935. Se recomienda utilizar una red menos restringida para obtener una conexión más estable
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Versión de navegador
 bbb.clientstatus.browser.message = El navegador ({0}) no se encuentra actualizado. Se recomienda actualizarlo a la última versión.
 bbb.clientstatus.flash.title = Reproductor Flash
 bbb.clientstatus.flash.message = El reproductor Flash ({0}) no se encuentra actualizado. Se recomienda actualizarlo a la última versión.
 bbb.clientstatus.webrtc.title = Audio
-bbb.clientstatus.webrtc.strongStatus = 
-bbb.clientstatus.webrtc.almostStrongStatus = 
-bbb.clientstatus.webrtc.almostWeakStatus = 
-bbb.clientstatus.webrtc.weakStatus = 
+bbb.clientstatus.webrtc.strongStatus = Tu conexión de audio WebRTC es genial
+bbb.clientstatus.webrtc.almostStrongStatus = Tu conexión de audio WebRTC es buena
+bbb.clientstatus.webrtc.almostWeakStatus = Tu conexión de audio WebRTC es mala
+bbb.clientstatus.webrtc.weakStatus = Quizas existe un problema con su conexión de audio WebRTC
 bbb.clientstatus.webrtc.message = Se recomienda utilizar Firefox o Chrome para obtener mejor calidad de audio.
 bbb.clientstatus.java.title = 
 bbb.clientstatus.java.notdetected = 
@@ -189,14 +189,14 @@ bbb.users.usersGrid.statusItemRenderer = Estado
 bbb.users.usersGrid.statusItemRenderer.changePresenter = Haga click para cambiar a presentador
 bbb.users.usersGrid.statusItemRenderer.presenter = Presentador
 bbb.users.usersGrid.statusItemRenderer.moderator = Moderador
-bbb.users.usersGrid.statusItemRenderer.voiceOnlyUser = 
+bbb.users.usersGrid.statusItemRenderer.voiceOnlyUser = Solo voz
 bbb.users.usersGrid.statusItemRenderer.raiseHand = 
 bbb.users.usersGrid.statusItemRenderer.applause = Aplauso
 bbb.users.usersGrid.statusItemRenderer.thumbsUp = 
 bbb.users.usersGrid.statusItemRenderer.thumbsDown = 
 bbb.users.usersGrid.statusItemRenderer.speakLouder = 
-bbb.users.usersGrid.statusItemRenderer.speakSofter = 
-bbb.users.usersGrid.statusItemRenderer.speakFaster = 
+bbb.users.usersGrid.statusItemRenderer.speakSofter = Hablar más suave
+bbb.users.usersGrid.statusItemRenderer.speakFaster = Hablar rápido
 bbb.users.usersGrid.statusItemRenderer.speakSlower = 
 bbb.users.usersGrid.statusItemRenderer.away = Ausente
 bbb.users.usersGrid.statusItemRenderer.confused = Confundido
@@ -215,13 +215,13 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Activar audio a {0}
 bbb.users.usersGrid.mediaItemRenderer.pushToMute = Desactivar audio a {0}
 bbb.users.usersGrid.mediaItemRenderer.pushToLock = Bloquear {0}
 bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = Desbloquear {0}
-bbb.users.usersGrid.mediaItemRenderer.kickUser = 
+bbb.users.usersGrid.mediaItemRenderer.kickUser = Expulsar {0}
 bbb.users.usersGrid.mediaItemRenderer.webcam = Compartiendo cámara Web
 bbb.users.usersGrid.mediaItemRenderer.micOff = Micrófono apagado
 bbb.users.usersGrid.mediaItemRenderer.micOn = Micrófono encendido
 bbb.users.usersGrid.mediaItemRenderer.noAudio = No está en la Conferencia de Voz
 bbb.users.usersGrid.mediaItemRenderer.promoteUser = 
-bbb.users.usersGrid.mediaItemRenderer.demoteUser = 
+bbb.users.usersGrid.mediaItemRenderer.demoteUser = Degradar {0} al participante
 bbb.users.emojiStatus.clear = Limpiar
 bbb.users.emojiStatus.raiseHand = Levantar la mano
 bbb.users.emojiStatus.happy = Contento
@@ -232,13 +232,13 @@ bbb.users.emojiStatus.away = Ausente
 bbb.users.emojiStatus.thumbsUp = Señal de aprobación
 bbb.users.emojiStatus.thumbsDown = Señal de desaprobación
 bbb.users.emojiStatus.applause = Aplauso
-bbb.users.emojiStatus.agree = 
-bbb.users.emojiStatus.disagree = 
+bbb.users.emojiStatus.agree = Estoy de acuerdo
+bbb.users.emojiStatus.disagree = No estoy de acuerdo
 bbb.users.emojiStatus.none = 
-bbb.users.emojiStatus.speakLouder = 
+bbb.users.emojiStatus.speakLouder = Podrías hablar mas alto?
 bbb.users.emojiStatus.speakSofter = 
 bbb.users.emojiStatus.speakFaster = 
-bbb.users.emojiStatus.speakSlower = 
+bbb.users.emojiStatus.speakSlower = Por favor, podrías hablar mas despacio?
 bbb.users.emojiStatus.beRightBack = 
 bbb.presentation.title = Presentación
 bbb.presentation.titleWithPres = Presentación: {0}
@@ -258,7 +258,7 @@ bbb.presentation.uploaded = cargado.
 bbb.presentation.document.supported = El documento cargado es soportado. Iniciando la conversión...
 bbb.presentation.document.converted = La conversión del documento de Office fué exitosa.
 bbb.presentation.error.document.convert.failed = Intenta convertir el archivo a PDF y reintenta subirlo
-bbb.presentation.error.document.convert.invalid = 
+bbb.presentation.error.document.convert.invalid = Por favor, convertir este documento primero en PDF.
 bbb.presentation.error.io = Error de comunicación: Por favor contacte al administrador.
 bbb.presentation.error.security = Error de seguridad: Por favor contacte al administrador.
 bbb.presentation.error.convert.notsupported = Error: El documento cargado no esta soportado. Por favor, carge un tipo de documento soportado.
@@ -291,13 +291,13 @@ bbb.fileupload.close.tooltip = Cerrar
 bbb.fileupload.close.accessibilityName = 
 bbb.fileupload.genThumbText = Generando vistas en miniatura..
 bbb.fileupload.progBarLbl = Progreso:
-bbb.fileupload.fileFormatHint = 
+bbb.fileupload.fileFormatHint = Puede cargar cualquier documento Office o Documento en Formato Portable (PDF). Para mejores resultados, recomendamos cargar un PDF.
 bbb.fileupload.letUserDownload = 
-bbb.fileupload.letUserDownload.tooltip = 
-bbb.filedownload.title = 
+bbb.fileupload.letUserDownload.tooltip = Haz click aquí si desea que los otros usuarios descarguen su presentación
+bbb.filedownload.title = Descargar las presentaciones
 bbb.filedownload.close.tooltip = Cerrar
 bbb.filedownload.close.accessibilityName = 
-bbb.filedownload.fileLbl = 
+bbb.filedownload.fileLbl = Escoge archivo para descargar:
 bbb.filedownload.downloadBtn = 
 bbb.filedownload.downloadBtn.toolTip = 
 bbb.filedownload.thisFileIsDownloadable = 
@@ -309,16 +309,16 @@ bbb.chat.sendBtn.toolTip = Enviar Mensaje
 bbb.chat.sendBtn.accessibilityName = Enviar mensaje del chat
 bbb.chat.saveBtn.toolTip = 
 bbb.chat.saveBtn.accessibilityName = 
-bbb.chat.saveBtn.label = 
+bbb.chat.saveBtn.label = Guardar
 bbb.chat.save.complete = 
 bbb.chat.save.ioerror = 
-bbb.chat.save.filename = 
-bbb.chat.copyBtn.toolTip = 
+bbb.chat.save.filename = Chat público
+bbb.chat.copyBtn.toolTip = Copiar chat
 bbb.chat.copyBtn.accessibilityName = 
-bbb.chat.copyBtn.label = 
+bbb.chat.copyBtn.label = Copiar
 bbb.chat.copy.complete = 
-bbb.chat.clearBtn.toolTip = 
-bbb.chat.clearBtn.accessibilityName = 
+bbb.chat.clearBtn.toolTip = Limpiar chat público
+bbb.chat.clearBtn.accessibilityName = Limpiar el historial público del chat
 bbb.chat.clearBtn.chatMessage = 
 bbb.chat.clearBtn.alert.title = 
 bbb.chat.clearBtn.alert.text = 
@@ -340,7 +340,7 @@ bbb.chat.maximizeRestoreBtn.accessibilityName = Maximizar la ventana del chat
 bbb.chat.closeBtn.accessibilityName = Cerrar a ventana del chat
 bbb.chat.chatTabs.accessibleNotice = Nuevos mensajes en esta pestaña.
 bbb.chat.chatMessage.systemMessage = Sistema
-bbb.chat.chatMessage.stringRespresentation = 
+bbb.chat.chatMessage.stringRespresentation = De {0} {1} a {2}
 bbb.chat.chatMessage.tooLong = El mensaje demasiado largo por {0} carácter(es)
 bbb.publishVideo.changeCameraBtn.labelText = Cambiar la configuración de la camara
 bbb.publishVideo.changeCameraBtn.toolTip = Abrir la ventana de configuración de la cámara
@@ -372,74 +372,74 @@ bbb.video.publish.titleBar = Ventana de iniciación de la cámara web
 bbb.video.streamClose.toolTip = Terminar transmisión para: {0}
 bbb.video.message.browserhttp = 
 bbb.screensharePublish.title = Compartir Pantalla: Previsualización del Presentador
-bbb.screensharePublish.pause.tooltip = 
+bbb.screensharePublish.pause.tooltip = Pausar pantalla compartida
 bbb.screensharePublish.pause.label = Pausa
-bbb.screensharePublish.restart.tooltip = 
-bbb.screensharePublish.restart.label = 
+bbb.screensharePublish.restart.tooltip = Reanudar pantalla compartida
+bbb.screensharePublish.restart.label = Reaundar
 bbb.screensharePublish.maximizeRestoreBtn.toolTip = No puedes maximizar esta ventana.
 bbb.screensharePublish.closeBtn.toolTip = Dejar de compartir y cerrar
-bbb.screensharePublish.closeBtn.accessibilityName = 
+bbb.screensharePublish.closeBtn.accessibilityName = Parar compartir y cerrar ventana de publicación de pantalla compartida
 bbb.screensharePublish.minimizeBtn.toolTip = Minimizar
-bbb.screensharePublish.minimizeBtn.accessibilityName = 
-bbb.screensharePublish.maximizeRestoreBtn.accessibilityName = 
-bbb.screensharePublish.commonHelpText.text = 
+bbb.screensharePublish.minimizeBtn.accessibilityName = Minimizar la ventana de Escritorio Compartido.
+bbb.screensharePublish.maximizeRestoreBtn.accessibilityName = Maximizar la ventana de Escritorio Compartido.
+bbb.screensharePublish.commonHelpText.text = Los siguientes pasos abajo le guiarán sobre como compartir la pantalla (requiere Java).
 bbb.screensharePublish.helpButton.toolTip = Ayuda
-bbb.screensharePublish.helpButton.accessibilityName = 
-bbb.screensharePublish.helpText.PCIE1 = 
-bbb.screensharePublish.helpText.PCIE2 = 
+bbb.screensharePublish.helpButton.accessibilityName = Ayuda (Abrir tutorial en una nueva ventana)
+bbb.screensharePublish.helpText.PCIE1 = 1. Seleccione 'Abrir'
+bbb.screensharePublish.helpText.PCIE2 = 2. Aceptar el certificado
 bbb.screensharePublish.helpText.PCIE3 =
-bbb.screensharePublish.helpText.PCFirefox1 = 
-bbb.screensharePublish.helpText.PCFirefox2 = 
+bbb.screensharePublish.helpText.PCFirefox1 = 1. Click 'OK' para comenzar
+bbb.screensharePublish.helpText.PCFirefox2 = 2. Aceptar el certificado
 bbb.screensharePublish.helpText.PCFirefox3 =
-bbb.screensharePublish.helpText.PCChrome1 = 
-bbb.screensharePublish.helpText.PCChrome2 = 
-bbb.screensharePublish.helpText.PCChrome3 = 
-bbb.screensharePublish.helpText.MacSafari1 = 
-bbb.screensharePublish.helpText.MacSafari2 = 
-bbb.screensharePublish.helpText.MacSafari3 = 
-bbb.screensharePublish.helpText.MacSafari4 = 
-bbb.screensharePublish.helpText.MacFirefox1 = 
-bbb.screensharePublish.helpText.MacFirefox2 = 
-bbb.screensharePublish.helpText.MacFirefox3 = 
-bbb.screensharePublish.helpText.MacFirefox4 = 
-bbb.screensharePublish.helpText.MacChrome1 = 
-bbb.screensharePublish.helpText.MacChrome2 = 
-bbb.screensharePublish.helpText.MacChrome3 = 
-bbb.screensharePublish.helpText.MacChrome4 = 
-bbb.screensharePublish.helpText.LinuxFirefox1 = 
-bbb.screensharePublish.helpText.LinuxFirefox2 = 
+bbb.screensharePublish.helpText.PCChrome1 = 1. Localiza  'screenshare.jnlp'
+bbb.screensharePublish.helpText.PCChrome2 = 2. Haga click para abrir
+bbb.screensharePublish.helpText.PCChrome3 = 3. Aceptar el certificado
+bbb.screensharePublish.helpText.MacSafari1 = 1. Localiza  'screenshare.jnlp'
+bbb.screensharePublish.helpText.MacSafari2 = 2. Selecciona 'Mostrar en Finder'
+bbb.screensharePublish.helpText.MacSafari3 = 3. Haga click en botón derecho y seleccione 'Abrir'
+bbb.screensharePublish.helpText.MacSafari4 = 4. Seleccione 'Abrir' (si se le solicita)
+bbb.screensharePublish.helpText.MacFirefox1 = 1. Escoge 'Guardar archivo' (Si pregunta)
+bbb.screensharePublish.helpText.MacFirefox2 = 2. Selecciona 'Mostrar en Finder'
+bbb.screensharePublish.helpText.MacFirefox3 = 3. Haga click en botón derecho y seleccione 'Abrir'
+bbb.screensharePublish.helpText.MacFirefox4 = 4. Seleccione 'Abrir' (si se le solicita)
+bbb.screensharePublish.helpText.MacChrome1 = 1. Localiza  'screenshare.jnlp'
+bbb.screensharePublish.helpText.MacChrome2 = 2. Selecciona 'Mostrar en Finder'
+bbb.screensharePublish.helpText.MacChrome3 = 3. Haga click en botón derecho y seleccione 'Abrir'
+bbb.screensharePublish.helpText.MacChrome4 = 4. Seleccione 'Abrir' (si se le solicita)
+bbb.screensharePublish.helpText.LinuxFirefox1 = 1. Click 'OK' para comenzar
+bbb.screensharePublish.helpText.LinuxFirefox2 = Aceptar el certificado
 bbb.screensharePublish.helpText.LinuxFirefox3 =
-bbb.screensharePublish.helpText.LinuxChrome1 = 
-bbb.screensharePublish.helpText.LinuxChrome2 = 
-bbb.screensharePublish.helpText.LinuxChrome3 = 
-bbb.screensharePublish.shareTypeLabel.text = 
-bbb.screensharePublish.shareType.fullScreen = 
-bbb.screensharePublish.shareType.region = 
-bbb.screensharePublish.pauseMessage.label = 
-bbb.screensharePublish.startFailed.label = 
-bbb.screensharePublish.restartFailed.label = 
-bbb.screensharePublish.jwsCrashed.label = 
-bbb.screensharePublish.commonErrorMessage.label = 
-bbb.screensharePublish.tunnelingErrorMessage.one = 
+bbb.screensharePublish.helpText.LinuxChrome1 = 1. Localiza  'screenshare.jnlp'
+bbb.screensharePublish.helpText.LinuxChrome2 = 2. Haga click para abrir
+bbb.screensharePublish.helpText.LinuxChrome3 = 3. Aceptar el certificado
+bbb.screensharePublish.shareTypeLabel.text = Compartir:
+bbb.screensharePublish.shareType.fullScreen = Pantalla completa
+bbb.screensharePublish.shareType.region = Región
+bbb.screensharePublish.pauseMessage.label = Pantalla compartida actualmente pausada.
+bbb.screensharePublish.startFailed.label = No detectó comienzo de pantalla compartida.
+bbb.screensharePublish.restartFailed.label = No detectó reinicio de pantalla compartida.
+bbb.screensharePublish.jwsCrashed.label = La aplicación pantalla compartida cerró inesperadamente.
+bbb.screensharePublish.commonErrorMessage.label = Seleccione 'Cancelar' y trate nuevamente.
+bbb.screensharePublish.tunnelingErrorMessage.one = Compartir pantalla no esta disponible para usar.
 bbb.screensharePublish.tunnelingErrorMessage.two = 
 bbb.screensharePublish.cancelButton.label = Cancelar
 bbb.screensharePublish.startButton.label = Iniciar
-bbb.screensharePublish.stopButton.label = 
-bbb.screensharePublish.stopButton.toolTip = 
-bbb.screensharePublish.WebRTCChromeExtensionMissing.label = 
-bbb.screensharePublish.WebRTCRetryExtensionInstallation.label = 
+bbb.screensharePublish.stopButton.label = Detener
+bbb.screensharePublish.stopButton.toolTip = Detener compartir tu pantalla
+bbb.screensharePublish.WebRTCChromeExtensionMissing.label = Esta usando una versión reciente de Chrome pero no esta instalado la extensión de pantalla compartida.
+bbb.screensharePublish.WebRTCRetryExtensionInstallation.label = Después de instalar la extensión de pantalla compartida, por favor hacer click abajo en 'Reintentar'
 bbb.screensharePublish.WebRTCExtensionFailFallback.label = 
 bbb.screensharePublish.WebRTCPrivateBrowsingWarning.label = 
-bbb.screensharePublish.WebRTCExtensionInstallButton.label = 
-bbb.screensharePublish.WebRTCUseJavaButton.label = 
+bbb.screensharePublish.WebRTCExtensionInstallButton.label = Click aquí para instalar
+bbb.screensharePublish.WebRTCUseJavaButton.label = Usar Java pantalla compartida
 bbb.screensharePublish.WebRTCVideoLoading.label = 
 bbb.screensharePublish.sharingMessage= 
 bbb.screenshareView.title = Compartir escritorio
 bbb.screenshareView.fitToWindow = Ajustarse a la pantalla
-bbb.screenshareView.actualSize = 
-bbb.screenshareView.minimizeBtn.accessibilityName = 
-bbb.screenshareView.maximizeRestoreBtn.accessibilityName = 
-bbb.screenshareView.closeBtn.accessibilityName = 
+bbb.screenshareView.actualSize = Mostrar tamaño actual
+bbb.screenshareView.minimizeBtn.accessibilityName = Minimizar la ventana de Escritorio Compartido
+bbb.screenshareView.maximizeRestoreBtn.accessibilityName = Maximizar la ventana de Escritorio Compartido
+bbb.screenshareView.closeBtn.accessibilityName = Cerrar la ventana de Escritorio Compartido
 bbb.toolbar.phone.toolTip.start = Habilitar el audio (Micrófono o solo escuchar)
 bbb.toolbar.phone.toolTip.stop = Dejar de compartir micrófono
 bbb.toolbar.phone.toolTip.mute = Dejar de escuchar la conferencia
@@ -447,7 +447,7 @@ bbb.toolbar.phone.toolTip.unmute = Empezar a escuchar la conferencia
 bbb.toolbar.phone.toolTip.nomic = No se ha detectado micrófono
 bbb.toolbar.deskshare.toolTip.start = Compartir escritorio
 bbb.toolbar.deskshare.toolTip.stop = Dejar de compartir escritorio
-bbb.toolbar.sharednotes.toolTip = 
+bbb.toolbar.sharednotes.toolTip = Abrir notas compartidas
 bbb.toolbar.video.toolTip.start = Compartir su cámara Web
 bbb.toolbar.video.toolTip.stop = Dejar de compartir su cámara Web
 bbb.layout.addButton.label = Agregar
@@ -463,14 +463,14 @@ bbb.layout.combo.prompt = Aplicar diseño
 bbb.layout.combo.custom = *Diseño personalizado
 bbb.layout.combo.customName = Diseño personalizado
 bbb.layout.combo.remote = Remoto
-bbb.layout.window.name = 
+bbb.layout.window.name = Nombre de Diseño
 bbb.layout.window.close.tooltip = Cerrar
 bbb.layout.window.close.accessibilityName = 
 bbb.layout.save.complete = Los diseños fueron guardados exitosamente
 bbb.layout.save.ioerror = 
 bbb.layout.load.complete = Los diseños fueron cargados
 bbb.layout.load.failed = Error al cargar diseños
-bbb.layout.sync = 
+bbb.layout.sync = Tu diseño ha sido enviado a todos los participantes
 bbb.layout.name.defaultlayout = Alineación de ventanas por defecto
 bbb.layout.name.closedcaption = Subtitulos
 bbb.layout.name.videochat = Chat de Video
@@ -479,11 +479,11 @@ bbb.layout.name.presentfocus = Presentación
 bbb.layout.name.presentandusers = 
 bbb.layout.name.lectureassistant = Asistente de conferencia
 bbb.layout.name.lecture = Conferencia
-bbb.layout.name.sharednotes = 
+bbb.layout.name.sharednotes = Notas compartidas
 bbb.layout.addCurrentToFileWindow.title = 
 bbb.layout.addCurrentToFileWindow.text = 
 bbb.layout.denyAddToFile.toolTip = 
-bbb.layout.confirmAddToFile.toolTip = 
+bbb.layout.confirmAddToFile.toolTip = Confirmar aceptar el diseño actual
 bbb.highlighter.toolbar.pencil = Lápiz
 bbb.highlighter.toolbar.pencil.accessibilityName = Cambiar el cursor a lápiz
 bbb.highlighter.toolbar.ellipse = Círculo
@@ -509,13 +509,13 @@ bbb.logout.connectionfailed = La conexión al servidor ha terminado
 bbb.logout.rejected = La conexión al servidor ha sido rechazada
 bbb.logout.invalidapp = La aplicación red5 no existe
 bbb.logout.unknown = Su cliente ha perdido conexión con el servidor
-bbb.logout.guestkickedout = 
+bbb.logout.guestkickedout = El moderador no permitió ingreses a esta reunión
 bbb.logout.usercommand = Usted ha salido de la conferencia
-bbb.logour.breakoutRoomClose = 
-bbb.logout.ejectedFromMeeting = 
+bbb.logour.breakoutRoomClose = La ventana de su navegador se cerrará
+bbb.logout.ejectedFromMeeting = Usted a sido expulsado de la reunión.
 bbb.logout.refresh.message = Si esta desconexión no estaba planificada, pulse el botón para reconectar.
 bbb.logout.refresh.label = Reconectar
-bbb.logout.feedback.hint = 
+bbb.logout.feedback.hint = Como podemos hacer BigBlueButton Mejor?
 bbb.logout.feedback.label = 
 bbb.settings.title = 
 bbb.settings.ok = Correcto
@@ -523,7 +523,7 @@ bbb.settings.cancel = Cancelar
 bbb.settings.btn.toolTip = 
 bbb.logout.confirm.title = Confirmar Cerrar Sesión
 bbb.logout.confirm.message = ¿Esta seguro que desea cerrar sesión?
-bbb.logout.confirm.endMeeting = 
+bbb.logout.confirm.endMeeting = Si y finalizar la reunión
 bbb.logout.confirm.yes = Si
 bbb.logout.confirm.no = No
 bbb.endSession.confirm.title = 
@@ -544,16 +544,16 @@ bbb.sharedNotes.quickLink.label =
 bbb.sharedNotes.createNoteWindow.label = 
 bbb.sharedNotes.createNoteWindow.close.tooltip = Cerrar
 bbb.sharedNotes.createNoteWindow.close.accessibilityName = 
-bbb.sharedNotes.typing.single = 
-bbb.sharedNotes.typing.double = 
-bbb.sharedNotes.typing.multiple = 
+bbb.sharedNotes.typing.single = {0} esta escribiendo...
+bbb.sharedNotes.typing.double = {0} y {1} están escribiendo...
+bbb.sharedNotes.typing.multiple = Varias personas están escribiendo...
 bbb.sharedNotes.save.toolTip = 
 bbb.sharedNotes.save.complete = 
 bbb.sharedNotes.save.ioerror = 
 bbb.sharedNotes.save.htmlLabel = 
-bbb.sharedNotes.save.txtLabel = 
+bbb.sharedNotes.save.txtLabel = Texto plano (.txt)
 bbb.sharedNotes.new.label = 
-bbb.sharedNotes.new.toolTip = 
+bbb.sharedNotes.new.toolTip = Crear nota adicional
 bbb.sharedNotes.limit.label = 
 bbb.sharedNotes.clear.label = 
 bbb.sharedNotes.undo.toolTip = 
@@ -578,20 +578,20 @@ bbb.settings.flash.label = Error de versión de Flash
 bbb.settings.flash.text = Usted tiene Flash {0} instalado, pero necesita por lo menos la versión {1} para ejecutar BigBlueButton adecuadamente. Haga clic en el botón de abajo para instalar la última versión de Adobe Flash.
 bbb.settings.flash.command = Instalar la versión más reciente de Java
 bbb.settings.isight.label = Error en cámara iSight
-bbb.settings.isight.text = 
+bbb.settings.isight.text = Si presenta problemas con su cámara iSight, puede deberse a que está ejecutando OS X 10.6.5, El cual es conocido por presentar problemas con Flash en la captura de vídeo desde la cámara iSight.\n  Para corregir esto, haga clic en el enlace de abajo para instalar la versión más reciente de Flash Player, o actualizar tu Mac a la versión más reciente
 bbb.settings.isight.command = Instalar Flash 10.2 RC2
 bbb.settings.warning.label = Advertencia
 bbb.settings.warning.close = Alerta
 bbb.settings.noissues = Ninguna edicion excepcional se ha detectado
 bbb.settings.instructions = Acepte el mensaje de Flash que le pide permisos de cámara. Si usted puede verse y oírse, su navegador se ha configurado correctamente. Otros problemas potenciales se muestran a continuación. Haga clic en cada uno para encontrar una posible solución.
 bbb.bwmonitor.title = 
-bbb.bwmonitor.upload = 
+bbb.bwmonitor.upload = Subir
 bbb.bwmonitor.upload.short = 
 bbb.bwmonitor.download = 
-bbb.bwmonitor.download.short = 
-bbb.bwmonitor.total = 
-bbb.bwmonitor.current = 
-bbb.bwmonitor.available = 
+bbb.bwmonitor.download.short = Abajo
+bbb.bwmonitor.total = Total
+bbb.bwmonitor.current = Actual
+bbb.bwmonitor.available = Disponible
 bbb.bwmonitor.latency = 
 ltbcustom.bbb.highlighter.toolbar.triangle = Triángulo
 ltbcustom.bbb.highlighter.toolbar.triangle.accessibilityName = Cambiar Cursor de Pizarra a Triángulo
@@ -602,22 +602,22 @@ ltbcustom.bbb.highlighter.toolbar.text.accessibilityName = Cambiar Cursos de piz
 ltbcustom.bbb.highlighter.texttoolbar.textColorPicker = Color de texto
 ltbcustom.bbb.highlighter.texttoolbar.textSizeMenu = Támaño de fuente
 bbb.caption.window.title = Subtitulos
-bbb.caption.quickLink.label = 
-bbb.caption.window.titleBar = 
-bbb.caption.window.minimizeBtn.accessibilityName = 
-bbb.caption.window.maximizeRestoreBtn.accessibilityName = 
+bbb.caption.quickLink.label = Ventana de subtítulos
+bbb.caption.window.titleBar = Barra de título de la ventana de subtítulos
+bbb.caption.window.minimizeBtn.accessibilityName = Minimiza la ventana de subtítulos
+bbb.caption.window.maximizeRestoreBtn.accessibilityName = Maximiza la ventana de subtítulos
 bbb.caption.transcript.noowner = Ninguno
 bbb.caption.transcript.youowner = Usted
-bbb.caption.transcript.pastewarning.title = 
-bbb.caption.transcript.pastewarning.text = 
-bbb.caption.transcript.inputArea.toolTip = 
-bbb.caption.transcript.outputArea.toolTip = 
+bbb.caption.transcript.pastewarning.title = Advertencia de pegado de subtítulos
+bbb.caption.transcript.pastewarning.text = El texto a pegar no puede exceder de {0} caracteres. Usted pegó {1} caracteres.
+bbb.caption.transcript.inputArea.toolTip = Área interna de subtítulos
+bbb.caption.transcript.outputArea.toolTip = Área externa de subtítulos
 bbb.caption.option.label = Opciones
 bbb.caption.option.language = Idioma:
 bbb.caption.option.language.tooltip = Seleccionar idioma de subtitulos
-bbb.caption.option.language.accessibilityName = 
+bbb.caption.option.language.accessibilityName = Seleccione lenguaje de traducción. Use las teclas de dirección para navegar.
 bbb.caption.option.takeowner = Apropiarse
-bbb.caption.option.takeowner.tooltip = 
+bbb.caption.option.takeowner.tooltip = Usar lenguaje seleccionado
 bbb.caption.option.fontfamily = Tipo de letra:
 bbb.caption.option.fontfamily.tooltip = Tipo de letra
 bbb.caption.option.fontsize = Tamaño de letra:
@@ -643,16 +643,16 @@ bbb.accessibility.chat.initialDescription = Por favor usar las teclas direcciona
 bbb.accessibility.notes.notesview.input = Entradas de las notas
 
 bbb.shortcuthelp.title = Teclas de acceso directo
-bbb.shortcuthelp.titleBar = 
+bbb.shortcuthelp.titleBar = Teclas de acceso directo de la ventana de la barra de título
 bbb.shortcuthelp.minimizeBtn.accessibilityName = Minimizar la ventana de accesos rápidos
 bbb.shortcuthelp.maximizeRestoreBtn.accessibilityName = Mazimizar la ventana de accesos rápidos
 bbb.shortcuthelp.closeBtn.accessibilityName = Cerrar la ventana de accesos rápidos
-bbb.shortcuthelp.dropdown.accessibilityName = 
+bbb.shortcuthelp.dropdown.accessibilityName = Atajo para Categorias
 bbb.shortcuthelp.dropdown.general = Accesos rápidos globales
 bbb.shortcuthelp.dropdown.presentation = Accesos rápidos a la presentación
 bbb.shortcuthelp.dropdown.chat = Acceso rápido al chat
 bbb.shortcuthelp.dropdown.users = Acceso rápido a los usuarios
-bbb.shortcuthelp.dropdown.caption = 
+bbb.shortcuthelp.dropdown.caption = Atajos de subtítulos
 bbb.shortcuthelp.browserWarning.text = 
 bbb.shortcuthelp.headers.shortcut = Acceso Rápido
 bbb.shortcuthelp.headers.function = Función
@@ -682,7 +682,7 @@ bbb.shortcutkey.focus.presentation.function = Mover enfoque a la ventana de pres
 bbb.shortcutkey.focus.chat = 52
 bbb.shortcutkey.focus.chat.function = Mover enfoque a la venta de chat
 bbb.shortcutkey.focus.caption = 53
-bbb.shortcutkey.focus.caption.function = 
+bbb.shortcutkey.focus.caption.function = Mover ventana para observar subtítulos
 
 bbb.shortcutkey.share.desktop = 68
 bbb.shortcutkey.share.desktop.function = Abrir la ventana de compartir escritorio
@@ -712,7 +712,7 @@ bbb.shortcutkey.present.fitPage.function = Ajustar diapositivas en la página
 bbb.shortcutkey.users.makePresenter = 89
 bbb.shortcutkey.users.makePresenter.function = Hacer presentador a la persona seleccionada
 bbb.shortcutkey.users.kick = 69
-bbb.shortcutkey.users.kick.function = 
+bbb.shortcutkey.users.kick.function = Expulsar persona seleccionada de la reunión
 bbb.shortcutkey.users.mute = 83
 bbb.shortcutkey.users.mute.function = Activar o Desactivar sonido de la persona seleccionada
 bbb.shortcutkey.users.muteall = 65
@@ -720,18 +720,18 @@ bbb.shortcutkey.users.muteall.function = Activar o Desactivar sonido a todos los
 bbb.shortcutkey.users.muteAllButPres = 65
 bbb.shortcutkey.users.muteAllButPres.function = Silenciar a todos excepto al presentador
 bbb.shortcutkey.users.breakoutRooms = 75
-bbb.shortcutkey.users.breakoutRooms.function = 
+bbb.shortcutkey.users.breakoutRooms.function = Ventana de salas de reunion
 bbb.shortcutkey.users.focusBreakoutRooms = 82
-bbb.shortcutkey.users.focusBreakoutRooms.function = 
+bbb.shortcutkey.users.focusBreakoutRooms.function = Observar lista de sala de reunion
 bbb.shortcutkey.users.listenToBreakoutRoom = 76
-bbb.shortcutkey.users.listenToBreakoutRoom.function = 
+bbb.shortcutkey.users.listenToBreakoutRoom.function = Escuchar sala de reunión seleccionada
 bbb.shortcutkey.users.joinBreakoutRoom = 79
-bbb.shortcutkey.users.joinBreakoutRoom.function = 
+bbb.shortcutkey.users.joinBreakoutRoom.function = Unirse a la sala de reunión seleccionada
 
 bbb.shortcutkey.chat.focusTabs = 89
 bbb.shortcutkey.chat.focusTabs.function = Enfocar a las pestañas del chat
 bbb.shortcutkey.chat.focusBox = 82
-bbb.shortcutkey.chat.focusBox.function = 
+bbb.shortcutkey.chat.focusBox.function = Observar la lista de mensajes del chat
 bbb.shortcutkey.chat.changeColour = 67
 bbb.shortcutkey.chat.changeColour.function = Enfocar en el seleccionador de color de la fuente
 bbb.shortcutkey.chat.sendMessage = 83
@@ -757,13 +757,13 @@ bbb.shortcutkey.chat.chatbox.debug = 71
 bbb.shortcutkey.chat.chatbox.debug.function = Tecla de acceso rápido para depurar temporalmente
 
 bbb.shortcutkey.caption.takeOwnership = 79
-bbb.shortcutkey.caption.takeOwnership.function = 
+bbb.shortcutkey.caption.takeOwnership.function = Usar lenguaje seleccionado
 
 bbb.polling.startButton.tooltip = Iniciar una encuesta
 bbb.polling.startButton.label = Iniciar encuesta
 bbb.polling.publishButton.label = Publicar
 bbb.polling.closeButton.label = Cerrar
-bbb.polling.customPollOption.label = 
+bbb.polling.customPollOption.label = Encuesta personalizada...
 bbb.polling.pollModal.title = Resultados de la encuesta en tiempo real
 bbb.polling.pollModal.hint = 
 bbb.polling.customChoices.title = Agregar opciones para la encuesta
@@ -803,7 +803,7 @@ bbb.users.settings.lockAll = Bloquear a todos
 bbb.users.settings.lockAllExcept = Bloquear todos menos presentador
 bbb.users.settings.lockSettings = Bloquear espectadores ...
 bbb.users.settings.breakoutRooms = Sesión de pequeños gupos...
-bbb.users.settings.sendBreakoutRoomsInvitations = 
+bbb.users.settings.sendBreakoutRoomsInvitations = Enviar invitaciones a salas de reuniones
 bbb.users.settings.unlockAll = Desbloquear a todos los espectadores
 bbb.users.settings.roomIsLocked = Bloqueado por defecto
 bbb.users.settings.roomIsMuted = Silenciado por defecto
@@ -827,31 +827,31 @@ bbb.lockSettings.locked=Bloqueado
 bbb.lockSettings.lockOnJoin=Unirse
 
 bbb.users.breakout.breakoutRooms = Sesión de pequeños gupos
-bbb.users.breakout.updateBreakoutRooms = 
+bbb.users.breakout.updateBreakoutRooms = Actualizar sala de reunión
 bbb.users.breakout.timerForRoom.toolTip = 
-bbb.users.breakout.timer.toolTip = 
+bbb.users.breakout.timer.toolTip = Tiempo restante para las salas de reunión
 bbb.users.breakout.calculatingRemainingTime = Calculando tiempo restante ....
 bbb.users.breakout.closing = Cerrando
 bbb.users.breakout.closewarning.text = 
 bbb.users.breakout.rooms = Sesiones
-bbb.users.breakout.roomsCombo.accessibilityName = 
+bbb.users.breakout.roomsCombo.accessibilityName = Número de salas para crear
 bbb.users.breakout.room = Sesión
 bbb.users.breakout.timeLimit = Límite de tiempo
-bbb.users.breakout.durationStepper.accessibilityName = 
+bbb.users.breakout.durationStepper.accessibilityName = Tiempo límite en minutos
 bbb.users.breakout.minutes = Minutos
 bbb.users.breakout.record = Grabar
-bbb.users.breakout.recordCheckbox.accessibilityName = 
+bbb.users.breakout.recordCheckbox.accessibilityName = Grabar sala de reunion
 bbb.users.breakout.notAssigned = No asignado
 bbb.users.breakout.dragAndDropToolTip = Consejo: Puedes arrastarr y soltar usuarios entre los cuartos
 bbb.users.breakout.start = Iniciar
-bbb.users.breakout.invite = 
+bbb.users.breakout.invite = Invitar
 bbb.users.breakout.close = Cerrar
 bbb.users.breakout.closeAllRooms = Cerrar todas las sesiones de pequeños grupos
-bbb.users.breakout.insufficientUsers = 
-bbb.users.breakout.confirm = 
-bbb.users.breakout.invited = 
+bbb.users.breakout.insufficientUsers = Usuarios insuficientes. Se requiere al menos un usuario en una sala de reuniones.
+bbb.users.breakout.confirm = Unirse a una sala de reuniones
+bbb.users.breakout.invited = Has sido invitado a reunirte 1Sala de Reunión1
 bbb.users.breakout.accept = 
-bbb.users.breakout.joinSession = 
+bbb.users.breakout.joinSession = Unirse a la sesión
 bbb.users.breakout.joinSession.accessibilityName = 
 bbb.users.breakout.joinSession.close.tooltip = Cerrar
 bbb.users.breakout.joinSession.close.accessibilityName = 
diff --git a/bigbluebutton-client/locale/es_ES/bbbResources.properties b/bigbluebutton-client/locale/es_ES/bbbResources.properties
index b75e0c7b4606e35fe5c89fe51b86d3a87befb0c2..4ee421aa7088422a5f73013c4502f9b6dd75b489 100644
--- a/bigbluebutton-client/locale/es_ES/bbbResources.properties
+++ b/bigbluebutton-client/locale/es_ES/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Conectando con el servidor
 bbb.mainshell.statusProgress.loading = Cargando
 bbb.mainshell.statusProgress.cannotConnectServer = Lo sentimos, no es posible conectar con el servidor.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (compilación {0})
 bbb.mainshell.logBtn.toolTip = Abrir ventana de histórico
 bbb.mainshell.meetingNotFound = Reunión no encontrada
 bbb.mainshell.invalidAuthToken = Token de Autentificación No Válido
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Notificaciones de configuración
 bbb.clientstatus.notification = Notificaciones sin leer
 bbb.clientstatus.close = Cerrar
 bbb.clientstatus.tunneling.title = Cortafuegos
-bbb.clientstatus.tunneling.message = Un cortafuegos está evitando que el cliente se conecte directamente al servidor remoto por el puerto 1935. Se recomienda utilizar una red menos restringida para obtener una conexión más estable
+bbb.clientstatus.tunneling.message = Un cortafuegos está impidiendo que tu cliente se conecte directamente al servidor remoto. Te recomendamos conectarte a una red menos restrictiva para conseguir una conexión más estable.
 bbb.clientstatus.browser.title = Versión del navegador
 bbb.clientstatus.browser.message = El navegador ({0}) no se encuentra actualizado. Se recomienda actualizarlo a la última versión.
 bbb.clientstatus.flash.title = Reproductor Flash
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Publicar
 bbb.polling.closeButton.label = Cerrar
 bbb.polling.customPollOption.label = Encuesta a Medida...
 bbb.polling.pollModal.title = Resultados en vivo
-bbb.polling.pollModal.hint = Deja esta ventana abierta para permitir que los estudiantes puedan contestar a la encuesta. Pulsar el botón Publicar o Cerrar finalizará la encuesta.
+bbb.polling.pollModal.hint = Deja esta ventana abierta para permitir a otros contestar a la encuesta. Seleccionar Publicar o Cerrar finalizará la encuesta.
 bbb.polling.customChoices.title = Opciones de la encuesta
 bbb.polling.respondersLabel.novotes = Esperando respuestas
 bbb.polling.respondersLabel.text = {0} Usuarios han respondido
@@ -818,7 +818,7 @@ bbb.lockSettings.moderatorLocking = Bloqueo de moderador
 bbb.lockSettings.privateChat = Chat privado
 bbb.lockSettings.publicChat = Chat público
 bbb.lockSettings.webcam = Cámara
-bbb.lockSettings.webcamsOnlyForModerator = Ocultar las webcam de otros asistentes
+bbb.lockSettings.webcamsOnlyForModerator = Ver las cámaras de los otros participantes
 bbb.lockSettings.microphone = Micrófono
 bbb.lockSettings.layout = Diseño
 bbb.lockSettings.title=Bloquear audiencia
diff --git a/bigbluebutton-client/locale/es_LA/bbbResources.properties b/bigbluebutton-client/locale/es_LA/bbbResources.properties
index fe87e9ff650ad8d4247056e1653ed10d244c4d94..b99e7a232d6d49cecf45c7d207ebbbeb6bee3020 100644
--- a/bigbluebutton-client/locale/es_LA/bbbResources.properties
+++ b/bigbluebutton-client/locale/es_LA/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Conectando al servidor
 bbb.mainshell.statusProgress.loading = Cargando
 bbb.mainshell.statusProgress.cannotConnectServer = Lo sentimos, no se puede conectar al servidor.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (versión {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = Abrir la ventana de Registro (Log)
 bbb.mainshell.meetingNotFound = Sesión no encontrada
 bbb.mainshell.invalidAuthToken = Token de autenticación inválido
@@ -70,7 +70,7 @@ bbb.micPermissions.message.browserhttp =
 bbb.micPermissions.firefox.title = Permisos de micrófono en Firefox
 bbb.micPermissions.firefox.message = 
 bbb.micPermissions.chrome.title = Permisos de micrófono en Chrome
-bbb.micPermissions.chrome.message = 
+bbb.micPermissions.chrome.message = Haz click para dar permiso a Chrome de usar tu micrófono.
 bbb.micWarning.title = Alerta de audio
 bbb.micWarning.joinBtn.label = Unirse de todas formas
 bbb.micWarning.testAgain.label = Probar de nuevo
@@ -123,33 +123,33 @@ bbb.mainToolbar.recordBtn.notification.message2 = Debe hacer click en el botón
 bbb.mainToolbar.recordingLabel.recording = (Grabación)
 bbb.mainToolbar.recordingLabel.notRecording = No grabando
 bbb.waitWindow.waitMessage.message = 
-bbb.waitWindow.waitMessage.title = 
+bbb.waitWindow.waitMessage.title = Esperando
 bbb.guests.title = 
-bbb.guests.message.singular = 
-bbb.guests.message.plural = 
+bbb.guests.message.singular = {0} participantes desean unirse a esta reunión
+bbb.guests.message.plural = {0} participantes desean ingresar a esta reunión
 bbb.guests.allowBtn.toolTip = 
 bbb.guests.allowEveryoneBtn.text = 
-bbb.guests.denyBtn.toolTip = 
-bbb.guests.denyEveryoneBtn.text = 
+bbb.guests.denyBtn.toolTip = Negar
+bbb.guests.denyEveryoneBtn.text = Negar a todos
 bbb.guests.rememberAction.text = 
 bbb.guests.alwaysAccept = 
-bbb.guests.alwaysDeny = 
-bbb.guests.askModerator = 
-bbb.guests.Management = 
+bbb.guests.alwaysDeny = Siempre negar
+bbb.guests.askModerator = Preguntar al moderador
+bbb.guests.Management = Gestión de invitados
 bbb.clientstatus.title = Notificaciones de configuración
 bbb.clientstatus.notification = Notificaciones sin leer
 bbb.clientstatus.close = Cerrar
 bbb.clientstatus.tunneling.title = Contrafuegos
-bbb.clientstatus.tunneling.message = Un cortafuegos está evitando que el cliente se conecte directamente al servidor remoto por el puerto 1935. Se recomienda utilizar una red menos restringida para obtener una conexión más estable
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Versión de navegador
 bbb.clientstatus.browser.message = El navegador ({0}) no se encuentra actualizado. Se recomienda actualizarlo a la última versión.
 bbb.clientstatus.flash.title = Reproductor Flash
 bbb.clientstatus.flash.message = El reproductor Flash ({0}) no se encuentra actualizado. Se recomienda actualizarlo a la última versión.
 bbb.clientstatus.webrtc.title = Audio
-bbb.clientstatus.webrtc.strongStatus = 
-bbb.clientstatus.webrtc.almostStrongStatus = 
-bbb.clientstatus.webrtc.almostWeakStatus = 
-bbb.clientstatus.webrtc.weakStatus = 
+bbb.clientstatus.webrtc.strongStatus = Tu conexión de audio WebRTC es genial
+bbb.clientstatus.webrtc.almostStrongStatus = Tu conexión de audio WebRTC es buena
+bbb.clientstatus.webrtc.almostWeakStatus = Tu conexión de audio WebRTC es mala
+bbb.clientstatus.webrtc.weakStatus = Quizas existe un problema con su conexión de audio WebRTC
 bbb.clientstatus.webrtc.message = Se recomienda utilizar Firefox o Chrome para obtener mejor calidad de audio.
 bbb.clientstatus.java.title = 
 bbb.clientstatus.java.notdetected = 
@@ -189,14 +189,14 @@ bbb.users.usersGrid.statusItemRenderer = Estado
 bbb.users.usersGrid.statusItemRenderer.changePresenter = Haga click para cambiar a presentador
 bbb.users.usersGrid.statusItemRenderer.presenter = Presentador
 bbb.users.usersGrid.statusItemRenderer.moderator = Moderador
-bbb.users.usersGrid.statusItemRenderer.voiceOnlyUser = 
+bbb.users.usersGrid.statusItemRenderer.voiceOnlyUser = Solo voz
 bbb.users.usersGrid.statusItemRenderer.raiseHand = 
 bbb.users.usersGrid.statusItemRenderer.applause = Aplauso
 bbb.users.usersGrid.statusItemRenderer.thumbsUp = 
 bbb.users.usersGrid.statusItemRenderer.thumbsDown = 
 bbb.users.usersGrid.statusItemRenderer.speakLouder = 
-bbb.users.usersGrid.statusItemRenderer.speakSofter = 
-bbb.users.usersGrid.statusItemRenderer.speakFaster = 
+bbb.users.usersGrid.statusItemRenderer.speakSofter = Hablar más suave
+bbb.users.usersGrid.statusItemRenderer.speakFaster = Hablar rápido
 bbb.users.usersGrid.statusItemRenderer.speakSlower = 
 bbb.users.usersGrid.statusItemRenderer.away = Ausente
 bbb.users.usersGrid.statusItemRenderer.confused = Confundido
@@ -215,13 +215,13 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Activar audio a {0}
 bbb.users.usersGrid.mediaItemRenderer.pushToMute = Desactivar audio a {0}
 bbb.users.usersGrid.mediaItemRenderer.pushToLock = Bloquear {0}
 bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = Desbloquear {0}
-bbb.users.usersGrid.mediaItemRenderer.kickUser = 
+bbb.users.usersGrid.mediaItemRenderer.kickUser = Expulsar {0}
 bbb.users.usersGrid.mediaItemRenderer.webcam = Compartiendo cámara Web
 bbb.users.usersGrid.mediaItemRenderer.micOff = Micrófono apagado
 bbb.users.usersGrid.mediaItemRenderer.micOn = Micrófono encendido
 bbb.users.usersGrid.mediaItemRenderer.noAudio = No está en la Conferencia de Voz
 bbb.users.usersGrid.mediaItemRenderer.promoteUser = 
-bbb.users.usersGrid.mediaItemRenderer.demoteUser = 
+bbb.users.usersGrid.mediaItemRenderer.demoteUser = Degradar {0} al participante
 bbb.users.emojiStatus.clear = Limpiar
 bbb.users.emojiStatus.raiseHand = Levantar la mano
 bbb.users.emojiStatus.happy = Contento
@@ -232,13 +232,13 @@ bbb.users.emojiStatus.away = Ausente
 bbb.users.emojiStatus.thumbsUp = Señal de aprobación
 bbb.users.emojiStatus.thumbsDown = Señal de desaprobación
 bbb.users.emojiStatus.applause = Aplauso
-bbb.users.emojiStatus.agree = 
-bbb.users.emojiStatus.disagree = 
+bbb.users.emojiStatus.agree = Estoy de acuerdo
+bbb.users.emojiStatus.disagree = No estoy de acuerdo
 bbb.users.emojiStatus.none = 
-bbb.users.emojiStatus.speakLouder = 
+bbb.users.emojiStatus.speakLouder = Podrías hablar mas alto?
 bbb.users.emojiStatus.speakSofter = 
 bbb.users.emojiStatus.speakFaster = 
-bbb.users.emojiStatus.speakSlower = 
+bbb.users.emojiStatus.speakSlower = Por favor, podrías hablar mas despacio?
 bbb.users.emojiStatus.beRightBack = 
 bbb.presentation.title = Presentación
 bbb.presentation.titleWithPres = Presentación: {0}
@@ -258,7 +258,7 @@ bbb.presentation.uploaded = cargado.
 bbb.presentation.document.supported = El documento cargado es soportado. Iniciando la conversión...
 bbb.presentation.document.converted = La conversión del documento de Office fué exitosa.
 bbb.presentation.error.document.convert.failed = Intenta convertir el archivo a PDF y reintenta subirlo
-bbb.presentation.error.document.convert.invalid = 
+bbb.presentation.error.document.convert.invalid = Por favor, convertir este documento primero en PDF.
 bbb.presentation.error.io = Error de comunicación: Por favor contacte al administrador.
 bbb.presentation.error.security = Error de seguridad: Por favor contacte al administrador.
 bbb.presentation.error.convert.notsupported = Error: El documento cargado no esta soportado. Por favor, carge un tipo de documento soportado.
@@ -291,13 +291,13 @@ bbb.fileupload.close.tooltip = Cerrar
 bbb.fileupload.close.accessibilityName = 
 bbb.fileupload.genThumbText = Generando vistas en miniatura..
 bbb.fileupload.progBarLbl = Progreso:
-bbb.fileupload.fileFormatHint = 
+bbb.fileupload.fileFormatHint = Puede cargar cualquier documento Office o Documento en Formato Portable (PDF). Para mejores resultados, recomendamos cargar un PDF.
 bbb.fileupload.letUserDownload = 
-bbb.fileupload.letUserDownload.tooltip = 
-bbb.filedownload.title = 
+bbb.fileupload.letUserDownload.tooltip = Haz click aquí si desea que los otros usuarios descarguen su presentación
+bbb.filedownload.title = Descargar las presentaciones
 bbb.filedownload.close.tooltip = Cerrar
 bbb.filedownload.close.accessibilityName = 
-bbb.filedownload.fileLbl = 
+bbb.filedownload.fileLbl = Escoge archivo para descargar:
 bbb.filedownload.downloadBtn = 
 bbb.filedownload.downloadBtn.toolTip = 
 bbb.filedownload.thisFileIsDownloadable = 
@@ -309,16 +309,16 @@ bbb.chat.sendBtn.toolTip = Enviar Mensaje
 bbb.chat.sendBtn.accessibilityName = Enviar mensaje del chat
 bbb.chat.saveBtn.toolTip = 
 bbb.chat.saveBtn.accessibilityName = 
-bbb.chat.saveBtn.label = 
+bbb.chat.saveBtn.label = Guardar
 bbb.chat.save.complete = 
 bbb.chat.save.ioerror = 
-bbb.chat.save.filename = 
-bbb.chat.copyBtn.toolTip = 
+bbb.chat.save.filename = Chat público
+bbb.chat.copyBtn.toolTip = Copiar chat
 bbb.chat.copyBtn.accessibilityName = 
-bbb.chat.copyBtn.label = 
+bbb.chat.copyBtn.label = Copiar
 bbb.chat.copy.complete = 
-bbb.chat.clearBtn.toolTip = 
-bbb.chat.clearBtn.accessibilityName = 
+bbb.chat.clearBtn.toolTip = Limpiar chat público
+bbb.chat.clearBtn.accessibilityName = Limpiar el historial público del chat
 bbb.chat.clearBtn.chatMessage = 
 bbb.chat.clearBtn.alert.title = 
 bbb.chat.clearBtn.alert.text = 
@@ -340,7 +340,7 @@ bbb.chat.maximizeRestoreBtn.accessibilityName = Maximizar la ventana del chat
 bbb.chat.closeBtn.accessibilityName = Cerrar a ventana del chat
 bbb.chat.chatTabs.accessibleNotice = Nuevos mensajes en esta pestaña.
 bbb.chat.chatMessage.systemMessage = Sistema
-bbb.chat.chatMessage.stringRespresentation = 
+bbb.chat.chatMessage.stringRespresentation = De {0} {1} a {2}
 bbb.chat.chatMessage.tooLong = El mensaje demasiado largo por {0} carácter(es)
 bbb.publishVideo.changeCameraBtn.labelText = Cambiar la configuración de la camara
 bbb.publishVideo.changeCameraBtn.toolTip = Abrir la ventana de configuración de la cámara
@@ -372,74 +372,74 @@ bbb.video.publish.titleBar = Ventana de iniciación de la cámara web
 bbb.video.streamClose.toolTip = Terminar transmisión para: {0}
 bbb.video.message.browserhttp = 
 bbb.screensharePublish.title = Compartir Pantalla: Previsualización del Presentador
-bbb.screensharePublish.pause.tooltip = 
+bbb.screensharePublish.pause.tooltip = Pausar pantalla compartida
 bbb.screensharePublish.pause.label = Pausa
-bbb.screensharePublish.restart.tooltip = 
-bbb.screensharePublish.restart.label = 
+bbb.screensharePublish.restart.tooltip = Reanudar pantalla compartida
+bbb.screensharePublish.restart.label = Reaundar
 bbb.screensharePublish.maximizeRestoreBtn.toolTip = No puedes maximizar esta ventana.
 bbb.screensharePublish.closeBtn.toolTip = Dejar de compartir y cerrar
-bbb.screensharePublish.closeBtn.accessibilityName = 
+bbb.screensharePublish.closeBtn.accessibilityName = Parar compartir y cerrar ventana de publicación de pantalla compartida
 bbb.screensharePublish.minimizeBtn.toolTip = Minimizar
-bbb.screensharePublish.minimizeBtn.accessibilityName = 
-bbb.screensharePublish.maximizeRestoreBtn.accessibilityName = 
-bbb.screensharePublish.commonHelpText.text = 
+bbb.screensharePublish.minimizeBtn.accessibilityName = Minimizar la ventana de Escritorio Compartido.
+bbb.screensharePublish.maximizeRestoreBtn.accessibilityName = Maximizar la ventana de Escritorio Compartido.
+bbb.screensharePublish.commonHelpText.text = Los siguientes pasos abajo le guiarán sobre como compartir la pantalla (requiere Java).
 bbb.screensharePublish.helpButton.toolTip = Ayuda
-bbb.screensharePublish.helpButton.accessibilityName = 
-bbb.screensharePublish.helpText.PCIE1 = 
-bbb.screensharePublish.helpText.PCIE2 = 
+bbb.screensharePublish.helpButton.accessibilityName = Ayuda (Abrir tutorial en una nueva ventana)
+bbb.screensharePublish.helpText.PCIE1 = 1. Seleccione 'Abrir'
+bbb.screensharePublish.helpText.PCIE2 = 2. Aceptar el certificado
 bbb.screensharePublish.helpText.PCIE3 =
-bbb.screensharePublish.helpText.PCFirefox1 = 
-bbb.screensharePublish.helpText.PCFirefox2 = 
+bbb.screensharePublish.helpText.PCFirefox1 = 1. Click 'OK' para comenzar
+bbb.screensharePublish.helpText.PCFirefox2 = 2. Aceptar el certificado
 bbb.screensharePublish.helpText.PCFirefox3 =
-bbb.screensharePublish.helpText.PCChrome1 = 
-bbb.screensharePublish.helpText.PCChrome2 = 
-bbb.screensharePublish.helpText.PCChrome3 = 
-bbb.screensharePublish.helpText.MacSafari1 = 
-bbb.screensharePublish.helpText.MacSafari2 = 
-bbb.screensharePublish.helpText.MacSafari3 = 
-bbb.screensharePublish.helpText.MacSafari4 = 
-bbb.screensharePublish.helpText.MacFirefox1 = 
-bbb.screensharePublish.helpText.MacFirefox2 = 
-bbb.screensharePublish.helpText.MacFirefox3 = 
-bbb.screensharePublish.helpText.MacFirefox4 = 
-bbb.screensharePublish.helpText.MacChrome1 = 
-bbb.screensharePublish.helpText.MacChrome2 = 
-bbb.screensharePublish.helpText.MacChrome3 = 
-bbb.screensharePublish.helpText.MacChrome4 = 
-bbb.screensharePublish.helpText.LinuxFirefox1 = 
-bbb.screensharePublish.helpText.LinuxFirefox2 = 
+bbb.screensharePublish.helpText.PCChrome1 = 1. Localiza  'screenshare.jnlp'
+bbb.screensharePublish.helpText.PCChrome2 = 2. Haga click para abrir
+bbb.screensharePublish.helpText.PCChrome3 = 3. Aceptar el certificado
+bbb.screensharePublish.helpText.MacSafari1 = 1. Localiza  'screenshare.jnlp'
+bbb.screensharePublish.helpText.MacSafari2 = 2. Selecciona 'Mostrar en Finder'
+bbb.screensharePublish.helpText.MacSafari3 = 3. Haga click en botón derecho y seleccione 'Abrir'
+bbb.screensharePublish.helpText.MacSafari4 = 4. Seleccione 'Abrir' (si se le solicita)
+bbb.screensharePublish.helpText.MacFirefox1 = 1. Escoge 'Guardar archivo' (Si pregunta)
+bbb.screensharePublish.helpText.MacFirefox2 = 2. Selecciona 'Mostrar en Finder'
+bbb.screensharePublish.helpText.MacFirefox3 = 3. Haga click en botón derecho y seleccione 'Abrir'
+bbb.screensharePublish.helpText.MacFirefox4 = 4. Seleccione 'Abrir' (si se le solicita)
+bbb.screensharePublish.helpText.MacChrome1 = 1. Localiza  'screenshare.jnlp'
+bbb.screensharePublish.helpText.MacChrome2 = 2. Selecciona 'Mostrar en Finder'
+bbb.screensharePublish.helpText.MacChrome3 = 3. Haga click en botón derecho y seleccione 'Abrir'
+bbb.screensharePublish.helpText.MacChrome4 = 4. Seleccione 'Abrir' (si se le solicita)
+bbb.screensharePublish.helpText.LinuxFirefox1 = 1. Click 'OK' para comenzar
+bbb.screensharePublish.helpText.LinuxFirefox2 = Aceptar el certificado
 bbb.screensharePublish.helpText.LinuxFirefox3 =
-bbb.screensharePublish.helpText.LinuxChrome1 = 
-bbb.screensharePublish.helpText.LinuxChrome2 = 
-bbb.screensharePublish.helpText.LinuxChrome3 = 
-bbb.screensharePublish.shareTypeLabel.text = 
-bbb.screensharePublish.shareType.fullScreen = 
-bbb.screensharePublish.shareType.region = 
-bbb.screensharePublish.pauseMessage.label = 
-bbb.screensharePublish.startFailed.label = 
-bbb.screensharePublish.restartFailed.label = 
-bbb.screensharePublish.jwsCrashed.label = 
-bbb.screensharePublish.commonErrorMessage.label = 
-bbb.screensharePublish.tunnelingErrorMessage.one = 
+bbb.screensharePublish.helpText.LinuxChrome1 = 1. Localiza  'screenshare.jnlp'
+bbb.screensharePublish.helpText.LinuxChrome2 = 2. Haga click para abrir
+bbb.screensharePublish.helpText.LinuxChrome3 = 3. Aceptar el certificado
+bbb.screensharePublish.shareTypeLabel.text = Compartir:
+bbb.screensharePublish.shareType.fullScreen = Pantalla completa
+bbb.screensharePublish.shareType.region = Región
+bbb.screensharePublish.pauseMessage.label = Pantalla compartida actualmente pausada.
+bbb.screensharePublish.startFailed.label = No detectó comienzo de pantalla compartida.
+bbb.screensharePublish.restartFailed.label = No detectó reinicio de pantalla compartida.
+bbb.screensharePublish.jwsCrashed.label = La aplicación pantalla compartida cerró inesperadamente.
+bbb.screensharePublish.commonErrorMessage.label = Seleccione 'Cancelar' y trate nuevamente.
+bbb.screensharePublish.tunnelingErrorMessage.one = Compartir pantalla no esta disponible para usar.
 bbb.screensharePublish.tunnelingErrorMessage.two = 
 bbb.screensharePublish.cancelButton.label = Cancelar
 bbb.screensharePublish.startButton.label = Iniciar
-bbb.screensharePublish.stopButton.label = 
-bbb.screensharePublish.stopButton.toolTip = 
-bbb.screensharePublish.WebRTCChromeExtensionMissing.label = 
-bbb.screensharePublish.WebRTCRetryExtensionInstallation.label = 
+bbb.screensharePublish.stopButton.label = Detener
+bbb.screensharePublish.stopButton.toolTip = Detener compartir tu pantalla
+bbb.screensharePublish.WebRTCChromeExtensionMissing.label = Esta usando una versión reciente de Chrome pero no esta instalado la extensión de pantalla compartida.
+bbb.screensharePublish.WebRTCRetryExtensionInstallation.label = Después de instalar la extensión de pantalla compartida, por favor hacer click abajo en 'Reintentar'
 bbb.screensharePublish.WebRTCExtensionFailFallback.label = 
 bbb.screensharePublish.WebRTCPrivateBrowsingWarning.label = 
-bbb.screensharePublish.WebRTCExtensionInstallButton.label = 
-bbb.screensharePublish.WebRTCUseJavaButton.label = 
+bbb.screensharePublish.WebRTCExtensionInstallButton.label = Click aquí para instalar
+bbb.screensharePublish.WebRTCUseJavaButton.label = Usar Java pantalla compartida
 bbb.screensharePublish.WebRTCVideoLoading.label = 
 bbb.screensharePublish.sharingMessage= 
 bbb.screenshareView.title = Compartir escritorio
 bbb.screenshareView.fitToWindow = Ajustarse a la pantalla
-bbb.screenshareView.actualSize = 
-bbb.screenshareView.minimizeBtn.accessibilityName = 
-bbb.screenshareView.maximizeRestoreBtn.accessibilityName = 
-bbb.screenshareView.closeBtn.accessibilityName = 
+bbb.screenshareView.actualSize = Mostrar tamaño actual
+bbb.screenshareView.minimizeBtn.accessibilityName = Minimizar la ventana de Escritorio Compartido
+bbb.screenshareView.maximizeRestoreBtn.accessibilityName = Maximizar la ventana de Escritorio Compartido
+bbb.screenshareView.closeBtn.accessibilityName = Cerrar la ventana de Escritorio Compartido
 bbb.toolbar.phone.toolTip.start = Habilitar el audio (Micrófono o solo escuchar)
 bbb.toolbar.phone.toolTip.stop = Dejar de compartir micrófono
 bbb.toolbar.phone.toolTip.mute = Dejar de escuchar la conferencia
@@ -447,7 +447,7 @@ bbb.toolbar.phone.toolTip.unmute = Empezar a escuchar la conferencia
 bbb.toolbar.phone.toolTip.nomic = No se ha detectado micrófono
 bbb.toolbar.deskshare.toolTip.start = Compartir escritorio
 bbb.toolbar.deskshare.toolTip.stop = Dejar de compartir escritorio
-bbb.toolbar.sharednotes.toolTip = 
+bbb.toolbar.sharednotes.toolTip = Abrir notas compartidas
 bbb.toolbar.video.toolTip.start = Compartir su cámara Web
 bbb.toolbar.video.toolTip.stop = Dejar de compartir su cámara Web
 bbb.layout.addButton.label = Agregar
@@ -463,14 +463,14 @@ bbb.layout.combo.prompt = Aplicar diseño
 bbb.layout.combo.custom = *Diseño personalizado
 bbb.layout.combo.customName = Diseño personalizado
 bbb.layout.combo.remote = Remoto
-bbb.layout.window.name = 
+bbb.layout.window.name = Nombre de Diseño
 bbb.layout.window.close.tooltip = Cerrar
 bbb.layout.window.close.accessibilityName = 
 bbb.layout.save.complete = Los diseños fueron guardados exitosamente
 bbb.layout.save.ioerror = 
 bbb.layout.load.complete = Los diseños fueron cargados
 bbb.layout.load.failed = Error al cargar diseños
-bbb.layout.sync = 
+bbb.layout.sync = Tu diseño ha sido enviado a todos los participantes
 bbb.layout.name.defaultlayout = Alineación de ventanas por defecto
 bbb.layout.name.closedcaption = Subtitulos
 bbb.layout.name.videochat = Chat de Video
@@ -479,11 +479,11 @@ bbb.layout.name.presentfocus = Presentación
 bbb.layout.name.presentandusers = 
 bbb.layout.name.lectureassistant = Asistente de conferencia
 bbb.layout.name.lecture = Conferencia
-bbb.layout.name.sharednotes = 
+bbb.layout.name.sharednotes = Notas compartidas
 bbb.layout.addCurrentToFileWindow.title = 
 bbb.layout.addCurrentToFileWindow.text = 
 bbb.layout.denyAddToFile.toolTip = 
-bbb.layout.confirmAddToFile.toolTip = 
+bbb.layout.confirmAddToFile.toolTip = Confirmar aceptar el diseño actual
 bbb.highlighter.toolbar.pencil = Lápiz
 bbb.highlighter.toolbar.pencil.accessibilityName = Cambiar el cursor a lápiz
 bbb.highlighter.toolbar.ellipse = Círculo
@@ -509,13 +509,13 @@ bbb.logout.connectionfailed = La conexión al servidor ha terminado
 bbb.logout.rejected = La conexión al servidor ha sido rechazada
 bbb.logout.invalidapp = La aplicación red5 no existe
 bbb.logout.unknown = Su cliente ha perdido conexión con el servidor
-bbb.logout.guestkickedout = 
+bbb.logout.guestkickedout = El moderador no permitió ingreses a esta reunión
 bbb.logout.usercommand = Usted ha salido de la conferencia
-bbb.logour.breakoutRoomClose = 
-bbb.logout.ejectedFromMeeting = 
+bbb.logour.breakoutRoomClose = La ventana de su navegador se cerrará
+bbb.logout.ejectedFromMeeting = Usted a sido expulsado de la reunión.
 bbb.logout.refresh.message = Si esta desconexión no estaba planificada, pulse el botón para reconectar.
 bbb.logout.refresh.label = Reconectar
-bbb.logout.feedback.hint = 
+bbb.logout.feedback.hint = Como podemos hacer BigBlueButton Mejor?
 bbb.logout.feedback.label = 
 bbb.settings.title = 
 bbb.settings.ok = Correcto
@@ -523,7 +523,7 @@ bbb.settings.cancel = Cancelar
 bbb.settings.btn.toolTip = 
 bbb.logout.confirm.title = Confirmar Cerrar Sesión
 bbb.logout.confirm.message = ¿Esta seguro que desea cerrar sesión?
-bbb.logout.confirm.endMeeting = 
+bbb.logout.confirm.endMeeting = Si y finalizar la reunión
 bbb.logout.confirm.yes = Si
 bbb.logout.confirm.no = No
 bbb.endSession.confirm.title = 
@@ -544,16 +544,16 @@ bbb.sharedNotes.quickLink.label =
 bbb.sharedNotes.createNoteWindow.label = 
 bbb.sharedNotes.createNoteWindow.close.tooltip = Cerrar
 bbb.sharedNotes.createNoteWindow.close.accessibilityName = 
-bbb.sharedNotes.typing.single = 
-bbb.sharedNotes.typing.double = 
-bbb.sharedNotes.typing.multiple = 
+bbb.sharedNotes.typing.single = {0} esta escribiendo...
+bbb.sharedNotes.typing.double = {0} y {1} están escribiendo...
+bbb.sharedNotes.typing.multiple = Varias personas están escribiendo...
 bbb.sharedNotes.save.toolTip = 
 bbb.sharedNotes.save.complete = 
 bbb.sharedNotes.save.ioerror = 
 bbb.sharedNotes.save.htmlLabel = 
-bbb.sharedNotes.save.txtLabel = 
+bbb.sharedNotes.save.txtLabel = Texto plano (.txt)
 bbb.sharedNotes.new.label = 
-bbb.sharedNotes.new.toolTip = 
+bbb.sharedNotes.new.toolTip = Crear nota adicional
 bbb.sharedNotes.limit.label = 
 bbb.sharedNotes.clear.label = 
 bbb.sharedNotes.undo.toolTip = 
@@ -578,20 +578,20 @@ bbb.settings.flash.label = Error de versión de Flash
 bbb.settings.flash.text = Usted tiene Flash {0} instalado, pero necesita por lo menos la versión {1} para ejecutar BigBlueButton adecuadamente. Haga clic en el botón de abajo para instalar la última versión de Adobe Flash.
 bbb.settings.flash.command = Instalar la versión más reciente de Java
 bbb.settings.isight.label = Error en cámara iSight
-bbb.settings.isight.text = 
+bbb.settings.isight.text = Si presenta problemas con su cámara iSight, puede deberse a que está ejecutando OS X 10.6.5, El cual es conocido por presentar problemas con Flash en la captura de vídeo desde la cámara iSight.\n  Para corregir esto, haga clic en el enlace de abajo para instalar la versión más reciente de Flash Player, o actualizar tu Mac a la versión más reciente
 bbb.settings.isight.command = Instalar Flash 10.2 RC2
 bbb.settings.warning.label = Advertencia
 bbb.settings.warning.close = Alerta
 bbb.settings.noissues = Ninguna edicion excepcional se ha detectado
 bbb.settings.instructions = Acepte el mensaje de Flash que le pide permisos de cámara. Si usted puede verse y oírse, su navegador se ha configurado correctamente. Otros problemas potenciales se muestran a continuación. Haga clic en cada uno para encontrar una posible solución.
 bbb.bwmonitor.title = 
-bbb.bwmonitor.upload = 
+bbb.bwmonitor.upload = Subir
 bbb.bwmonitor.upload.short = 
 bbb.bwmonitor.download = 
-bbb.bwmonitor.download.short = 
-bbb.bwmonitor.total = 
-bbb.bwmonitor.current = 
-bbb.bwmonitor.available = 
+bbb.bwmonitor.download.short = Abajo
+bbb.bwmonitor.total = Total
+bbb.bwmonitor.current = Actual
+bbb.bwmonitor.available = Disponible
 bbb.bwmonitor.latency = 
 ltbcustom.bbb.highlighter.toolbar.triangle = Triángulo
 ltbcustom.bbb.highlighter.toolbar.triangle.accessibilityName = Cambiar Cursor de Pizarra a Triángulo
@@ -602,22 +602,22 @@ ltbcustom.bbb.highlighter.toolbar.text.accessibilityName = Cambiar Cursos de piz
 ltbcustom.bbb.highlighter.texttoolbar.textColorPicker = Color de texto
 ltbcustom.bbb.highlighter.texttoolbar.textSizeMenu = Támaño de fuente
 bbb.caption.window.title = Subtitulos
-bbb.caption.quickLink.label = 
-bbb.caption.window.titleBar = 
-bbb.caption.window.minimizeBtn.accessibilityName = 
-bbb.caption.window.maximizeRestoreBtn.accessibilityName = 
+bbb.caption.quickLink.label = Ventana de subtítulos
+bbb.caption.window.titleBar = Barra de título de la ventana de subtítulos
+bbb.caption.window.minimizeBtn.accessibilityName = Minimiza la ventana de subtítulos
+bbb.caption.window.maximizeRestoreBtn.accessibilityName = Maximiza la ventana de subtítulos
 bbb.caption.transcript.noowner = Ninguno
 bbb.caption.transcript.youowner = Usted
-bbb.caption.transcript.pastewarning.title = 
-bbb.caption.transcript.pastewarning.text = 
-bbb.caption.transcript.inputArea.toolTip = 
-bbb.caption.transcript.outputArea.toolTip = 
+bbb.caption.transcript.pastewarning.title = Advertencia de pegado de subtítulos
+bbb.caption.transcript.pastewarning.text = El texto a pegar no puede exceder de {0} caracteres. Usted pegó {1} caracteres.
+bbb.caption.transcript.inputArea.toolTip = Área interna de subtítulos
+bbb.caption.transcript.outputArea.toolTip = Área externa de subtítulos
 bbb.caption.option.label = Opciones
 bbb.caption.option.language = Idioma:
 bbb.caption.option.language.tooltip = Seleccionar idioma de subtitulos
-bbb.caption.option.language.accessibilityName = 
+bbb.caption.option.language.accessibilityName = Seleccione lenguaje de traducción. Use las teclas de dirección para navegar.
 bbb.caption.option.takeowner = Apropiarse
-bbb.caption.option.takeowner.tooltip = 
+bbb.caption.option.takeowner.tooltip = Usar lenguaje seleccionado
 bbb.caption.option.fontfamily = Tipo de letra:
 bbb.caption.option.fontfamily.tooltip = Tipo de letra
 bbb.caption.option.fontsize = Tamaño de letra:
@@ -643,16 +643,16 @@ bbb.accessibility.chat.initialDescription = Por favor usar las teclas direcciona
 bbb.accessibility.notes.notesview.input = Entradas de las notas
 
 bbb.shortcuthelp.title = Teclas de acceso directo
-bbb.shortcuthelp.titleBar = 
+bbb.shortcuthelp.titleBar = Teclas de acceso directo de la ventana de la barra de título
 bbb.shortcuthelp.minimizeBtn.accessibilityName = Minimizar la ventana de accesos rápidos
 bbb.shortcuthelp.maximizeRestoreBtn.accessibilityName = Mazimizar la ventana de accesos rápidos
 bbb.shortcuthelp.closeBtn.accessibilityName = Cerrar la ventana de accesos rápidos
-bbb.shortcuthelp.dropdown.accessibilityName = 
+bbb.shortcuthelp.dropdown.accessibilityName = Atajo para Categorias
 bbb.shortcuthelp.dropdown.general = Accesos rápidos globales
 bbb.shortcuthelp.dropdown.presentation = Accesos rápidos a la presentación
 bbb.shortcuthelp.dropdown.chat = Acceso rápido al chat
 bbb.shortcuthelp.dropdown.users = Acceso rápido a los usuarios
-bbb.shortcuthelp.dropdown.caption = 
+bbb.shortcuthelp.dropdown.caption = Atajos de subtítulos
 bbb.shortcuthelp.browserWarning.text = 
 bbb.shortcuthelp.headers.shortcut = Acceso Rápido
 bbb.shortcuthelp.headers.function = Función
@@ -682,7 +682,7 @@ bbb.shortcutkey.focus.presentation.function = Mover enfoque a la ventana de pres
 bbb.shortcutkey.focus.chat = 52
 bbb.shortcutkey.focus.chat.function = Mover enfoque a la venta de chat
 bbb.shortcutkey.focus.caption = 53
-bbb.shortcutkey.focus.caption.function = 
+bbb.shortcutkey.focus.caption.function = Mover ventana para observar subtítulos
 
 bbb.shortcutkey.share.desktop = 68
 bbb.shortcutkey.share.desktop.function = Abrir la ventana de compartir escritorio
@@ -712,7 +712,7 @@ bbb.shortcutkey.present.fitPage.function = Ajustar diapositivas en la página
 bbb.shortcutkey.users.makePresenter = 89
 bbb.shortcutkey.users.makePresenter.function = Hacer presentador a la persona seleccionada
 bbb.shortcutkey.users.kick = 69
-bbb.shortcutkey.users.kick.function = 
+bbb.shortcutkey.users.kick.function = Expulsar persona seleccionada de la reunión
 bbb.shortcutkey.users.mute = 83
 bbb.shortcutkey.users.mute.function = Activar o Desactivar sonido de la persona seleccionada
 bbb.shortcutkey.users.muteall = 65
@@ -720,18 +720,18 @@ bbb.shortcutkey.users.muteall.function = Activar o Desactivar sonido a todos los
 bbb.shortcutkey.users.muteAllButPres = 65
 bbb.shortcutkey.users.muteAllButPres.function = Silenciar a todos excepto al presentador
 bbb.shortcutkey.users.breakoutRooms = 75
-bbb.shortcutkey.users.breakoutRooms.function = 
+bbb.shortcutkey.users.breakoutRooms.function = Ventana de salas de reunion
 bbb.shortcutkey.users.focusBreakoutRooms = 82
-bbb.shortcutkey.users.focusBreakoutRooms.function = 
+bbb.shortcutkey.users.focusBreakoutRooms.function = Observar lista de sala de reunion
 bbb.shortcutkey.users.listenToBreakoutRoom = 76
-bbb.shortcutkey.users.listenToBreakoutRoom.function = 
+bbb.shortcutkey.users.listenToBreakoutRoom.function = Escuchar sala de reunión seleccionada
 bbb.shortcutkey.users.joinBreakoutRoom = 79
-bbb.shortcutkey.users.joinBreakoutRoom.function = 
+bbb.shortcutkey.users.joinBreakoutRoom.function = Unirse a la sala de reunión seleccionada
 
 bbb.shortcutkey.chat.focusTabs = 89
 bbb.shortcutkey.chat.focusTabs.function = Enfocar a las pestañas del chat
 bbb.shortcutkey.chat.focusBox = 82
-bbb.shortcutkey.chat.focusBox.function = 
+bbb.shortcutkey.chat.focusBox.function = Observar la lista de mensajes del chat
 bbb.shortcutkey.chat.changeColour = 67
 bbb.shortcutkey.chat.changeColour.function = Enfocar en el seleccionador de color de la fuente
 bbb.shortcutkey.chat.sendMessage = 83
@@ -757,13 +757,13 @@ bbb.shortcutkey.chat.chatbox.debug = 71
 bbb.shortcutkey.chat.chatbox.debug.function = Tecla de acceso rápido para depurar temporalmente
 
 bbb.shortcutkey.caption.takeOwnership = 79
-bbb.shortcutkey.caption.takeOwnership.function = 
+bbb.shortcutkey.caption.takeOwnership.function = Usar lenguaje seleccionado
 
 bbb.polling.startButton.tooltip = Iniciar una encuesta
 bbb.polling.startButton.label = Iniciar encuesta
 bbb.polling.publishButton.label = Publicar
 bbb.polling.closeButton.label = Cerrar
-bbb.polling.customPollOption.label = 
+bbb.polling.customPollOption.label = Encuesta personalizada...
 bbb.polling.pollModal.title = Resultados de la encuesta en tiempo real
 bbb.polling.pollModal.hint = 
 bbb.polling.customChoices.title = Agregar opciones para la encuesta
@@ -803,7 +803,7 @@ bbb.users.settings.lockAll = Bloquear a todos
 bbb.users.settings.lockAllExcept = Bloquear todos menos presentador
 bbb.users.settings.lockSettings = Bloquear espectadores ...
 bbb.users.settings.breakoutRooms = Sesión de pequeños gupos...
-bbb.users.settings.sendBreakoutRoomsInvitations = 
+bbb.users.settings.sendBreakoutRoomsInvitations = Enviar invitaciones a salas de reuniones
 bbb.users.settings.unlockAll = Desbloquear a todos los espectadores
 bbb.users.settings.roomIsLocked = Bloqueado por defecto
 bbb.users.settings.roomIsMuted = Silenciado por defecto
@@ -827,31 +827,31 @@ bbb.lockSettings.locked=Bloqueado
 bbb.lockSettings.lockOnJoin=Unirse
 
 bbb.users.breakout.breakoutRooms = Sesión de pequeños gupos
-bbb.users.breakout.updateBreakoutRooms = 
+bbb.users.breakout.updateBreakoutRooms = Actualizar sala de reunión
 bbb.users.breakout.timerForRoom.toolTip = 
-bbb.users.breakout.timer.toolTip = 
+bbb.users.breakout.timer.toolTip = Tiempo restante para las salas de reunión
 bbb.users.breakout.calculatingRemainingTime = Calculando tiempo restante ....
 bbb.users.breakout.closing = Cerrando
 bbb.users.breakout.closewarning.text = 
 bbb.users.breakout.rooms = Sesiones
-bbb.users.breakout.roomsCombo.accessibilityName = 
+bbb.users.breakout.roomsCombo.accessibilityName = Número de salas para crear
 bbb.users.breakout.room = Sesión
 bbb.users.breakout.timeLimit = Límite de tiempo
-bbb.users.breakout.durationStepper.accessibilityName = 
+bbb.users.breakout.durationStepper.accessibilityName = Tiempo límite en minutos
 bbb.users.breakout.minutes = Minutos
 bbb.users.breakout.record = Grabar
-bbb.users.breakout.recordCheckbox.accessibilityName = 
+bbb.users.breakout.recordCheckbox.accessibilityName = Grabar sala de reunion
 bbb.users.breakout.notAssigned = No asignado
 bbb.users.breakout.dragAndDropToolTip = Consejo: Puedes arrastarr y soltar usuarios entre los cuartos
 bbb.users.breakout.start = Iniciar
-bbb.users.breakout.invite = 
+bbb.users.breakout.invite = Invitar
 bbb.users.breakout.close = Cerrar
 bbb.users.breakout.closeAllRooms = Cerrar todas las sesiones de pequeños grupos
-bbb.users.breakout.insufficientUsers = 
-bbb.users.breakout.confirm = 
-bbb.users.breakout.invited = 
+bbb.users.breakout.insufficientUsers = Usuarios insuficientes. Se requiere al menos un usuario en una sala de reuniones.
+bbb.users.breakout.confirm = Unirse a una sala de reuniones
+bbb.users.breakout.invited = Has sido invitado a reunirte 1Sala de Reunión1
 bbb.users.breakout.accept = 
-bbb.users.breakout.joinSession = 
+bbb.users.breakout.joinSession = Unirse a la sesión
 bbb.users.breakout.joinSession.accessibilityName = 
 bbb.users.breakout.joinSession.close.tooltip = Cerrar
 bbb.users.breakout.joinSession.close.accessibilityName = 
diff --git a/bigbluebutton-client/locale/et_EE/bbbResources.properties b/bigbluebutton-client/locale/et_EE/bbbResources.properties
index 13467f43ed4dd7bdfccc4cfba7174a01a832307f..89c679e9736c363dd4c84de8d2e96a519f40dc64 100644
--- a/bigbluebutton-client/locale/et_EE/bbbResources.properties
+++ b/bigbluebutton-client/locale/et_EE/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Sätete teavitused
 bbb.clientstatus.notification = Lugemata teavitused
 bbb.clientstatus.close = Sulge
 bbb.clientstatus.tunneling.title = Tulemüür
-bbb.clientstatus.tunneling.message = Tulemüür piirab otseühenduste loomist välise serveri pordiga 1935.\nStabiilsema ühenduse saavutamisega serveriga soovitame sul kasutada vähem piiravat võrguühendust.
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Brauseri versioon
 bbb.clientstatus.browser.message = Sinu brauseri versioon ({0}) on vana. Soovitame uuendada brauser viimasele versioonile.
 bbb.clientstatus.flash.title = Flash Player
diff --git a/bigbluebutton-client/locale/eu_ES/bbbResources.properties b/bigbluebutton-client/locale/eu_ES/bbbResources.properties
index e4b4e69717f4b09a3597ebc4221185f4780e7ea8..84d7e758f9c3b43833ff0e01c8afe62f4c042857 100644
--- a/bigbluebutton-client/locale/eu_ES/bbbResources.properties
+++ b/bigbluebutton-client/locale/eu_ES/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Jakinarazpenen konfigurazioa
 bbb.clientstatus.notification = Irakurri gabeko jakinarazpenak
 bbb.clientstatus.close = Itxi
 bbb.clientstatus.tunneling.title = Suebaki
-bbb.clientstatus.tunneling.message = Suebaki batek saihesten du zure bezeroa eta zerbitzariaren arteko konexioa. Konexio hau zuzenean 1935 atakan da. Muga apaleko sare bat erabiltzea gomendatzen dugu konexio egonkorrago bat lortzeko. 
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Nabigatzailearen bertsioa
 bbb.clientstatus.browser.message = Zure nabigatzailea ({0}) ez da gaurkotu. Azken bertsioarekin eguneratzea gomendatzen dugu.
 bbb.clientstatus.flash.title = Flash Player
diff --git a/bigbluebutton-client/locale/fa_IR/bbbResources.properties b/bigbluebutton-client/locale/fa_IR/bbbResources.properties
index f25c2dce70ba90d8bc0363155ffe4ea014028e7b..ec39f702d7155ef0476573761490bdffa8d58a8e 100755
--- a/bigbluebutton-client/locale/fa_IR/bbbResources.properties
+++ b/bigbluebutton-client/locale/fa_IR/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = در حال اتصال به سرور
 bbb.mainshell.statusProgress.loading = 
 bbb.mainshell.statusProgress.cannotConnectServer = متاسفانه، امکان اتصال به سرور وجود ندارد.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = باز کردن پنجره تنظیمات میکروفون
 bbb.mainshell.meetingNotFound = جلسه یافت نشد
 bbb.mainshell.invalidAuthToken = توکن احراز هویت نامعتبر
@@ -140,7 +140,7 @@ bbb.clientstatus.title = پیکربندی اطلاع اعلان ها
 bbb.clientstatus.notification = اعلان های خوانده نشده
 bbb.clientstatus.close = بستن
 bbb.clientstatus.tunneling.title = دیوار اتش
-bbb.clientstatus.tunneling.message = دیوار آتش، مانع اتصال مستقیم کاربر شما به سرور روی درگاه 1935 می شود. پیشنهاد می شود تا به به منظور اتصال پایدارتر، به یک شبکه با محدودیت کمتر متصل شوید
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = نسخه مرورگر
 bbb.clientstatus.browser.message = مرورگر شما ({0}) به روز نیست. پیشنهاد می شود به جدید ترین نسخه به روز رسانی کنید.
 bbb.clientstatus.flash.title = فلش پلیر
diff --git a/bigbluebutton-client/locale/fr_CA/bbbResources.properties b/bigbluebutton-client/locale/fr_CA/bbbResources.properties
index 11580918202255865143e26c336705cffc889b95..fd819c1dbb0b60684b83269acbf946fe01ead9a4 100644
--- a/bigbluebutton-client/locale/fr_CA/bbbResources.properties
+++ b/bigbluebutton-client/locale/fr_CA/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Connexion au serveur
 bbb.mainshell.statusProgress.loading = chargement
 bbb.mainshell.statusProgress.cannotConnectServer = Désolé, impossible d'établir une connexion au serveur.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = Ouvrir la fenêtre de log
 bbb.mainshell.meetingNotFound = Conférence non trouvée
 bbb.mainshell.invalidAuthToken = Jeton d'authentification invalide
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Notifications de configuration
 bbb.clientstatus.notification = Notifications non lus
 bbb.clientstatus.close = Fermer
 bbb.clientstatus.tunneling.title = Pare-feu
-bbb.clientstatus.tunneling.message = Un pare-feu empêche votre client de se connecter directement sur ​​le port 1935 sur le serveur distant . Recommander se joindre à un réseau moins restrictif pour une connexion plus stable
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Version du navigateur
 bbb.clientstatus.browser.message = Votre navigateur ({0}) ne êtes pas mis à jour. Recommander la mise à jour à la dernière version.
 bbb.clientstatus.flash.title = Flash Player
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Publier
 bbb.polling.closeButton.label = Fermer
 bbb.polling.customPollOption.label = Votes personnalisés...
 bbb.polling.pollModal.title = Résultats de sondage en direct
-bbb.polling.pollModal.hint = Laissez cette fenêtre ouverte pour permettre aux étudiants de répondre au sondage. La sélection du bouton Publier ou Fermer met fin au sondage.
+bbb.polling.pollModal.hint = 
 bbb.polling.customChoices.title = Entrez les choix de vote
 bbb.polling.respondersLabel.novotes = En attente de réponses
 bbb.polling.respondersLabel.text = {0} utilisateurs ont répondu
diff --git a/bigbluebutton-client/locale/fr_FR/bbbResources.properties b/bigbluebutton-client/locale/fr_FR/bbbResources.properties
index d1529d0ff295af7ffe64d3dff0badbfc15f75645..83863143a20b6622c4f11af5152b6c1e5174ae98 100644
--- a/bigbluebutton-client/locale/fr_FR/bbbResources.properties
+++ b/bigbluebutton-client/locale/fr_FR/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Connexion au serveur
 bbb.mainshell.statusProgress.loading = Chargement
 bbb.mainshell.statusProgress.cannotConnectServer = Désolé, impossible d'établir une connexion au serveur.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (version {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = Ouvrir la fenêtre de log
 bbb.mainshell.meetingNotFound = Conférence introuvable
 bbb.mainshell.invalidAuthToken = Jeton d'authentification invalide
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Configuration des notifications
 bbb.clientstatus.notification = Notifications non lues
 bbb.clientstatus.close = Fermer
 bbb.clientstatus.tunneling.title = Pare-feu
-bbb.clientstatus.tunneling.message = Un pare-feu empêche votre client de se connecter directement au port 1935 du serveur distant. Il est recommandé de se connecter à un réseau moins restrictif pour obtenir une connexion plus stable.
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Version du navigateur
 bbb.clientstatus.browser.message = Votre navigateur ({0}) n'est pas à jour. Il est recommandé d'installer la dernière version.
 bbb.clientstatus.flash.title = Flash Player
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Publier
 bbb.polling.closeButton.label = Fermer
 bbb.polling.customPollOption.label = Votes personnalisés...
 bbb.polling.pollModal.title = Les résultats du vote en direct
-bbb.polling.pollModal.hint = Laissez cette fenêtre ouverte pour permettre aux étudiants de répondre au vote. Sélectionner le bouton Publier ou Fermer va arrêter le vote.
+bbb.polling.pollModal.hint = 
 bbb.polling.customChoices.title = Entrer les choix du vote
 bbb.polling.respondersLabel.novotes = En attente des réponses
 bbb.polling.respondersLabel.text = {0} utilisateurs ont répondu
diff --git a/bigbluebutton-client/locale/hi/bbbResources.properties b/bigbluebutton-client/locale/hi/bbbResources.properties
index c64986623aa70d2d154a9107dffbe6be1293f1d7..abf35ec6160f09e359a1c086bbb8936609cf363f 100644
--- a/bigbluebutton-client/locale/hi/bbbResources.properties
+++ b/bigbluebutton-client/locale/hi/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = सर्वर से कनेक्ट हो रहा है 
 bbb.mainshell.statusProgress.loading = 
 bbb.mainshell.statusProgress.cannotConnectServer = क्षमा करें, हम सर्वर से कनेक्ट नहीं कर सकते
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = लॉग विंडो खोलें
 bbb.mainshell.meetingNotFound = बैठक नहीं मिली
 bbb.mainshell.invalidAuthToken = अमान्य प्रमाणीकरण टोकन
@@ -140,7 +140,7 @@ bbb.clientstatus.title = विन्यास सूचनाएं
 bbb.clientstatus.notification = अपठित सूचनाएं
 bbb.clientstatus.close = बंद करे
 bbb.clientstatus.tunneling.title = फ़ायरवॉल
-bbb.clientstatus.tunneling.message = फ़ायरवॉल आपके क्लाइंट को पोर्ट 1935 पर सीधे रिमोट सर्वर से कनेक्ट करने से रोक रहा है। अधिक स्थिर कनेक्शन के लिए एक कम प्रतिबंधात्मक नेटवर्क में शामिल होने की सिफारिश करें
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = ब्राउज़र संस्करण
 bbb.clientstatus.browser.message = आपका ब्राउज़र ({0}) अप-टू-डेट नहीं है नवीनतम संस्करण को अपडेट करने की अनुशंसा
 bbb.clientstatus.flash.title = फ़्लैश प्लेयर
diff --git a/bigbluebutton-client/locale/ht/bbbResources.properties b/bigbluebutton-client/locale/ht/bbbResources.properties
new file mode 100644
index 0000000000000000000000000000000000000000..f5f028b52b98d8eb435954e8ab06ae6c9133b21b
--- /dev/null
+++ b/bigbluebutton-client/locale/ht/bbbResources.properties
@@ -0,0 +1,871 @@
+bbb.mainshell.locale.version = 
+bbb.mainshell.statusProgress.connecting = 
+bbb.mainshell.statusProgress.loading = 
+bbb.mainshell.statusProgress.cannotConnectServer = 
+bbb.mainshell.copyrightLabel2 = 
+bbb.mainshell.logBtn.toolTip = 
+bbb.mainshell.meetingNotFound = 
+bbb.mainshell.invalidAuthToken = 
+bbb.mainshell.resetLayoutBtn.toolTip = 
+bbb.mainshell.notification.tunnelling = 
+bbb.mainshell.notification.webrtc = 
+bbb.mainshell.fullscreenBtn.toolTip = 
+bbb.mainshell.quote.sentence.1 = 
+bbb.mainshell.quote.attribution.1 = 
+bbb.mainshell.quote.sentence.2 = 
+bbb.mainshell.quote.attribution.2 = 
+bbb.mainshell.quote.sentence.3 = 
+bbb.mainshell.quote.attribution.3 = 
+bbb.mainshell.quote.sentence.4 = 
+bbb.mainshell.quote.attribution.4 = 
+bbb.mainshell.quote.sentence.5 = 
+bbb.mainshell.quote.attribution.5 = 
+bbb.oldlocalewindow.reminder1 = 
+bbb.oldlocalewindow.reminder2 = 
+bbb.oldlocalewindow.windowTitle = 
+bbb.audioSelection.title = 
+bbb.audioSelection.btnMicrophone.label = 
+bbb.audioSelection.btnMicrophone.toolTip = 
+bbb.audioSelection.btnListenOnly.label = 
+bbb.audioSelection.btnListenOnly.toolTip = 
+bbb.audioSelection.txtPhone.text = 
+bbb.micSettings.title = 
+bbb.micSettings.speakers.header = 
+bbb.micSettings.microphone.header = 
+bbb.micSettings.playSound = 
+bbb.micSettings.playSound.toolTip = 
+bbb.micSettings.hearFromHeadset = 
+bbb.micSettings.speakIntoMic = 
+bbb.micSettings.echoTestMicPrompt = 
+bbb.micSettings.echoTestAudioYes = 
+bbb.micSettings.echoTestAudioNo = 
+bbb.micSettings.speakIntoMicTestLevel = 
+bbb.micSettings.recommendHeadset = 
+bbb.micSettings.changeMic = 
+bbb.micSettings.changeMic.toolTip = 
+bbb.micSettings.comboMicList.toolTip = 
+bbb.micSettings.micRecordVolume.label = 
+bbb.micSettings.micRecordVolume.toolTip = 
+bbb.micSettings.nextButton = 
+bbb.micSettings.nextButton.toolTip = 
+bbb.micSettings.join = 
+bbb.micSettings.join.toolTip = 
+bbb.micSettings.cancel = 
+bbb.micSettings.connectingtoecho = 
+bbb.micSettings.connectingtoecho.error = 
+bbb.micSettings.cancel.toolTip = 
+bbb.micSettings.access.helpButton = 
+bbb.micSettings.access.title = 
+bbb.micSettings.webrtc.title = 
+bbb.micSettings.webrtc.capableBrowser = 
+bbb.micSettings.webrtc.capableBrowser.dontuseit = 
+bbb.micSettings.webrtc.capableBrowser.dontuseit.toolTip = 
+bbb.micSettings.webrtc.notCapableBrowser = 
+bbb.micSettings.webrtc.connecting = 
+bbb.micSettings.webrtc.waitingforice = 
+bbb.micSettings.webrtc.transferring = 
+bbb.micSettings.webrtc.endingecho = 
+bbb.micSettings.webrtc.endedecho = 
+bbb.micPermissions.message.browserhttp = 
+bbb.micPermissions.firefox.title = 
+bbb.micPermissions.firefox.message = 
+bbb.micPermissions.chrome.title = 
+bbb.micPermissions.chrome.message = 
+bbb.micWarning.title = 
+bbb.micWarning.joinBtn.label = 
+bbb.micWarning.testAgain.label = 
+bbb.micWarning.message = 
+bbb.webrtcWarning.message = 
+bbb.webrtcWarning.title = 
+bbb.webrtcWarning.failedError.1001 = 
+bbb.webrtcWarning.failedError.1002 = 
+bbb.webrtcWarning.failedError.1003 = 
+bbb.webrtcWarning.failedError.1004 = 
+bbb.webrtcWarning.failedError.1005 = 
+bbb.webrtcWarning.failedError.1006 = 
+bbb.webrtcWarning.failedError.1007 = 
+bbb.webrtcWarning.failedError.1008 = 
+bbb.webrtcWarning.failedError.1009 = 
+bbb.webrtcWarning.failedError.1010 = 
+bbb.webrtcWarning.failedError.1011 = 
+bbb.webrtcWarning.failedError.unknown = 
+bbb.webrtcWarning.failedError.mediamissing = 
+bbb.webrtcWarning.failedError.endedunexpectedly = 
+bbb.webrtcWarning.connection.dropped = 
+bbb.webrtcWarning.connection.reconnecting = 
+bbb.webrtcWarning.connection.reestablished = 
+bbb.inactivityWarning.title = 
+bbb.inactivityWarning.message = 
+bbb.shuttingDown.message = 
+bbb.inactivityWarning.cancel = 
+bbb.mainToolbar.helpBtn = 
+bbb.mainToolbar.logoutBtn = 
+bbb.mainToolbar.logoutBtn.toolTip = 
+bbb.mainToolbar.idleLogoutBtn = 
+bbb.mainToolbar.langSelector = 
+bbb.mainToolbar.settingsBtn = 
+bbb.mainToolbar.settingsBtn.toolTip = 
+bbb.mainToolbar.shortcutBtn = 
+bbb.mainToolbar.shortcutBtn.toolTip = 
+bbb.mainToolbar.recordBtn.toolTip.start = 
+bbb.mainToolbar.recordBtn.toolTip.stop = 
+bbb.mainToolbar.recordBtn.toolTip.recording = 
+bbb.mainToolbar.recordBtn.toolTip.notRecording = 
+bbb.mainToolbar.recordBtn.toolTip.onlyModerators = 
+bbb.mainToolbar.recordBtn.toolTip.wontInterrupt = 
+bbb.mainToolbar.recordBtn.toolTip.wontRecord = 
+bbb.mainToolbar.recordBtn.confirm.title = 
+bbb.mainToolbar.recordBtn.confirm.message.start = 
+bbb.mainToolbar.recordBtn.confirm.message.stop = 
+bbb.mainToolbar.recordBtn.notification.title = 
+bbb.mainToolbar.recordBtn.notification.message1 = 
+bbb.mainToolbar.recordBtn.notification.message2 = 
+bbb.mainToolbar.recordingLabel.recording = 
+bbb.mainToolbar.recordingLabel.notRecording = 
+bbb.waitWindow.waitMessage.message = 
+bbb.waitWindow.waitMessage.title = 
+bbb.guests.title = 
+bbb.guests.message.singular = 
+bbb.guests.message.plural = 
+bbb.guests.allowBtn.toolTip = 
+bbb.guests.allowEveryoneBtn.text = 
+bbb.guests.denyBtn.toolTip = 
+bbb.guests.denyEveryoneBtn.text = 
+bbb.guests.rememberAction.text = 
+bbb.guests.alwaysAccept = 
+bbb.guests.alwaysDeny = 
+bbb.guests.askModerator = 
+bbb.guests.Management = 
+bbb.clientstatus.title = 
+bbb.clientstatus.notification = 
+bbb.clientstatus.close = 
+bbb.clientstatus.tunneling.title = 
+bbb.clientstatus.tunneling.message = 
+bbb.clientstatus.browser.title = 
+bbb.clientstatus.browser.message = 
+bbb.clientstatus.flash.title = 
+bbb.clientstatus.flash.message = 
+bbb.clientstatus.webrtc.title = 
+bbb.clientstatus.webrtc.strongStatus = 
+bbb.clientstatus.webrtc.almostStrongStatus = 
+bbb.clientstatus.webrtc.almostWeakStatus = 
+bbb.clientstatus.webrtc.weakStatus = 
+bbb.clientstatus.webrtc.message = 
+bbb.clientstatus.java.title = 
+bbb.clientstatus.java.notdetected = 
+bbb.clientstatus.java.notinstalled = 
+bbb.clientstatus.java.oldversion = 
+bbb.window.minimizeBtn.toolTip = 
+bbb.window.maximizeRestoreBtn.toolTip = 
+bbb.window.closeBtn.toolTip = 
+bbb.videoDock.titleBar = 
+bbb.presentation.titleBar = 
+bbb.chat.titleBar = 
+bbb.users.title = 
+bbb.users.titleBar = 
+bbb.users.quickLink.label = 
+bbb.users.minimizeBtn.accessibilityName = 
+bbb.users.maximizeRestoreBtn.accessibilityName = 
+bbb.users.settings.buttonTooltip = 
+bbb.users.settings.audioSettings = 
+bbb.users.settings.webcamSettings = 
+bbb.users.settings.muteAll = 
+bbb.users.settings.muteAllExcept = 
+bbb.users.settings.unmuteAll = 
+bbb.users.settings.clearAllStatus = 
+bbb.users.emojiStatusBtn.toolTip = 
+bbb.users.roomMuted.text = 
+bbb.users.roomLocked.text = 
+bbb.users.pushToTalk.toolTip = 
+bbb.users.pushToMute.toolTip = 
+bbb.users.muteMeBtnTxt.talk = 
+bbb.users.muteMeBtnTxt.mute = 
+bbb.users.muteMeBtnTxt.muted = 
+bbb.users.usersGrid.contextmenu.exportusers = 
+bbb.users.usersGrid.accessibilityName = 
+bbb.users.usersGrid.nameItemRenderer = 
+bbb.users.usersGrid.nameItemRenderer.youIdentifier = 
+bbb.users.usersGrid.statusItemRenderer = 
+bbb.users.usersGrid.statusItemRenderer.changePresenter = 
+bbb.users.usersGrid.statusItemRenderer.presenter = 
+bbb.users.usersGrid.statusItemRenderer.moderator = 
+bbb.users.usersGrid.statusItemRenderer.voiceOnlyUser = 
+bbb.users.usersGrid.statusItemRenderer.raiseHand = 
+bbb.users.usersGrid.statusItemRenderer.applause = 
+bbb.users.usersGrid.statusItemRenderer.thumbsUp = 
+bbb.users.usersGrid.statusItemRenderer.thumbsDown = 
+bbb.users.usersGrid.statusItemRenderer.speakLouder = 
+bbb.users.usersGrid.statusItemRenderer.speakSofter = 
+bbb.users.usersGrid.statusItemRenderer.speakFaster = 
+bbb.users.usersGrid.statusItemRenderer.speakSlower = 
+bbb.users.usersGrid.statusItemRenderer.away = 
+bbb.users.usersGrid.statusItemRenderer.confused = 
+bbb.users.usersGrid.statusItemRenderer.neutral = 
+bbb.users.usersGrid.statusItemRenderer.happy = 
+bbb.users.usersGrid.statusItemRenderer.sad = 
+bbb.users.usersGrid.statusItemRenderer.clearStatus = 
+bbb.users.usersGrid.statusItemRenderer.viewer = 
+bbb.users.usersGrid.statusItemRenderer.streamIcon.toolTip = 
+bbb.users.usersGrid.statusItemRenderer.presIcon.toolTip = 
+bbb.users.usersGrid.mediaItemRenderer = 
+bbb.users.usersGrid.mediaItemRenderer.talking = 
+bbb.users.usersGrid.mediaItemRenderer.webcam = 
+bbb.users.usersGrid.mediaItemRenderer.webcamBtn = 
+bbb.users.usersGrid.mediaItemRenderer.pushToTalk = 
+bbb.users.usersGrid.mediaItemRenderer.pushToMute = 
+bbb.users.usersGrid.mediaItemRenderer.pushToLock = 
+bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = 
+bbb.users.usersGrid.mediaItemRenderer.kickUser = 
+bbb.users.usersGrid.mediaItemRenderer.webcam = 
+bbb.users.usersGrid.mediaItemRenderer.micOff = 
+bbb.users.usersGrid.mediaItemRenderer.micOn = 
+bbb.users.usersGrid.mediaItemRenderer.noAudio = 
+bbb.users.usersGrid.mediaItemRenderer.promoteUser = 
+bbb.users.usersGrid.mediaItemRenderer.demoteUser = 
+bbb.users.emojiStatus.clear = 
+bbb.users.emojiStatus.raiseHand = 
+bbb.users.emojiStatus.happy = 
+bbb.users.emojiStatus.neutral = 
+bbb.users.emojiStatus.sad = 
+bbb.users.emojiStatus.confused = 
+bbb.users.emojiStatus.away = 
+bbb.users.emojiStatus.thumbsUp = 
+bbb.users.emojiStatus.thumbsDown = 
+bbb.users.emojiStatus.applause = 
+bbb.users.emojiStatus.agree = 
+bbb.users.emojiStatus.disagree = 
+bbb.users.emojiStatus.none = 
+bbb.users.emojiStatus.speakLouder = 
+bbb.users.emojiStatus.speakSofter = 
+bbb.users.emojiStatus.speakFaster = 
+bbb.users.emojiStatus.speakSlower = 
+bbb.users.emojiStatus.beRightBack = 
+bbb.presentation.title = 
+bbb.presentation.titleWithPres = 
+bbb.presentation.quickLink.label = 
+bbb.presentation.fitToWidth.toolTip = 
+bbb.presentation.fitToPage.toolTip = 
+bbb.presentation.uploadPresBtn.toolTip = 
+bbb.presentation.downloadPresBtn.toolTip = 
+bbb.presentation.poll.response = 
+bbb.presentation.backBtn.toolTip = 
+bbb.presentation.btnSlideNum.accessibilityName = 
+bbb.presentation.btnSlideNum.toolTip = 
+bbb.presentation.forwardBtn.toolTip = 
+bbb.presentation.maxUploadFileExceededAlert = 
+bbb.presentation.uploadcomplete = 
+bbb.presentation.uploaded = 
+bbb.presentation.document.supported = 
+bbb.presentation.document.converted = 
+bbb.presentation.error.document.convert.failed = 
+bbb.presentation.error.document.convert.invalid = 
+bbb.presentation.error.io = 
+bbb.presentation.error.security = 
+bbb.presentation.error.convert.notsupported = 
+bbb.presentation.error.convert.nbpage = 
+bbb.presentation.error.convert.maxnbpagereach = 
+bbb.presentation.converted = 
+bbb.presentation.slider = 
+bbb.presentation.slideloader.starttext = 
+bbb.presentation.slideloader.endtext = 
+bbb.presentation.uploadwindow.presentationfile = 
+bbb.presentation.uploadwindow.pdf = 
+bbb.presentation.uploadwindow.word = 
+bbb.presentation.uploadwindow.excel = 
+bbb.presentation.uploadwindow.powerpoint = 
+bbb.presentation.uploadwindow.image = 
+bbb.presentation.minimizeBtn.accessibilityName = 
+bbb.presentation.maximizeRestoreBtn.accessibilityName = 
+bbb.presentation.closeBtn.accessibilityName = 
+bbb.fileupload.title = 
+bbb.fileupload.lblFileName.defaultText = 
+bbb.fileupload.selectBtn.label = 
+bbb.fileupload.selectBtn.toolTip = 
+bbb.fileupload.uploadBtn = 
+bbb.fileupload.uploadBtn.toolTip = 
+bbb.fileupload.deleteBtn.toolTip = 
+bbb.fileupload.showBtn = 
+bbb.fileupload.retry = 
+bbb.fileupload.showBtn.toolTip = 
+bbb.fileupload.close.tooltip = 
+bbb.fileupload.close.accessibilityName = 
+bbb.fileupload.genThumbText = 
+bbb.fileupload.progBarLbl = 
+bbb.fileupload.fileFormatHint = 
+bbb.fileupload.letUserDownload = 
+bbb.fileupload.letUserDownload.tooltip = 
+bbb.filedownload.title = 
+bbb.filedownload.close.tooltip = 
+bbb.filedownload.close.accessibilityName = 
+bbb.filedownload.fileLbl = 
+bbb.filedownload.downloadBtn = 
+bbb.filedownload.downloadBtn.toolTip = 
+bbb.filedownload.thisFileIsDownloadable = 
+bbb.chat.title = 
+bbb.chat.quickLink.label = 
+bbb.chat.cmpColorPicker.toolTip = 
+bbb.chat.input.accessibilityName = 
+bbb.chat.sendBtn.toolTip = 
+bbb.chat.sendBtn.accessibilityName = 
+bbb.chat.saveBtn.toolTip = 
+bbb.chat.saveBtn.accessibilityName = 
+bbb.chat.saveBtn.label = 
+bbb.chat.save.complete = 
+bbb.chat.save.ioerror = 
+bbb.chat.save.filename = 
+bbb.chat.copyBtn.toolTip = 
+bbb.chat.copyBtn.accessibilityName = 
+bbb.chat.copyBtn.label = 
+bbb.chat.copy.complete = 
+bbb.chat.clearBtn.toolTip = 
+bbb.chat.clearBtn.accessibilityName = 
+bbb.chat.clearBtn.chatMessage = 
+bbb.chat.clearBtn.alert.title = 
+bbb.chat.clearBtn.alert.text = 
+bbb.chat.contextmenu.copyalltext = 
+bbb.chat.publicChatUsername = 
+bbb.chat.optionsTabName = 
+bbb.chat.privateChatSelect = 
+bbb.chat.private.userLeft = 
+bbb.chat.private.userJoined = 
+bbb.chat.private.closeMessage = 
+bbb.chat.usersList.toolTip = 
+bbb.chat.usersList.accessibilityName = 
+bbb.chat.chatOptions = 
+bbb.chat.fontSize = 
+bbb.chat.cmbFontSize.toolTip = 
+bbb.chat.messageList = 
+bbb.chat.minimizeBtn.accessibilityName = 
+bbb.chat.maximizeRestoreBtn.accessibilityName = 
+bbb.chat.closeBtn.accessibilityName = 
+bbb.chat.chatTabs.accessibleNotice = 
+bbb.chat.chatMessage.systemMessage = 
+bbb.chat.chatMessage.stringRespresentation = 
+bbb.chat.chatMessage.tooLong = 
+bbb.publishVideo.changeCameraBtn.labelText = 
+bbb.publishVideo.changeCameraBtn.toolTip = 
+bbb.publishVideo.cmbResolution.tooltip = 
+bbb.publishVideo.startPublishBtn.labelText = 
+bbb.publishVideo.startPublishBtn.toolTip = 
+bbb.publishVideo.startPublishBtn.errorName = 
+bbb.webcamPermissions.chrome.title = 
+bbb.webcamPermissions.chrome.message = 
+bbb.videodock.title = 
+bbb.videodock.quickLink.label = 
+bbb.video.minimizeBtn.accessibilityName = 
+bbb.video.maximizeRestoreBtn.accessibilityName = 
+bbb.video.controls.muteButton.toolTip = 
+bbb.video.controls.switchPresenter.toolTip = 
+bbb.video.controls.ejectUserBtn.toolTip = 
+bbb.video.controls.privateChatBtn.toolTip = 
+bbb.video.publish.hint.noCamera = 
+bbb.video.publish.hint.cantOpenCamera = 
+bbb.video.publish.hint.waitingApproval = 
+bbb.video.publish.hint.videoPreview = 
+bbb.video.publish.hint.openingCamera = 
+bbb.video.publish.hint.cameraDenied = 
+bbb.video.publish.hint.cameraIsBeingUsed = 
+bbb.video.publish.hint.publishing = 
+bbb.video.publish.closeBtn.accessName = 
+bbb.video.publish.closeBtn.label = 
+bbb.video.publish.titleBar = 
+bbb.video.streamClose.toolTip = 
+bbb.video.message.browserhttp = 
+bbb.screensharePublish.title = 
+bbb.screensharePublish.pause.tooltip = 
+bbb.screensharePublish.pause.label = 
+bbb.screensharePublish.restart.tooltip = 
+bbb.screensharePublish.restart.label = 
+bbb.screensharePublish.maximizeRestoreBtn.toolTip = 
+bbb.screensharePublish.closeBtn.toolTip = 
+bbb.screensharePublish.closeBtn.accessibilityName = 
+bbb.screensharePublish.minimizeBtn.toolTip = 
+bbb.screensharePublish.minimizeBtn.accessibilityName = 
+bbb.screensharePublish.maximizeRestoreBtn.accessibilityName = 
+bbb.screensharePublish.commonHelpText.text = 
+bbb.screensharePublish.helpButton.toolTip = 
+bbb.screensharePublish.helpButton.accessibilityName = 
+bbb.screensharePublish.helpText.PCIE1 = 
+bbb.screensharePublish.helpText.PCIE2 = 
+bbb.screensharePublish.helpText.PCIE3 =
+bbb.screensharePublish.helpText.PCFirefox1 = 
+bbb.screensharePublish.helpText.PCFirefox2 = 
+bbb.screensharePublish.helpText.PCFirefox3 =
+bbb.screensharePublish.helpText.PCChrome1 = 
+bbb.screensharePublish.helpText.PCChrome2 = 
+bbb.screensharePublish.helpText.PCChrome3 = 
+bbb.screensharePublish.helpText.MacSafari1 = 
+bbb.screensharePublish.helpText.MacSafari2 = 
+bbb.screensharePublish.helpText.MacSafari3 = 
+bbb.screensharePublish.helpText.MacSafari4 = 
+bbb.screensharePublish.helpText.MacFirefox1 = 
+bbb.screensharePublish.helpText.MacFirefox2 = 
+bbb.screensharePublish.helpText.MacFirefox3 = 
+bbb.screensharePublish.helpText.MacFirefox4 = 
+bbb.screensharePublish.helpText.MacChrome1 = 
+bbb.screensharePublish.helpText.MacChrome2 = 
+bbb.screensharePublish.helpText.MacChrome3 = 
+bbb.screensharePublish.helpText.MacChrome4 = 
+bbb.screensharePublish.helpText.LinuxFirefox1 = 
+bbb.screensharePublish.helpText.LinuxFirefox2 = 
+bbb.screensharePublish.helpText.LinuxFirefox3 =
+bbb.screensharePublish.helpText.LinuxChrome1 = 
+bbb.screensharePublish.helpText.LinuxChrome2 = 
+bbb.screensharePublish.helpText.LinuxChrome3 = 
+bbb.screensharePublish.shareTypeLabel.text = 
+bbb.screensharePublish.shareType.fullScreen = 
+bbb.screensharePublish.shareType.region = 
+bbb.screensharePublish.pauseMessage.label = 
+bbb.screensharePublish.startFailed.label = 
+bbb.screensharePublish.restartFailed.label = 
+bbb.screensharePublish.jwsCrashed.label = 
+bbb.screensharePublish.commonErrorMessage.label = 
+bbb.screensharePublish.tunnelingErrorMessage.one = 
+bbb.screensharePublish.tunnelingErrorMessage.two = 
+bbb.screensharePublish.cancelButton.label = 
+bbb.screensharePublish.startButton.label = 
+bbb.screensharePublish.stopButton.label = 
+bbb.screensharePublish.stopButton.toolTip = 
+bbb.screensharePublish.WebRTCChromeExtensionMissing.label = 
+bbb.screensharePublish.WebRTCRetryExtensionInstallation.label = 
+bbb.screensharePublish.WebRTCExtensionFailFallback.label = 
+bbb.screensharePublish.WebRTCPrivateBrowsingWarning.label = 
+bbb.screensharePublish.WebRTCExtensionInstallButton.label = 
+bbb.screensharePublish.WebRTCUseJavaButton.label = 
+bbb.screensharePublish.WebRTCVideoLoading.label = 
+bbb.screensharePublish.sharingMessage= 
+bbb.screenshareView.title = 
+bbb.screenshareView.fitToWindow = 
+bbb.screenshareView.actualSize = 
+bbb.screenshareView.minimizeBtn.accessibilityName = 
+bbb.screenshareView.maximizeRestoreBtn.accessibilityName = 
+bbb.screenshareView.closeBtn.accessibilityName = 
+bbb.toolbar.phone.toolTip.start = 
+bbb.toolbar.phone.toolTip.stop = 
+bbb.toolbar.phone.toolTip.mute = 
+bbb.toolbar.phone.toolTip.unmute = 
+bbb.toolbar.phone.toolTip.nomic = 
+bbb.toolbar.deskshare.toolTip.start = 
+bbb.toolbar.deskshare.toolTip.stop = 
+bbb.toolbar.sharednotes.toolTip = 
+bbb.toolbar.video.toolTip.start = 
+bbb.toolbar.video.toolTip.stop = 
+bbb.layout.addButton.label = 
+bbb.layout.addButton.toolTip = 
+bbb.layout.overwriteLayoutName.title = 
+bbb.layout.overwriteLayoutName.text = 
+bbb.layout.broadcastButton.toolTip = 
+bbb.layout.combo.toolTip = 
+bbb.layout.loadButton.toolTip = 
+bbb.layout.saveButton.toolTip = 
+bbb.layout.lockButton.toolTip = 
+bbb.layout.combo.prompt = 
+bbb.layout.combo.custom = 
+bbb.layout.combo.customName = 
+bbb.layout.combo.remote = 
+bbb.layout.window.name = 
+bbb.layout.window.close.tooltip = 
+bbb.layout.window.close.accessibilityName = 
+bbb.layout.save.complete = 
+bbb.layout.save.ioerror = 
+bbb.layout.load.complete = 
+bbb.layout.load.failed = 
+bbb.layout.sync = 
+bbb.layout.name.defaultlayout = 
+bbb.layout.name.closedcaption = 
+bbb.layout.name.videochat = 
+bbb.layout.name.webcamsfocus = 
+bbb.layout.name.presentfocus = 
+bbb.layout.name.presentandusers = 
+bbb.layout.name.lectureassistant = 
+bbb.layout.name.lecture = 
+bbb.layout.name.sharednotes = 
+bbb.layout.addCurrentToFileWindow.title = 
+bbb.layout.addCurrentToFileWindow.text = 
+bbb.layout.denyAddToFile.toolTip = 
+bbb.layout.confirmAddToFile.toolTip = 
+bbb.highlighter.toolbar.pencil = 
+bbb.highlighter.toolbar.pencil.accessibilityName = 
+bbb.highlighter.toolbar.ellipse = 
+bbb.highlighter.toolbar.ellipse.accessibilityName = 
+bbb.highlighter.toolbar.rectangle = 
+bbb.highlighter.toolbar.rectangle.accessibilityName = 
+bbb.highlighter.toolbar.panzoom = 
+bbb.highlighter.toolbar.panzoom.accessibilityName = 
+bbb.highlighter.toolbar.clear = 
+bbb.highlighter.toolbar.clear.accessibilityName = 
+bbb.highlighter.toolbar.undo = 
+bbb.highlighter.toolbar.undo.accessibilityName = 
+bbb.highlighter.toolbar.color = 
+bbb.highlighter.toolbar.color.accessibilityName = 
+bbb.highlighter.toolbar.thickness = 
+bbb.highlighter.toolbar.thickness.accessibilityName = 
+bbb.highlighter.toolbar.multiuser = 
+bbb.logout.button.label = 
+bbb.logout.appshutdown = 
+bbb.logout.asyncerror = 
+bbb.logout.connectionclosed = 
+bbb.logout.connectionfailed = 
+bbb.logout.rejected = 
+bbb.logout.invalidapp = 
+bbb.logout.unknown = 
+bbb.logout.guestkickedout = 
+bbb.logout.usercommand = 
+bbb.logour.breakoutRoomClose = 
+bbb.logout.ejectedFromMeeting = 
+bbb.logout.refresh.message = 
+bbb.logout.refresh.label = 
+bbb.logout.feedback.hint = 
+bbb.logout.feedback.label = 
+bbb.settings.title = 
+bbb.settings.ok = 
+bbb.settings.cancel = 
+bbb.settings.btn.toolTip = 
+bbb.logout.confirm.title = 
+bbb.logout.confirm.message = 
+bbb.logout.confirm.endMeeting = 
+bbb.logout.confirm.yes = 
+bbb.logout.confirm.no = 
+bbb.endSession.confirm.title = 
+bbb.endSession.confirm.message = 
+bbb.connection.failure=
+bbb.connection.reconnecting=
+bbb.connection.reestablished=
+bbb.connection.bigbluebutton=
+bbb.connection.sip=
+bbb.connection.video=
+bbb.connection.deskshare=
+bbb.notes.title = 
+bbb.notes.cmpColorPicker.toolTip = 
+bbb.notes.saveBtn = 
+bbb.notes.saveBtn.toolTip = 
+bbb.sharedNotes.title = 
+bbb.sharedNotes.quickLink.label = 
+bbb.sharedNotes.createNoteWindow.label = 
+bbb.sharedNotes.createNoteWindow.close.tooltip = 
+bbb.sharedNotes.createNoteWindow.close.accessibilityName = 
+bbb.sharedNotes.typing.single = 
+bbb.sharedNotes.typing.double = 
+bbb.sharedNotes.typing.multiple = 
+bbb.sharedNotes.save.toolTip = 
+bbb.sharedNotes.save.complete = 
+bbb.sharedNotes.save.ioerror = 
+bbb.sharedNotes.save.htmlLabel = 
+bbb.sharedNotes.save.txtLabel = 
+bbb.sharedNotes.new.label = 
+bbb.sharedNotes.new.toolTip = 
+bbb.sharedNotes.limit.label = 
+bbb.sharedNotes.clear.label = 
+bbb.sharedNotes.undo.toolTip = 
+bbb.sharedNotes.redo.toolTip = 
+bbb.sharedNotes.toolbar.toolTip = 
+bbb.sharedNotes.settings.toolTip = 
+bbb.sharedNotes.clearWarning.title = 
+bbb.sharedNotes.clearWarning.message = 
+bbb.sharedNotes.additionalNotes.closeWarning.title = 
+bbb.sharedNotes.additionalNotes.closeWarning.message = 
+bbb.sharedNotes.messageLengthWarning.title = 
+bbb.sharedNotes.messageLengthWarning.text = 
+bbb.sharedNotes.remaining.tooltip = 
+bbb.sharedNotes.full.tooltip = 
+bbb.settings.deskshare.instructions = 
+bbb.settings.deskshare.start = 
+bbb.settings.voice.volume = 
+bbb.settings.java.label = 
+bbb.settings.java.text = 
+bbb.settings.java.command = 
+bbb.settings.flash.label = 
+bbb.settings.flash.text = 
+bbb.settings.flash.command = 
+bbb.settings.isight.label = 
+bbb.settings.isight.text = 
+bbb.settings.isight.command = 
+bbb.settings.warning.label = 
+bbb.settings.warning.close = 
+bbb.settings.noissues = 
+bbb.settings.instructions = 
+bbb.bwmonitor.title = 
+bbb.bwmonitor.upload = 
+bbb.bwmonitor.upload.short = 
+bbb.bwmonitor.download = 
+bbb.bwmonitor.download.short = 
+bbb.bwmonitor.total = 
+bbb.bwmonitor.current = 
+bbb.bwmonitor.available = 
+bbb.bwmonitor.latency = 
+ltbcustom.bbb.highlighter.toolbar.triangle = 
+ltbcustom.bbb.highlighter.toolbar.triangle.accessibilityName = 
+ltbcustom.bbb.highlighter.toolbar.line = 
+ltbcustom.bbb.highlighter.toolbar.line.accessibilityName = 
+ltbcustom.bbb.highlighter.toolbar.text = 
+ltbcustom.bbb.highlighter.toolbar.text.accessibilityName = 
+ltbcustom.bbb.highlighter.texttoolbar.textColorPicker = 
+ltbcustom.bbb.highlighter.texttoolbar.textSizeMenu = 
+bbb.caption.window.title = 
+bbb.caption.quickLink.label = 
+bbb.caption.window.titleBar = 
+bbb.caption.window.minimizeBtn.accessibilityName = 
+bbb.caption.window.maximizeRestoreBtn.accessibilityName = 
+bbb.caption.transcript.noowner = 
+bbb.caption.transcript.youowner = 
+bbb.caption.transcript.pastewarning.title = 
+bbb.caption.transcript.pastewarning.text = 
+bbb.caption.transcript.inputArea.toolTip = 
+bbb.caption.transcript.outputArea.toolTip = 
+bbb.caption.option.label = 
+bbb.caption.option.language = 
+bbb.caption.option.language.tooltip = 
+bbb.caption.option.language.accessibilityName = 
+bbb.caption.option.takeowner = 
+bbb.caption.option.takeowner.tooltip = 
+bbb.caption.option.fontfamily = 
+bbb.caption.option.fontfamily.tooltip = 
+bbb.caption.option.fontsize = 
+bbb.caption.option.fontsize.tooltip = 
+bbb.caption.option.backcolor = 
+bbb.caption.option.backcolor.tooltip = 
+bbb.caption.option.textcolor = 
+bbb.caption.option.textcolor.tooltip = 
+
+
+bbb.accessibility.clientReady = 
+
+bbb.accessibility.chat.chatBox.reachedFirst = 
+bbb.accessibility.chat.chatBox.reachedLatest = 
+bbb.accessibility.chat.chatBox.navigatedFirst =  
+bbb.accessibility.chat.chatBox.navigatedLatest = 
+bbb.accessibility.chat.chatBox.navigatedLatestRead = 
+bbb.accessibility.chat.chatwindow.input = 
+bbb.accessibility.chat.chatwindow.audibleChatNotification = 
+bbb.accessibility.chat.chatwindow.publicChatOptions = 
+bbb.accessibility.chat.initialDescription = 
+
+bbb.accessibility.notes.notesview.input = 
+
+bbb.shortcuthelp.title = 
+bbb.shortcuthelp.titleBar = 
+bbb.shortcuthelp.minimizeBtn.accessibilityName = 
+bbb.shortcuthelp.maximizeRestoreBtn.accessibilityName = 
+bbb.shortcuthelp.closeBtn.accessibilityName = 
+bbb.shortcuthelp.dropdown.accessibilityName = 
+bbb.shortcuthelp.dropdown.general = 
+bbb.shortcuthelp.dropdown.presentation = 
+bbb.shortcuthelp.dropdown.chat = 
+bbb.shortcuthelp.dropdown.users = 
+bbb.shortcuthelp.dropdown.caption = 
+bbb.shortcuthelp.browserWarning.text = 
+bbb.shortcuthelp.headers.shortcut = 
+bbb.shortcuthelp.headers.function = 
+
+bbb.shortcutkey.general.minimize = 
+bbb.shortcutkey.general.minimize.function = 
+bbb.shortcutkey.general.maximize = 
+bbb.shortcutkey.general.maximize.function = 
+
+bbb.shortcutkey.flash.exit = 
+bbb.shortcutkey.flash.exit.function = 
+bbb.shortcutkey.users.muteme = 
+bbb.shortcutkey.users.muteme.function = 
+bbb.shortcutkey.chat.chatinput = 
+bbb.shortcutkey.chat.chatinput.function = 
+bbb.shortcutkey.present.focusslide = 
+bbb.shortcutkey.present.focusslide.function = 
+bbb.shortcutkey.whiteboard.undo = 
+bbb.shortcutkey.whiteboard.undo.function = 
+
+bbb.shortcutkey.focus.users = 
+bbb.shortcutkey.focus.users.function = 
+bbb.shortcutkey.focus.video = 
+bbb.shortcutkey.focus.video.function = 
+bbb.shortcutkey.focus.presentation = 
+bbb.shortcutkey.focus.presentation.function = 
+bbb.shortcutkey.focus.chat = 
+bbb.shortcutkey.focus.chat.function = 
+bbb.shortcutkey.focus.caption = 
+bbb.shortcutkey.focus.caption.function = 
+
+bbb.shortcutkey.share.desktop = 
+bbb.shortcutkey.share.desktop.function = 
+bbb.shortcutkey.share.webcam = 
+bbb.shortcutkey.share.webcam.function = 
+
+bbb.shortcutkey.shortcutWindow = 
+bbb.shortcutkey.shortcutWindow.function = 
+bbb.shortcutkey.logout = 
+bbb.shortcutkey.logout.function = 
+bbb.shortcutkey.raiseHand = 
+bbb.shortcutkey.raiseHand.function = 
+
+bbb.shortcutkey.present.upload = 
+bbb.shortcutkey.present.upload.function = 
+bbb.shortcutkey.present.previous = 
+bbb.shortcutkey.present.previous.function = 
+bbb.shortcutkey.present.select = 
+bbb.shortcutkey.present.select.function = 
+bbb.shortcutkey.present.next = 
+bbb.shortcutkey.present.next.function = 
+bbb.shortcutkey.present.fitWidth = 
+bbb.shortcutkey.present.fitWidth.function = 
+bbb.shortcutkey.present.fitPage = 
+bbb.shortcutkey.present.fitPage.function = 
+
+bbb.shortcutkey.users.makePresenter = 
+bbb.shortcutkey.users.makePresenter.function = 
+bbb.shortcutkey.users.kick = 
+bbb.shortcutkey.users.kick.function = 
+bbb.shortcutkey.users.mute = 
+bbb.shortcutkey.users.mute.function = 
+bbb.shortcutkey.users.muteall = 
+bbb.shortcutkey.users.muteall.function = 
+bbb.shortcutkey.users.muteAllButPres = 
+bbb.shortcutkey.users.muteAllButPres.function = 
+bbb.shortcutkey.users.breakoutRooms = 
+bbb.shortcutkey.users.breakoutRooms.function = 
+bbb.shortcutkey.users.focusBreakoutRooms = 
+bbb.shortcutkey.users.focusBreakoutRooms.function = 
+bbb.shortcutkey.users.listenToBreakoutRoom = 
+bbb.shortcutkey.users.listenToBreakoutRoom.function = 
+bbb.shortcutkey.users.joinBreakoutRoom = 
+bbb.shortcutkey.users.joinBreakoutRoom.function = 
+
+bbb.shortcutkey.chat.focusTabs = 
+bbb.shortcutkey.chat.focusTabs.function = 
+bbb.shortcutkey.chat.focusBox = 
+bbb.shortcutkey.chat.focusBox.function = 
+bbb.shortcutkey.chat.changeColour = 
+bbb.shortcutkey.chat.changeColour.function = 
+bbb.shortcutkey.chat.sendMessage = 
+bbb.shortcutkey.chat.sendMessage.function = 
+bbb.shortcutkey.chat.closePrivate = 
+bbb.shortcutkey.chat.closePrivate.function = 
+bbb.shortcutkey.chat.explanation = 
+bbb.shortcutkey.chat.explanation.function = 
+
+bbb.shortcutkey.chat.chatbox.advance = 
+bbb.shortcutkey.chat.chatbox.advance.function = 
+bbb.shortcutkey.chat.chatbox.goback = 
+bbb.shortcutkey.chat.chatbox.goback.function = 
+bbb.shortcutkey.chat.chatbox.repeat = 
+bbb.shortcutkey.chat.chatbox.repeat.function = 
+bbb.shortcutkey.chat.chatbox.golatest = 
+bbb.shortcutkey.chat.chatbox.golatest.function = 
+bbb.shortcutkey.chat.chatbox.gofirst = 
+bbb.shortcutkey.chat.chatbox.gofirst.function = 
+bbb.shortcutkey.chat.chatbox.goread = 
+bbb.shortcutkey.chat.chatbox.goread.function = 
+bbb.shortcutkey.chat.chatbox.debug = 
+bbb.shortcutkey.chat.chatbox.debug.function = 
+
+bbb.shortcutkey.caption.takeOwnership = 
+bbb.shortcutkey.caption.takeOwnership.function = 
+
+bbb.polling.startButton.tooltip = 
+bbb.polling.startButton.label = 
+bbb.polling.publishButton.label = 
+bbb.polling.closeButton.label = 
+bbb.polling.customPollOption.label = 
+bbb.polling.pollModal.title = 
+bbb.polling.pollModal.hint = 
+bbb.polling.customChoices.title = 
+bbb.polling.respondersLabel.novotes = 
+bbb.polling.respondersLabel.text = 
+bbb.polling.respondersLabel.finished = 
+bbb.polling.answer.Yes = 
+bbb.polling.answer.No = 
+bbb.polling.answer.True = 
+bbb.polling.answer.False = 
+bbb.polling.answer.A = 
+bbb.polling.answer.B = 
+bbb.polling.answer.C = 
+bbb.polling.answer.D = 
+bbb.polling.answer.E = 
+bbb.polling.answer.F = 
+bbb.polling.answer.G = 
+bbb.polling.results.accessible.header = 
+bbb.polling.results.accessible.answer = 
+
+bbb.publishVideo.startPublishBtn.labelText = 
+bbb.publishVideo.changeCameraBtn.labelText = 
+
+bbb.accessibility.alerts.madePresenter = 
+bbb.accessibility.alerts.madeViewer = 
+
+bbb.shortcutkey.specialKeys.space = 
+bbb.shortcutkey.specialKeys.left = 
+bbb.shortcutkey.specialKeys.right = 
+bbb.shortcutkey.specialKeys.up = 
+bbb.shortcutkey.specialKeys.down = 
+bbb.shortcutkey.specialKeys.plus = 
+bbb.shortcutkey.specialKeys.minus = 
+
+bbb.toolbar.videodock.toolTip.closeAllVideos = 
+bbb.users.settings.lockAll = 
+bbb.users.settings.lockAllExcept = 
+bbb.users.settings.lockSettings = 
+bbb.users.settings.breakoutRooms = 
+bbb.users.settings.sendBreakoutRoomsInvitations = 
+bbb.users.settings.unlockAll = 
+bbb.users.settings.roomIsLocked = 
+bbb.users.settings.roomIsMuted = 
+
+bbb.lockSettings.save = 
+bbb.lockSettings.save.tooltip = 
+bbb.lockSettings.cancel = 
+bbb.lockSettings.cancel.toolTip = 
+
+bbb.lockSettings.hint = 
+bbb.lockSettings.moderatorLocking = 
+bbb.lockSettings.privateChat = 
+bbb.lockSettings.publicChat = 
+bbb.lockSettings.webcam = 
+bbb.lockSettings.webcamsOnlyForModerator = 
+bbb.lockSettings.microphone = 
+bbb.lockSettings.layout = 
+bbb.lockSettings.title=
+bbb.lockSettings.feature=
+bbb.lockSettings.locked=
+bbb.lockSettings.lockOnJoin=
+
+bbb.users.breakout.breakoutRooms = 
+bbb.users.breakout.updateBreakoutRooms = 
+bbb.users.breakout.timerForRoom.toolTip = 
+bbb.users.breakout.timer.toolTip = 
+bbb.users.breakout.calculatingRemainingTime = 
+bbb.users.breakout.closing = 
+bbb.users.breakout.closewarning.text = 
+bbb.users.breakout.rooms = 
+bbb.users.breakout.roomsCombo.accessibilityName = 
+bbb.users.breakout.room = 
+bbb.users.breakout.timeLimit = 
+bbb.users.breakout.durationStepper.accessibilityName = 
+bbb.users.breakout.minutes = 
+bbb.users.breakout.record = 
+bbb.users.breakout.recordCheckbox.accessibilityName = 
+bbb.users.breakout.notAssigned = 
+bbb.users.breakout.dragAndDropToolTip = 
+bbb.users.breakout.start = 
+bbb.users.breakout.invite = 
+bbb.users.breakout.close = 
+bbb.users.breakout.closeAllRooms = 
+bbb.users.breakout.insufficientUsers = 
+bbb.users.breakout.confirm = 
+bbb.users.breakout.invited = 
+bbb.users.breakout.accept = 
+bbb.users.breakout.joinSession = 
+bbb.users.breakout.joinSession.accessibilityName = 
+bbb.users.breakout.joinSession.close.tooltip = 
+bbb.users.breakout.joinSession.close.accessibilityName = 
+bbb.users.breakout.youareinroom = 
+bbb.users.roomsGrid.room = 
+bbb.users.roomsGrid.users = 
+bbb.users.roomsGrid.action = 
+bbb.users.roomsGrid.transfer = 
+bbb.users.roomsGrid.join = 
+bbb.users.roomsGrid.noUsers = 
+
+bbb.langSelector.default=
+
+bbb.alert.cancel = 
+bbb.alert.ok = 
+bbb.alert.no = 
+bbb.alert.yes = 
diff --git a/bigbluebutton-client/locale/hu_HU/bbbResources.properties b/bigbluebutton-client/locale/hu_HU/bbbResources.properties
index 76252cf73498824b79f22999d6f6aed04408f739..3be12b93db558bfe7740ca527e2704e444ba4a14 100644
--- a/bigbluebutton-client/locale/hu_HU/bbbResources.properties
+++ b/bigbluebutton-client/locale/hu_HU/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Csatlakozás a szerverhez
 bbb.mainshell.statusProgress.loading = Töltés
 bbb.mainshell.statusProgress.cannotConnectServer = Sajnos nem sikerült csatlakozni a szerverhez.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
 bbb.mainshell.logBtn.toolTip = Naplózási ablak megnyitása
 bbb.mainshell.meetingNotFound = Előadás nem található
 bbb.mainshell.invalidAuthToken = Érvénytelen hitelesítési token
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Értesítési beállítások
 bbb.clientstatus.notification = Olvasatlan értesítések
 bbb.clientstatus.close = Bezárás
 bbb.clientstatus.tunneling.title = Tűzfal
-bbb.clientstatus.tunneling.message = Jelenleg fűzfal akadályozza, hogy kliense közvetlenül az 1935-ös porton csatlakozzon a szerverhez. Javasoljuk, hogy stabilabb kapcsolat érdekében kevésbé korlátozott hálózatról csatlakozzon.
+bbb.clientstatus.tunneling.message = A tűzfal megakadályozza kliense közvetlenül kapcsolódását a távoli szerverhez. Hogy kapcsolata stabilabb legyen, csatlakozzon egy kevésbé szigorú hálózatból.
 bbb.clientstatus.browser.title = Böngészőjének verziója
 bbb.clientstatus.browser.message = Böngészője ({0}) nem naprakész. Javasoljuk, hogy frissítsen a legújabb verzióra.
 bbb.clientstatus.flash.title = Flash Player
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Közzététel
 bbb.polling.closeButton.label = Bezárás
 bbb.polling.customPollOption.label = Egyéni szavazás...
 bbb.polling.pollModal.title = Szavazás jelenlegi állása
-bbb.polling.pollModal.hint = Hagyja nyitva ezt az ablakot, hogy a résztvevők leadhassák szavazatukat. A szavazás befejezéséhez válassza a Közzététel vagy a Bezárás gombot.
+bbb.polling.pollModal.hint = Hagyja nyitva ezt az ablakot, hogy a többiek leadhassák szavazatukat. A Közzététel vagy a Bezárás gombbal véget vet a szavazásnak.
 bbb.polling.customChoices.title = Adja meg a szavazási lehetőségeket
 bbb.polling.respondersLabel.novotes = Válaszokra várakozás
 bbb.polling.respondersLabel.text = {0} felhasználó válaszolt
@@ -818,7 +818,7 @@ bbb.lockSettings.moderatorLocking = Moderátor zárolása
 bbb.lockSettings.privateChat = Privát üzenetek
 bbb.lockSettings.publicChat = Nyilvános üzenetek
 bbb.lockSettings.webcam = Webkamera
-bbb.lockSettings.webcamsOnlyForModerator = Többiek webkamerájának elrejtése 
+bbb.lockSettings.webcamsOnlyForModerator = Többiek webkamerájának megtekintése
 bbb.lockSettings.microphone = Mikrofon
 bbb.lockSettings.layout = Elrendezés
 bbb.lockSettings.title=Résztvevők zárolása
diff --git a/bigbluebutton-client/locale/id_ID/bbbResources.properties b/bigbluebutton-client/locale/id_ID/bbbResources.properties
index b802c5ba4a88035b63a2f221924c3126c95c495b..879826cf6cc865eec30aec686efdd5b04b550d11 100644
--- a/bigbluebutton-client/locale/id_ID/bbbResources.properties
+++ b/bigbluebutton-client/locale/id_ID/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Sedang menghubungi server
 bbb.mainshell.statusProgress.loading = 
 bbb.mainshell.statusProgress.cannotConnectServer = Maaf, tidak dapat terhubung ke server.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = Buka Jendela Log
 bbb.mainshell.meetingNotFound = Pertemuan Tidak Ditemukan
 bbb.mainshell.invalidAuthToken = Token Otentikasi Tidak Valid
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfigurasi Notifikasi
 bbb.clientstatus.notification = Notifikasi Belum Dibaca
 bbb.clientstatus.close = Tutup
 bbb.clientstatus.tunneling.title = Firewall
-bbb.clientstatus.tunneling.message = Firewall menghalangi klien Anda terhubung secara langsung ke port 1935 pada server remote. Kami merekomendasikan untuk menggunakan jaringan komputer yang pengaturannya tidak terlalu ketat untuk koneksi yang lebih stabil
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Versi Peramban
 bbb.clientstatus.browser.message = Peramban  Anda ({0}) tidak up-to-date. Kami merekomendasikan untuk memperbaharui ke versi terakhir.
 bbb.clientstatus.flash.title = Player Flash
diff --git a/bigbluebutton-client/locale/it_IT/bbbResources.properties b/bigbluebutton-client/locale/it_IT/bbbResources.properties
index 6442584db7611973c4336da7098842edcb49c5c3..aa2662576aeecc92acec0d56f045f94754bc7007 100644
--- a/bigbluebutton-client/locale/it_IT/bbbResources.properties
+++ b/bigbluebutton-client/locale/it_IT/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Connessione alla conferenza in corso...
 bbb.mainshell.statusProgress.loading = Caricamento in corso
 bbb.mainshell.statusProgress.cannotConnectServer = Errore di connessione.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
 bbb.mainshell.logBtn.toolTip = Apri finestra di Log
 bbb.mainshell.meetingNotFound = Conferenza non trovata
 bbb.mainshell.invalidAuthToken = Codice di autenticazione non valido
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Configurazione notifiche
 bbb.clientstatus.notification = Notifiche non lette
 bbb.clientstatus.close = Chiudi
 bbb.clientstatus.tunneling.title = Firewall
-bbb.clientstatus.tunneling.message = Un firewall impedisce al vostro terminale di connettersi direttamente sulla porta 1935 del server remoto. Si consiglia di utilizzare una rete senza restrizioni, per una connessione più stabile.
+bbb.clientstatus.tunneling.message = Un firewall impedisce al client di connettersi direttamente al server remoto. Si consiglia utilizzare una rete meno restrittiva per una connessione più stabile
 bbb.clientstatus.browser.title = Versione del browser
 bbb.clientstatus.browser.message = Il tuo browser ({0}) non è aggiornato. Si raccomanda l'aggiornamento alla versione più recente.
 bbb.clientstatus.flash.title = Flash Player
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Pubblica la valutazione
 bbb.polling.closeButton.label = Chiudi la valutazione
 bbb.polling.customPollOption.label = Impostazioni personalizzate della valutazione
 bbb.polling.pollModal.title = Risultati della valutazione in tempo reale
-bbb.polling.pollModal.hint = Lasciare questa finestra aperta per consentire ai partecipanti di rispondere al sondaggio. La selezione del pulsante Pubblica o Chiudi chiude il sondaggio.
+bbb.polling.pollModal.hint = Lascia questa finestra aperta per consentire ad altri di rispondere al sondaggio. Con il pulsante Pubblica o Chiudi si concluderà il sondaggio.
 bbb.polling.customChoices.title = Inserisci le valutazioni
 bbb.polling.respondersLabel.novotes = In attesa delle risposte
 bbb.polling.respondersLabel.text = {0} Risposte degli utenti
@@ -813,12 +813,12 @@ bbb.lockSettings.save.tooltip = Applica il blocco delle impostazioni.
 bbb.lockSettings.cancel = Cancella
 bbb.lockSettings.cancel.toolTip = Chiudi la finestra senza salvare
 
-bbb.lockSettings.hint = 
+bbb.lockSettings.hint = Queste opzioni ti consentono di limitare alcune funzioni disponibili ai partecipanti, ad esempio escludendo la possibilità di utilizzare la chat privata. (Queste restrizioni non si applicano ai moderatori)
 bbb.lockSettings.moderatorLocking = Moderatore bloccato
 bbb.lockSettings.privateChat = Chat privata
 bbb.lockSettings.publicChat = Chat pubblica
 bbb.lockSettings.webcam = Videocamera
-bbb.lockSettings.webcamsOnlyForModerator = 
+bbb.lockSettings.webcamsOnlyForModerator = Guarda le webcam degli altri partecipanti.
 bbb.lockSettings.microphone = Microfono
 bbb.lockSettings.layout = Layout
 bbb.lockSettings.title=Blocca le impostazioni dei partecipanti
diff --git a/bigbluebutton-client/locale/ja_JP/bbbResources.properties b/bigbluebutton-client/locale/ja_JP/bbbResources.properties
index f20361cc0f5b403cbf2c093e73e7004eff2194e3..ffe45701e70b986529156e7719713f1e296431e3 100644
--- a/bigbluebutton-client/locale/ja_JP/bbbResources.properties
+++ b/bigbluebutton-client/locale/ja_JP/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = サーバへの接続
 bbb.mainshell.statusProgress.loading = 
 bbb.mainshell.statusProgress.cannotConnectServer = サーバーに接続できません。
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = ログウィンドウを開く
 bbb.mainshell.meetingNotFound = 会議は見つかりません
 bbb.mainshell.invalidAuthToken = 無効な認証トークン
@@ -140,7 +140,7 @@ bbb.clientstatus.title = 通知設定
 bbb.clientstatus.notification = 未読の通知
 bbb.clientstatus.close = 閉じる
 bbb.clientstatus.tunneling.title = ファイヤーウォール
-bbb.clientstatus.tunneling.message = ファイヤーウォールがリモートサーバーへの貴方のポート1935への接続を除外した可能性があります。より安定したネットワークでの再接続を検討してください
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = ブラウザーバージョン
 bbb.clientstatus.browser.message = あなたのブラウザー ({0}) は旧版です。最新版へ更新してください
 bbb.clientstatus.flash.title = Flash Player
diff --git a/bigbluebutton-client/locale/ka_GE/bbbResources.properties b/bigbluebutton-client/locale/ka_GE/bbbResources.properties
index 7c3a893401b136cf5ba46cd3acd980df8456831f..d28e3a9dfdd8b2afeb8eddc248d2b9ef8c7b7575 100644
--- a/bigbluebutton-client/locale/ka_GE/bbbResources.properties
+++ b/bigbluebutton-client/locale/ka_GE/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = სერვერთან დაკავშირება
 bbb.mainshell.statusProgress.loading = დალოდება
 bbb.mainshell.statusProgress.cannotConnectServer = უკაცრავად, ჩვენ ვერ ვუკავშირდებით სერვერს
-bbb.mainshell.copyrightLabel2 = (c) 2017<a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a>(build {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = გახსენი Log ფანჯარა
 bbb.mainshell.meetingNotFound = 
 bbb.mainshell.invalidAuthToken = 
diff --git a/bigbluebutton-client/locale/km_KH/bbbResources.properties b/bigbluebutton-client/locale/km_KH/bbbResources.properties
index bd3bd602f38b63619a11462ad5d16500cd7dbe69..e9037ebf1bf52e45fcd2a2270128a8498149d622 100644
--- a/bigbluebutton-client/locale/km_KH/bbbResources.properties
+++ b/bigbluebutton-client/locale/km_KH/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = កំពុង​ភ្ជាប់​ទៅ​ម៉ាស៊ីន​បម្រើ "Server"
 bbb.mainshell.statusProgress.loading = កំពុងដំណើរការ
 bbb.mainshell.statusProgress.cannotConnectServer = សូមអភ័យទោស! យើង​មិន​អាច​ភ្ជាប់​ទៅ​កាន់​ម៉ាស៊ីន​បម្រើ​បាន​ទេ។
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a>(build {0})
+bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc. </u></a>​ (កំណែ {0})
 bbb.mainshell.logBtn.toolTip = បើកផ្ទាំងចូល
 bbb.mainshell.meetingNotFound = រកមិនឃើញ​ការប្រជុំទេ
 bbb.mainshell.invalidAuthToken = Authentication Token មិនត្រឹមត្រូវ
@@ -66,7 +66,7 @@ bbb.micSettings.webrtc.waitingforice = កំពុង​ភ្ជាប់​
 bbb.micSettings.webrtc.transferring = កំពុង​បញ្ជូន
 bbb.micSettings.webrtc.endingecho = កំពុងភ្ជាប់សម្លេង
 bbb.micSettings.webrtc.endedecho = ការសាកល្បងអេកូបានបញ្ចប់។
-bbb.micPermissions.message.browserhttp = 
+bbb.micPermissions.message.browserhttp = ម៉ាស៊ីនបម្រើ​នេះមិនត្រូវបានតំឡើងជាមួយ SSL ទេ។ ជាលទ្ធផល {0} បិទការចែករំលែកមីក្រូហ្វូនរបស់អ្នក។
 bbb.micPermissions.firefox.title = សិទ្ធិប្រើម៉ីក្រូហ្វូនក្នុង Firefox 
 bbb.micPermissions.firefox.message = ចុច Allow ដើម្បីឲ្យ Firefox អាចប្រើម៉ីក្រូហ្វូនរបស់អ្នក
 bbb.micPermissions.chrome.title = សិទ្ធិប្រើម៉ីក្រូហ្វូនក្នុង Chrome
@@ -140,7 +140,7 @@ bbb.clientstatus.title = ដំណឹង​អំពីការកំណត់
 bbb.clientstatus.notification = ដំណឹងដែលមិនទាន់​បានអាន
 bbb.clientstatus.close = បិទ
 bbb.clientstatus.tunneling.title = របាំងរារាំង
-bbb.clientstatus.tunneling.message = របាំងរារាំងកំពុងទប់ស្កាត់ម៉ាស៊ីនមេមិនឲ្យភ្ជាប់ដោយ​ផ្ទាល់តាម port 1935 ជាមួយ​ម៉ាស៊ីនបម្រើ​ពីចម្ងាយ។ សូមចូលរូមដោយប្រើបណ្តាញដែលមិនសូវមានកំហិតខ្លាំងដើម្បីការភ្ជាប់ថេរ។
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = ជំនាន់របស់កម្មវិធីរុករក
 bbb.clientstatus.browser.message = កម្មវិធីរុករក​របស់​អ្នក​ ({0}) មិនទាន់​សម័យទេ​. សូមធ្វើបច្ចុប្បន្នភាពទៅកាន់ជំនាន់ថ្មី។
 bbb.clientstatus.flash.title = កម្មវិធីបើក Flash
@@ -215,7 +215,7 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = ឈប់បិទសម្
 bbb.users.usersGrid.mediaItemRenderer.pushToMute = បិទសម្លេង{0}
 bbb.users.usersGrid.mediaItemRenderer.pushToLock = ចាក់សោរ{0}​
 bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = បើកសោរ{0}
-bbb.users.usersGrid.mediaItemRenderer.kickUser = 
+bbb.users.usersGrid.mediaItemRenderer.kickUser = ដកចេញ {0}
 bbb.users.usersGrid.mediaItemRenderer.webcam = កំពុងចែករំលែកវេបខេម
 bbb.users.usersGrid.mediaItemRenderer.micOff = មីក្រូហ្វូនបិទ
 bbb.users.usersGrid.mediaItemRenderer.micOn = មីក្រូហ្វូន​បើក
@@ -512,11 +512,11 @@ bbb.logout.unknown = ម៉ាស៊ីនភ្ញៀវ​របស់អ្
 bbb.logout.guestkickedout = អ្នកសម្របសម្រួល​មិន​អនុញ្ញាត​ឲ្យ​អ្នក​ចូល​រួម​ការប្រជុំ​នេះទេ​
 bbb.logout.usercommand = អ្នកបានចេញពីសន្និសិទ
 bbb.logour.breakoutRoomClose = ផ្ទាំង​នៃ​កម្មវិធីរុករក​របស់អ្នក​នឹង​ត្រូវ​បិទ​
-bbb.logout.ejectedFromMeeting = 
+bbb.logout.ejectedFromMeeting = អ្នកត្រូវបានដកចេញពីការប្រជុំ។
 bbb.logout.refresh.message = ប្រសិន​បើ​អ្នក​មិន​បាន​រំពឹង​ការ​ចាក​ចេញ​នេះ​ទេ សូម​ចុច​ប៊ូតុង​ខាង​ក្រោម​ដើម្បី​ភ្ជាប់​​ម្តង​ទៀត។
 bbb.logout.refresh.label = ភ្ជាប់​ម្តង​ទៀត
-bbb.logout.feedback.hint = 
-bbb.logout.feedback.label = 
+bbb.logout.feedback.hint = តើយើងអាចធ្វើឱ្យ BigBlueButton ប្រសើរជាងមុនយ៉ាងដូចម្តេច?
+bbb.logout.feedback.label = យើងចង់ដឹងពីបទពិសោធន៍របស់អ្នកជាមួយនឹង BigBlueButton (ស្រេចចិត្ត)
 bbb.settings.title = ការកំណត់
 bbb.settings.ok = ព្រម
 bbb.settings.cancel = បោះបង់
@@ -712,7 +712,7 @@ bbb.shortcutkey.present.fitPage.function = ដាក់ស្លាយឲ្យ
 bbb.shortcutkey.users.makePresenter = 89
 bbb.shortcutkey.users.makePresenter.function = ឲ្យអ្នកដែលបានជ្រើសធ្វើ​ជាអ្នកធ្វើបទបង្ហាញ
 bbb.shortcutkey.users.kick = 69
-bbb.shortcutkey.users.kick.function = 
+bbb.shortcutkey.users.kick.function = ដកអ្នកដែលត្រូវបានជ្រើសចេញពីការប្រជុំ
 bbb.shortcutkey.users.mute = 83
 bbb.shortcutkey.users.mute.function = បិទសម្លេង ឬមិនបិទសម្លេងអ្នកប្រើដែលបានជ្រើស
 bbb.shortcutkey.users.muteall = 65
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = ដាក់ប្រកាស
 bbb.polling.closeButton.label = បិទ
 bbb.polling.customPollOption.label = ការស្ទង់​មតិ​តាមចិត្ត...
 bbb.polling.pollModal.title = លទ្ធផល​ស្ទង់​មតិ​​ផ្ទាល់​
-bbb.polling.pollModal.hint = ទុកឱ្យ​ផ្ទាំង​នេះបើកដូច្នេះ ដើម្បីឱ្យសិស្សឆ្លើយតបទៅនឹងការស្ទង់មតិ។ ចុចលើប៊ូតុង ដាក់ប្រកាស ឬ បិទ ដើម្បីបញ្ចប់ការបោះឆ្នោត។
+bbb.polling.pollModal.hint = ទុក​ផ្ទាំង​នេះ​ឲ្យនៅបើកដើម្បីឲ្យអ្នកដទៃឆ្លើយការស្ទង់មតិ។ ជ្រើសប៊ូតុង "ដាក់ប្រកាស" ឬ "បិទ" នឹងបញ្ចប់ការស្ទង់មតិ។
 bbb.polling.customChoices.title = បញ្ចូលជម្រើសសម្រាប់ស្ទង់​មតិ​
 bbb.polling.respondersLabel.novotes = រង់ចាំចម្លើយ
 bbb.polling.respondersLabel.text = {0} នាក់បានឆ្លើយ
@@ -813,12 +813,12 @@ bbb.lockSettings.save.tooltip = អនុវត្ត​​ការកំណត
 bbb.lockSettings.cancel = បោះបង់
 bbb.lockSettings.cancel.toolTip = បិទ​ផ្ទាំង​នេះ​ដោយមិន​រក្សា​ទុក​
 
-bbb.lockSettings.hint = 
+bbb.lockSettings.hint = ជម្រើសទាំងនេះអនុញ្ញាតឱ្យអ្នកដាក់កម្រិតលើមុខងារមួយចំនួនដែលអ្នកមើលអាចប្រើបានដូចជាការដកលទ្ធភាពរបស់ពួកគេក្នុងការប្រើការជជែកឯកជន។ (ការដាក់កម្រិតទាំងនេះមិនអនុវត្តចំពោះអ្នកសម្របសម្រួលទេ)
 bbb.lockSettings.moderatorLocking = ការចាក់សោ​អ្នកសម្របសម្រួល
 bbb.lockSettings.privateChat = ជជែកឯកជន
 bbb.lockSettings.publicChat = ជជែកសាធារណៈ
 bbb.lockSettings.webcam = វេបខេម
-bbb.lockSettings.webcamsOnlyForModerator = 
+bbb.lockSettings.webcamsOnlyForModerator = មើលវេបខែមរបស់អ្នកមើលដទៃទៀត
 bbb.lockSettings.microphone = មីក្រូហ្វូន
 bbb.lockSettings.layout = ប្លង់
 bbb.lockSettings.title=ចាក់សោអ្នកមើល
@@ -832,7 +832,7 @@ bbb.users.breakout.timerForRoom.toolTip = ពេលវេលា​នៅសល
 bbb.users.breakout.timer.toolTip = ពេលវេលា​នៅសល់សម្រាប់​​បន្ទប់​បំបែក​
 bbb.users.breakout.calculatingRemainingTime = កំពុងគណនា​ពេលវេលា​នៅសល់...
 bbb.users.breakout.closing = កំពុងបិទ
-bbb.users.breakout.closewarning.text = 
+bbb.users.breakout.closewarning.text = បន្ទប់​​បំបែក​​នឹងត្រូវបានបិទក្នុងពេលបន្តិចទៀត។
 bbb.users.breakout.rooms = បន្ទប់
 bbb.users.breakout.roomsCombo.accessibilityName = ចំនួនបន្ទប់ត្រូវ​បង្កើត​
 bbb.users.breakout.room = បន្ទប់
diff --git a/bigbluebutton-client/locale/lv_LV/bbbResources.properties b/bigbluebutton-client/locale/lv_LV/bbbResources.properties
index 070037d9c2ad0ab1a9c61a4c180534ccabb107b8..136f607db7dc6d8479e5db476d39f5c5ae89369f 100644
--- a/bigbluebutton-client/locale/lv_LV/bbbResources.properties
+++ b/bigbluebutton-client/locale/lv_LV/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Pievienojas serverim
 bbb.mainshell.statusProgress.loading = 
 bbb.mainshell.statusProgress.cannotConnectServer = Atvainojiet, pieslēgties serverim neizdevās.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = Atvērt logus
 bbb.mainshell.meetingNotFound = Tikšanās netika atrasta
 bbb.mainshell.invalidAuthToken = Nepareiza autorizācijas atslēga
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfigurācijas notifikācijas
 bbb.clientstatus.notification = Nelasītās notifikācijas
 bbb.clientstatus.close = Aizvērt
 bbb.clientstatus.tunneling.title = Ugunsmūris
-bbb.clientstatus.tunneling.message = Ugunsmūris neļauj jūsu klientam pievienoties izmantojot tiešo portu 1935. Iesakām nomainīt tīkla pieslēgumu, lai iegūtu stabilāku savienojumu.
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Pārlūka versija
 bbb.clientstatus.browser.message = Tavs pārlūks ({0}) nav atjaunots. Iesakām atjaunot uz jaunāko versiju.
 bbb.clientstatus.flash.title = Flash atskaņotājs
diff --git a/bigbluebutton-client/locale/mk_MK/bbbResources.properties b/bigbluebutton-client/locale/mk_MK/bbbResources.properties
index 6b9fb20ddf3ccda3165c15298cca3d61c8d1721f..d3327700d0b96ffe5a2990156aaebb2f859ea408 100644
--- a/bigbluebutton-client/locale/mk_MK/bbbResources.properties
+++ b/bigbluebutton-client/locale/mk_MK/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Конфигурациско известување
 bbb.clientstatus.notification = Непрочитани известувања
 bbb.clientstatus.close = 
 bbb.clientstatus.tunneling.title = Firewall
-bbb.clientstatus.tunneling.message = Firewall спречува вашиот клиент директно да се поврзи на порта 1935 до далечинскиот сервер. Препорачано е приклучување на помала рестриктивна мрежа за постабилна конекција.
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Верзија на пребарувач
 bbb.clientstatus.browser.message = Вашиот пребарувач ({0}) не е актуелен. Препорачано е ажурирање до најновата верзија.
 bbb.clientstatus.flash.title = Flash Player
diff --git a/bigbluebutton-client/locale/mn_MN/bbbResources.properties b/bigbluebutton-client/locale/mn_MN/bbbResources.properties
index 4b379a7b763eb609ea6e32f6b89631fc47a0324b..a7aede6921cd7676083dde857207ffc8f1b2d602 100644
--- a/bigbluebutton-client/locale/mn_MN/bbbResources.properties
+++ b/bigbluebutton-client/locale/mn_MN/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Мэдэгдлүүдийн тохиргоо
 bbb.clientstatus.notification = Уншаагүй мэдэгдэл
 bbb.clientstatus.close = 
 bbb.clientstatus.tunneling.title = Галт хана
-bbb.clientstatus.tunneling.message = Галт хана сервер лүү холбогдох 1935 портыг хааж байна. Галт ханы тохиргоог янзлах эсвэл өөр сүлжээнээс холбогдож үзэхийг санал болгож байна
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Вэб хөтөчийн хувилбар
 bbb.clientstatus.browser.message = Таны вэб хөтөч ({0}) шинэчлэгдээгүй байна. Сүүлийн хувилбарыг татахыг санал болгож байна.
 bbb.clientstatus.flash.title = Flash Player
diff --git a/bigbluebutton-client/locale/ms_MY/bbbResources.properties b/bigbluebutton-client/locale/ms_MY/bbbResources.properties
index 056c11a98443f36edb32c7bd540521738e319953..3feb2bcef2ce745aff3a5655c7eb9155382527b1 100644
--- a/bigbluebutton-client/locale/ms_MY/bbbResources.properties
+++ b/bigbluebutton-client/locale/ms_MY/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Penyambungan kepada server
 bbb.mainshell.statusProgress.loading = 
 bbb.mainshell.statusProgress.cannotConnectServer = Maaf, server tidak dapat disambungkan.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = Buka Log Window
 bbb.mainshell.meetingNotFound = perkumpulan tidak ditemui
 bbb.mainshell.invalidAuthToken = Pengesahan Token Tidak sah 
diff --git a/bigbluebutton-client/locale/nl_NL/bbbResources.properties b/bigbluebutton-client/locale/nl_NL/bbbResources.properties
index 0d3428a4b503293663906c565fa375d945367292..8b255ba3e0b352bc897593b953bd79c2f4fdae25 100644
--- a/bigbluebutton-client/locale/nl_NL/bbbResources.properties
+++ b/bigbluebutton-client/locale/nl_NL/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Configuratie berichten
 bbb.clientstatus.notification = Ongelezen berichten
 bbb.clientstatus.close = 
 bbb.clientstatus.tunneling.title = Firewall
-bbb.clientstatus.tunneling.message = Een firewall zorgt ervoor dat je client geen verbinding kan maken met de externe server op poort 1935. We adviseren een minder afgescherm netwerk voor een stabielere verbinding
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Internet browser versie
 bbb.clientstatus.browser.message = Je Internet browser ({0}) is niet up to date. We adviseren om hiervan de laatste versie te gebruiken.
 bbb.clientstatus.flash.title = Flash Player
diff --git a/bigbluebutton-client/locale/oc/bbbResources.properties b/bigbluebutton-client/locale/oc/bbbResources.properties
index d20c2b4b9b6bae8a4935eb5974255219a14f0b62..734b6e55fd3875a5df756d600228d91088e5fb32 100644
--- a/bigbluebutton-client/locale/oc/bbbResources.properties
+++ b/bigbluebutton-client/locale/oc/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Connexion al servidor
 bbb.mainshell.statusProgress.loading = 
 bbb.mainshell.statusProgress.cannotConnectServer = O planhèm, impossible d'establir una connexion al servidor.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (version {0})
+bbb.mainshell.copyrightLabel2 = 
 bbb.mainshell.logBtn.toolTip = Dobrir la fenèstra de log
 bbb.mainshell.meetingNotFound = Conferéncia pas trobada
 bbb.mainshell.invalidAuthToken = Geton d'autentificacion invalid
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Configuracion de las notificacions
 bbb.clientstatus.notification = Notificacions pas legidas
 bbb.clientstatus.close = Tampar
 bbb.clientstatus.tunneling.title = Parafuòc
-bbb.clientstatus.tunneling.message = Un parafuòc empacha vòstre client de se connectar dirèctament al pòrt 1935 del servidor distant. Es recomandat de se connectar a una ret mens restrictiva per obténer una connexion mai establa.
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Version del navigador
 bbb.clientstatus.browser.message = Vòstre navigador ({0}) es pas a jorn. Es recomandat d'installar la darrièra version.
 bbb.clientstatus.flash.title = Flash Player
diff --git a/bigbluebutton-client/locale/pl_PL/bbbResources.properties b/bigbluebutton-client/locale/pl_PL/bbbResources.properties
index cbbfa04f62875c672020a612368126917d1bc282..ecb3aca56bba201188c1255cdfd3fc581df2ae37 100644
--- a/bigbluebutton-client/locale/pl_PL/bbbResources.properties
+++ b/bigbluebutton-client/locale/pl_PL/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfiguracja powiadomień
 bbb.clientstatus.notification = Powiadomienie o nieprzeczytaniu
 bbb.clientstatus.close = Zamknij
 bbb.clientstatus.tunneling.title = Zapora ogniowa
-bbb.clientstatus.tunneling.message = Firewall uniemożliwia połączenie klienta bezpośrednio do portu 1935 na serwerze. Zalecane jest użycie mniej restrykcyjnej sieci w celu uzyskania stabilniejszego połączenia
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Wersja przeglÄ…darki
 bbb.clientstatus.browser.message = Twoja przeglÄ…darka ({0}) jest nieaktualna. Zalecana jest aktualizacja do najnowszej wersji.
 bbb.clientstatus.flash.title = Flash Player
diff --git a/bigbluebutton-client/locale/pt_BR/bbbResources.properties b/bigbluebutton-client/locale/pt_BR/bbbResources.properties
index 12ae03e19e3d2201c3f413b2e15ff0b8ebe29fbe..ab82d7a571825a04b21e5deea965d6a2cb41db91 100644
--- a/bigbluebutton-client/locale/pt_BR/bbbResources.properties
+++ b/bigbluebutton-client/locale/pt_BR/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Conectando ao servidor
 bbb.mainshell.statusProgress.loading = Carregando
 bbb.mainshell.statusProgress.cannotConnectServer = Desculpe, não foi possível conectar ao servidor.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
 bbb.mainshell.logBtn.toolTip = Abrir janela de log
 bbb.mainshell.meetingNotFound = Sala não encontrada
 bbb.mainshell.invalidAuthToken = Token de autenticação inválido
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Configuração de Notificações
 bbb.clientstatus.notification = Notificações não lidas
 bbb.clientstatus.close = Fechar
 bbb.clientstatus.tunneling.title = Firewall
-bbb.clientstatus.tunneling.message = Um firewall está impedindo que seu cliente se conecte diretamente na porta 1935 do servidor. Recomenda-se que seja utilizada uma rede menos restritiva para uma conexão mais estável
+bbb.clientstatus.tunneling.message = Um firewall está impedindo o seu cliente de se conectar diretamente ao servidor. Recomenda-se que seja utilizada uma rede menos restritiva para tornar a conexão mais estável.
 bbb.clientstatus.browser.title = Versão do navegador
 bbb.clientstatus.browser.message = Seu navegador ({0}) está desatualizado. Recomenda-se a atualização para a versão mais recente.
 bbb.clientstatus.flash.title = Flash Player
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Publicar
 bbb.polling.closeButton.label = Cancelar
 bbb.polling.customPollOption.label = Enquete personalizada...
 bbb.polling.pollModal.title = Resultados da enquete em tempo real
-bbb.polling.pollModal.hint = Deixe esta janela aberta para permitir que os alunos respondam à enquete. Clicar no botão Publicar ou Fechar finalizará a enquete.
+bbb.polling.pollModal.hint = Deixe esta janela aberta para aguardar as respostas dos participantes. Depois de clicar em Publicar ou Fechar, a pesquisa termina.
 bbb.polling.customChoices.title = Entre com as opções da enquete
 bbb.polling.respondersLabel.novotes = Aguardando respostas
 bbb.polling.respondersLabel.text = {0} usuários responderam
@@ -813,12 +813,12 @@ bbb.lockSettings.save.tooltip = Aplicar configurações de restrição
 bbb.lockSettings.cancel = Cancelar
 bbb.lockSettings.cancel.toolTip = Fecha esta janela sem aplicar
 
-bbb.lockSettings.hint = 
+bbb.lockSettings.hint = Essas opções permitem restringir certas funções para os espectadores, por exemplo, o uso do bate-papo privado. (Estas restrições não se aplicam aos moderadores)
 bbb.lockSettings.moderatorLocking = Bloqueio de moderador
 bbb.lockSettings.privateChat = Chat privado
 bbb.lockSettings.publicChat = Chat público
 bbb.lockSettings.webcam = Câmera
-bbb.lockSettings.webcamsOnlyForModerator = 
+bbb.lockSettings.webcamsOnlyForModerator = Veja as webcams de outros participantes
 bbb.lockSettings.microphone = Microfone
 bbb.lockSettings.layout = Layout
 bbb.lockSettings.title=Restringir participantes
diff --git a/bigbluebutton-client/locale/ro_RO/bbbResources.properties b/bigbluebutton-client/locale/ro_RO/bbbResources.properties
index 8cbc6d162d4fde2ee1069eec31859d39c8844fd1..2b6232f3971f493b767c7eafe12393fc344f8553 100644
--- a/bigbluebutton-client/locale/ro_RO/bbbResources.properties
+++ b/bigbluebutton-client/locale/ro_RO/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Configurare notificări
 bbb.clientstatus.notification = Notificări necitite
 bbb.clientstatus.close = ÃŽnchide
 bbb.clientstatus.tunneling.title = Firewall
-bbb.clientstatus.tunneling.message = Un firewall nu permite conexiunea direct pe portul 1935
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Versiunea browser-ului
 bbb.clientstatus.browser.message = Versiunea browser-ului ({0}) nu este actualizată. Se recomandă folosirea ultimei versiuni.
 bbb.clientstatus.flash.title = Flash Player
diff --git a/bigbluebutton-client/locale/ru_RU/bbbResources.properties b/bigbluebutton-client/locale/ru_RU/bbbResources.properties
index 56f7e18aa62c35cb1ff4570a3b6a90170832dda2..33a7a4d86d11387b5a67875edd3a23f6605df58a 100755
--- a/bigbluebutton-client/locale/ru_RU/bbbResources.properties
+++ b/bigbluebutton-client/locale/ru_RU/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Подключение к серверу...
 bbb.mainshell.statusProgress.loading = Загрузка
 bbb.mainshell.statusProgress.cannotConnectServer = К сожалению, мы не можем подключиться к серверу.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
 bbb.mainshell.logBtn.toolTip = Открыть окно журнала
 bbb.mainshell.meetingNotFound = Конференция не найдена
 bbb.mainshell.invalidAuthToken = Неверный ключ аутентификации
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Уведомления о конфигурации
 bbb.clientstatus.notification = Непрочитанные уведомления
 bbb.clientstatus.close = Закрыть
 bbb.clientstatus.tunneling.title = Файервол
-bbb.clientstatus.tunneling.message = Файервол (брандмауэр) с Вашей стороны препятствует попыткам клиента присоединиться напрямую к порту 1935 удалённого сервера. Рекомендуем присоединиться к менее ограниченной сети для большей стабильности соединения
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Версия браузера
 bbb.clientstatus.browser.message = Ваш браузер ({0}) устарел. Рекомендуем обновить его до наиболее свежей стабильной версии.
 bbb.clientstatus.flash.title = Flash Player
@@ -215,7 +215,7 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Включить микроф
 bbb.users.usersGrid.mediaItemRenderer.pushToMute = Выключить микрофон {0}
 bbb.users.usersGrid.mediaItemRenderer.pushToLock = Заблокировать {0}
 bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = Разблокировать {0}
-bbb.users.usersGrid.mediaItemRenderer.kickUser = 
+bbb.users.usersGrid.mediaItemRenderer.kickUser = Исключить {0}
 bbb.users.usersGrid.mediaItemRenderer.webcam = Веб-камера включена
 bbb.users.usersGrid.mediaItemRenderer.micOff = Микрофон выключен
 bbb.users.usersGrid.mediaItemRenderer.micOn = Микрофон включен
@@ -512,11 +512,11 @@ bbb.logout.unknown = Ваш клиент потерял соединение с
 bbb.logout.guestkickedout = Модератор не разрешил Вам подключение к этой конференции
 bbb.logout.usercommand = Вы вышли из конференции
 bbb.logour.breakoutRoomClose = Ваше окно браузера будет закрыто
-bbb.logout.ejectedFromMeeting = 
+bbb.logout.ejectedFromMeeting = Вы были исключены из конференции.
 bbb.logout.refresh.message = Если этот выход был неожиданным нажмите на кнопку ниже, чтобы восстановить подключение.
 bbb.logout.refresh.label = Повторное подключение
-bbb.logout.feedback.hint = 
-bbb.logout.feedback.label = 
+bbb.logout.feedback.hint = Как мы можем сделать BigBlueButton лучше?
+bbb.logout.feedback.label = Мы с удовольствием узнаем о вашем опыте работы с BigBlueButton (необязательно)
 bbb.settings.title = Настройки
 bbb.settings.ok = OK
 bbb.settings.cancel = Отменить
@@ -712,7 +712,7 @@ bbb.shortcutkey.present.fitPage.function = Подогнать слайды по
 bbb.shortcutkey.users.makePresenter = 89
 bbb.shortcutkey.users.makePresenter.function = Сделать выбранного пользователя ведущим
 bbb.shortcutkey.users.kick = 69
-bbb.shortcutkey.users.kick.function = 
+bbb.shortcutkey.users.kick.function = Исключить выбранного пользователя из конференции
 bbb.shortcutkey.users.mute = 83
 bbb.shortcutkey.users.mute.function = Выкл./Вкл. мик. у выбранного участника
 bbb.shortcutkey.users.muteall = 65
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Опубликовать
 bbb.polling.closeButton.label = Закрыть
 bbb.polling.customPollOption.label = Собственное голосование
 bbb.polling.pollModal.title = Текущие результаты опроса
-bbb.polling.pollModal.hint = Оставьте это окно открытым, чтобы дать возможность участникам ответить на опрос. Нажатие на кнопку "Опубликовать" или "Закрыть" завершит опрос.
+bbb.polling.pollModal.hint = 
 bbb.polling.customChoices.title = Ввести варианты для опроса
 bbb.polling.respondersLabel.novotes = Ожидание ответа 
 bbb.polling.respondersLabel.text = {0} Пользователей откликнулись
@@ -818,7 +818,7 @@ bbb.lockSettings.moderatorLocking = Заблокировано модерато
 bbb.lockSettings.privateChat = Приватные сообщения
 bbb.lockSettings.publicChat = Публичный чат
 bbb.lockSettings.webcam = Веб-камера
-bbb.lockSettings.webcamsOnlyForModerator = 
+bbb.lockSettings.webcamsOnlyForModerator = Смотрите веб-камеры других участников
 bbb.lockSettings.microphone = Микрофон
 bbb.lockSettings.layout = Схема расположения окон
 bbb.lockSettings.title=Блокировать зрителей
diff --git a/bigbluebutton-client/locale/sq/bbbResources.properties b/bigbluebutton-client/locale/sq/bbbResources.properties
index d374ba88b5c2ee0fcfd4004363c8185e2c861c80..5c096bf8d5a7a8d3c193a8312a13f715ac687273 100644
--- a/bigbluebutton-client/locale/sq/bbbResources.properties
+++ b/bigbluebutton-client/locale/sq/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Njoftimet per konfigurimet
 bbb.clientstatus.notification = Njoftimet e palexuara
 bbb.clientstatus.close = 
 bbb.clientstatus.tunneling.title = 
-bbb.clientstatus.tunneling.message = Firewall pengon klientin tuaj qe te lidhet direkt ne porten 1935 te serverit remote. Rekomandohet qe te lidhet ne nje rrjet me pak strikt per nje lidhje me stabel.
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Versioni i browserit
 bbb.clientstatus.browser.message = 
 bbb.clientstatus.flash.title = 
diff --git a/bigbluebutton-client/locale/sr_RS/bbbResources.properties b/bigbluebutton-client/locale/sr_RS/bbbResources.properties
index 3bef40ade2d21602e75977521b5c64158184002b..3be024c9fb331ccbbf316cd4f3b2c03c01a18930 100644
--- a/bigbluebutton-client/locale/sr_RS/bbbResources.properties
+++ b/bigbluebutton-client/locale/sr_RS/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Obaveštenja o konfiguraciji
 bbb.clientstatus.notification = Nepročitana obaveštenja
 bbb.clientstatus.close = Zatvori
 bbb.clientstatus.tunneling.title = Firewall
-bbb.clientstatus.tunneling.message = Firewall sprečava da se korisnik direktno poveže sa 1935 sa udaljenim serverom. Preporučuje se priključivanje manje restriktivnoj mreži zbog stabilnije konekcije
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Verzija pretraživača
 bbb.clientstatus.browser.message = Vaš pretraživač ({0})  nije ažuriran. Preporučuje se ažuriranje na najnoviju verziju.
 bbb.clientstatus.flash.title = Flash Player
diff --git a/bigbluebutton-client/locale/tr_TR/bbbResources.properties b/bigbluebutton-client/locale/tr_TR/bbbResources.properties
index 31561540c790bf1a2b8a377e9603243881c922ae..de5dd9016bbda236615a6a471d4830202b873e13 100644
--- a/bigbluebutton-client/locale/tr_TR/bbbResources.properties
+++ b/bigbluebutton-client/locale/tr_TR/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Sunucuya bağlanıyor
 bbb.mainshell.statusProgress.loading = Yükleniyor
 bbb.mainshell.statusProgress.cannotConnectServer = Üzgünüz, sunucuya bağlanamıyoruz.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (sürüm {0})
+bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (sürüm{0})
 bbb.mainshell.logBtn.toolTip = Sistem Kayıtlarını Aç
 bbb.mainshell.meetingNotFound = Görüşme Bulunamadı
 bbb.mainshell.invalidAuthToken = Kimlik Doğrulama Dizesi Hatalı
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Uyarı Ayarları
 bbb.clientstatus.notification = Okunmamış uyarılar
 bbb.clientstatus.close = Kapat
 bbb.clientstatus.tunneling.title = Güvenlik Duvarı
-bbb.clientstatus.tunneling.message = Güvenlik duvarı bilgisayarınızın doğrudan 1935 portu üzerinden sunucuya bağlanmasını engellemektedir. 
+bbb.clientstatus.tunneling.message = Güvenlik duvarı bilgisayarınızın doğrudan sunucuya bağlanmasını engellemektedir. Sağlıklı bir bağlantı için kısıtlaması daha az olan farklı bir ağdan bağlanmanızı öneririz.
 bbb.clientstatus.browser.title = Tarayıcı Sürümü
 bbb.clientstatus.browser.message = Tarayıcınız ({0}) güncel değil. Son sürüme güncellemeniz önerilmektedir.
 bbb.clientstatus.flash.title = Flash Oynatıcı
@@ -421,10 +421,10 @@ bbb.screensharePublish.restartFailed.label = .ekran paylaşımının tekrar baş
 bbb.screensharePublish.jwsCrashed.label = Ekran paylaşım uygulaması beklenmedik bir şekilde kapandı.
 bbb.screensharePublish.commonErrorMessage.label = "İptal"i seçin ve tekrar deneyin.
 bbb.screensharePublish.tunnelingErrorMessage.one = Ekran Paylaşımı çalıştırılamıyor.
-bbb.screensharePublish.tunnelingErrorMessage.two = Kullanıcıyı yenilemeyi deneyin (tarayıcıdaki yenile butonuna tıklayın). Eğer yeniledikten sonra kullancıının sağ alt köşesinde hala '[Bağlantı Köprüleniyor]' ifadesini görüyorsanız,  başka bir ağdan bağlanmayı deneyin.
+bbb.screensharePublish.tunnelingErrorMessage.two = Tarayıcınızı yenilemeyi (yenile butonuna tıklamayı) deneyin . Eğer yeniledikten sonra sağ alt köşede hala '[ Tunneling ]' ifadesini görüyorsanız,  başka bir ağdan bağlanmayı deneyin.
 bbb.screensharePublish.cancelButton.label = Vazgeç
 bbb.screensharePublish.startButton.label = BaÅŸlat
-bbb.screensharePublish.stopButton.label = Durdur
+bbb.screensharePublish.stopButton.label = Kapat
 bbb.screensharePublish.stopButton.toolTip = Ekran paylaşımını durdur
 bbb.screensharePublish.WebRTCChromeExtensionMissing.label = Chrome'un son versiyonunu kullanıyorsunuz fakat ekran paylaşımı eklentisi yüklü değil.
 bbb.screensharePublish.WebRTCRetryExtensionInstallation.label = ekran paylaşım eklentisini yükledikten sonra, "Yeniden Dene" butonuna tıklayınız.
@@ -585,10 +585,10 @@ bbb.settings.warning.close = Bu Uyarıyı kapat
 bbb.settings.noissues = Çözümlenmemiş soruna rastlanmadı.
 bbb.settings.instructions = Flash'ın kamera kullanım izni isteğini onaylayın. Eğer kendinizi görebiliyor ve duyabiliyorsanız tarayıcınız düzgün bir şekilde ayarlanmıştır. Diğer potansiyel sorunlar aşağıda sıralanmıştır. Olası çözümleri bulabilmek için her birine tıklayın.
 bbb.bwmonitor.title = AÄŸ izleme
-bbb.bwmonitor.upload = Yükle
-bbb.bwmonitor.upload.short = Yukarı
-bbb.bwmonitor.download = İndir
-bbb.bwmonitor.download.short = Aşağı
+bbb.bwmonitor.upload = Yükleme
+bbb.bwmonitor.upload.short = Yükleme
+bbb.bwmonitor.download = İndirme
+bbb.bwmonitor.download.short = İndirme
 bbb.bwmonitor.total = Toplam
 bbb.bwmonitor.current = Mevcut
 bbb.bwmonitor.available = Müsait
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Yayımla
 bbb.polling.closeButton.label = Kapat
 bbb.polling.customPollOption.label = Özel Oylama
 bbb.polling.pollModal.title = Canlı Oylama Sonuçları
-bbb.polling.pollModal.hint = Öğrencilerin oylamaya katılabilmeleri için bu pencereyi açık bırakın. Yayınla ya da Kapat tıklarsanız oylama sonlanacaktır.
+bbb.polling.pollModal.hint = Diğer kullanıcıların oylama yapabilmeleri için bu pencereyi açık bırakıp. Yayınla ya da Kapat tuşlamanız halinde oylama son bulacaktır.
 bbb.polling.customChoices.title = Oylama Seçeneklerini Girin
 bbb.polling.respondersLabel.novotes = Cevaplar bekleniyor
 bbb.polling.respondersLabel.text = {0} Kullanıcı Cevapladı
@@ -818,7 +818,7 @@ bbb.lockSettings.moderatorLocking = Moderatör kilidi
 bbb.lockSettings.privateChat = Özel Sohbet
 bbb.lockSettings.publicChat = Genel Sohbet
 bbb.lockSettings.webcam = Kamera
-bbb.lockSettings.webcamsOnlyForModerator = Diğer izleyicilerin kameralarını gizle
+bbb.lockSettings.webcamsOnlyForModerator = Diğer izleyicilerin kameralarını gör
 bbb.lockSettings.microphone = Mikrofon
 bbb.lockSettings.layout = Görünüm
 bbb.lockSettings.title=Izleyicileri Kilitle
diff --git a/bigbluebutton-client/locale/uk_UA/bbbResources.properties b/bigbluebutton-client/locale/uk_UA/bbbResources.properties
index a8f3926c4d4b65b461d803eec7bec0cb8e55993b..e72d22ac7c0282468b3801e87fbb846aa6863240 100644
--- a/bigbluebutton-client/locale/uk_UA/bbbResources.properties
+++ b/bigbluebutton-client/locale/uk_UA/bbbResources.properties
@@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
 bbb.mainshell.statusProgress.connecting = Під'єднуюсь до сервера
 bbb.mainshell.statusProgress.loading = Завантаження
 bbb.mainshell.statusProgress.cannotConnectServer = На жаль, ми не можемо  з'єднатися з сервером.
-bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
+bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
 bbb.mainshell.logBtn.toolTip = Відкрити вікно журналу
 bbb.mainshell.meetingNotFound = Конференція не знайдена
 bbb.mainshell.invalidAuthToken = Невірний ключ аутентифікації
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Повідомлення про конфігураці
 bbb.clientstatus.notification = Непрочитані повідомлення
 bbb.clientstatus.close = Закрити
 bbb.clientstatus.tunneling.title = Файрвол
-bbb.clientstatus.tunneling.message = Файервол (брандмауер) з Вашого боку перешкоджає спробам клієнта приєднатися безпосередньо до порту 1935 віддаленого сервера. Рекомендуємо приєднатися до менш обмеженої мережі для більшої стабільності з'єднання
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Версія браузера
 bbb.clientstatus.browser.message = Ваш браузер ({0}) застарів. Рекомендуємо оновити його до найбільш свіжої стабільної версії.
 bbb.clientstatus.flash.title = Flash Player
@@ -215,7 +215,7 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Увімкнути мікро
 bbb.users.usersGrid.mediaItemRenderer.pushToMute = Вимкнути мікрофон {0}
 bbb.users.usersGrid.mediaItemRenderer.pushToLock = Заблокувати {0}
 bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = Розблокувати {0}
-bbb.users.usersGrid.mediaItemRenderer.kickUser = 
+bbb.users.usersGrid.mediaItemRenderer.kickUser = Виключити {0}
 bbb.users.usersGrid.mediaItemRenderer.webcam = Веб-камера увімкнена
 bbb.users.usersGrid.mediaItemRenderer.micOff = Вимкнути мікрофон
 bbb.users.usersGrid.mediaItemRenderer.micOn = Увімкнути мікрофон
@@ -512,11 +512,11 @@ bbb.logout.unknown = Ваш клієнт втратив зв'язок з сер
 bbb.logout.guestkickedout = Модератор не дозволив вам приєднатись до зустрічі
 bbb.logout.usercommand = Ви вийшли із конференції
 bbb.logour.breakoutRoomClose = Вікно вашого браузеру буде закрите
-bbb.logout.ejectedFromMeeting = 
+bbb.logout.ejectedFromMeeting = Ви були виключені з конференції.
 bbb.logout.refresh.message = Якщо цей вихід був несподіваним натисніть на кнопку нижче, щоб відновити підключення.
 bbb.logout.refresh.label = Повторне підключення
-bbb.logout.feedback.hint = 
-bbb.logout.feedback.label = 
+bbb.logout.feedback.hint = Як ми можемо зробити BigBlueButton краще?
+bbb.logout.feedback.label = Ми хотіли б почути про ваш досвід роботи з BigBlueButton (необов'язково)
 bbb.settings.title = Налаштування
 bbb.settings.ok = ОК
 bbb.settings.cancel = Відмінити
@@ -712,7 +712,7 @@ bbb.shortcutkey.present.fitPage.function = Підігнати слайди по
 bbb.shortcutkey.users.makePresenter = 89
 bbb.shortcutkey.users.makePresenter.function = Зробити вибраного учасника ведучим
 bbb.shortcutkey.users.kick = 69
-bbb.shortcutkey.users.kick.function = 
+bbb.shortcutkey.users.kick.function = Виключити вибраного учасника з конференції
 bbb.shortcutkey.users.mute = 83
 bbb.shortcutkey.users.mute.function = Вимк./Увімк. мік. у вибраного учасника
 bbb.shortcutkey.users.muteall = 65
@@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Публікувати
 bbb.polling.closeButton.label = Закрити
 bbb.polling.customPollOption.label = Власне опитування
 bbb.polling.pollModal.title = Поточні результати голосування
-bbb.polling.pollModal.hint = Залиште це вікно відкритим, щоб студенти могли відповісти на опитування. Вибравши кнопку "Опублікувати" або "Закрити", опитування буде завершене.
+bbb.polling.pollModal.hint = 
 bbb.polling.customChoices.title = Ввести варіанти вибору
 bbb.polling.respondersLabel.novotes = Очікування відповіді
 bbb.polling.respondersLabel.text = {0} Користувачів відповіли
@@ -818,7 +818,7 @@ bbb.lockSettings.moderatorLocking = Заблоковано модераторо
 bbb.lockSettings.privateChat = Приватний чат
 bbb.lockSettings.publicChat = Публічний чат
 bbb.lockSettings.webcam = Веб-камера
-bbb.lockSettings.webcamsOnlyForModerator = 
+bbb.lockSettings.webcamsOnlyForModerator = Переглядайте веб-камери інших учасників
 bbb.lockSettings.microphone = Мікрофон
 bbb.lockSettings.layout = Схема розташування вікон
 bbb.lockSettings.title=Блокувати глядачів
diff --git a/bigbluebutton-client/locale/vi_VN/bbbResources.properties b/bigbluebutton-client/locale/vi_VN/bbbResources.properties
index a61ae23b4f12051a5589a322a533162462f0b661..c3bf6c12f3759ff866e91f7ff555f512123ccefc 100644
--- a/bigbluebutton-client/locale/vi_VN/bbbResources.properties
+++ b/bigbluebutton-client/locale/vi_VN/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = Các thông báo cấu hình
 bbb.clientstatus.notification = Các thông báo chưa đọc
 bbb.clientstatus.close = Đóng
 bbb.clientstatus.tunneling.title = Tường lửa
-bbb.clientstatus.tunneling.message = Tường lửa ngăn không cho người dùng kết nối trực tiếp vào cổng 1935 đến server. Khuyến cáo mở cổng sử dụng trên mạng để kết nối ổn định hơn 
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = Phiên bản trình duyệt
 bbb.clientstatus.browser.message = Trình duyệt ({0}) của bạn không phải là mới nhất. Khuyến nghị nên cập nhật phiên bản mới nhất.
 bbb.clientstatus.flash.title = Máy trình chiếu Flash 
diff --git a/bigbluebutton-client/locale/zh_TW/bbbResources.properties b/bigbluebutton-client/locale/zh_TW/bbbResources.properties
index f5b1daa07fccc3a76c03a6f3939f6b4c8e2f0e56..08f908df41920c7b8247a43b867a1ebc0159cfc1 100644
--- a/bigbluebutton-client/locale/zh_TW/bbbResources.properties
+++ b/bigbluebutton-client/locale/zh_TW/bbbResources.properties
@@ -140,7 +140,7 @@ bbb.clientstatus.title = 組態通知
 bbb.clientstatus.notification = 未讀取通知
 bbb.clientstatus.close = 關閉
 bbb.clientstatus.tunneling.title = 防火牆
-bbb.clientstatus.tunneling.message = A firewall is preventing your client from connecting directly on port 1935 to the remote server. Recommend joining a less restrictive network for a more stable connection 
+bbb.clientstatus.tunneling.message = 
 bbb.clientstatus.browser.title = 瀏覽器版本
 bbb.clientstatus.browser.message = 你的瀏覽器  ({0}) 未更新,建議更新到最新版本。
 bbb.clientstatus.flash.title = Flash 撥放器
diff --git a/bigbluebutton-client/resources/prod/BigBlueButton.html b/bigbluebutton-client/resources/prod/BigBlueButton.html
index 8291bb4a72c6e946b406b2ba6442c093840df2b3..e492db6ead1338a2233f73fa0b5287b00f55a93b 100755
--- a/bigbluebutton-client/resources/prod/BigBlueButton.html
+++ b/bigbluebutton-client/resources/prod/BigBlueButton.html
@@ -5,6 +5,7 @@
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
     <style type="text/css" media="screen">
       html, body, #content    { height:100%; width: 100%; }
+      .hiddenContent { display: none; }
       body                                    { margin:0; padding:0; overflow:hidden; }
       #altContent                             { /* style alt content */ }
       .visually-hidden {
@@ -175,12 +176,18 @@
 
           if ((iOS || android) && !puffin) {
             redirectToHtml5();
+          } else {
+            showContent();
           }
 
           if (document.getElementById('html5Section')) {
             document.getElementById('html5Section').style.display = 'inherit';
           }
+        } else {
+          showContent();
         }
+      }).fail(function(data) {
+        showContent();
       });
 
       if (fillContent) fillContent();
@@ -189,6 +196,10 @@
     function redirectToHtml5 () {
       document.location.pathname = '/html5client/join';
     }
+
+    function showContent () {
+      $('#content').removeClass('hiddenContent');
+    }
     </script>
   </head>
 
@@ -201,7 +212,7 @@
     </div>
     <div id="accessibile-progress" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" class="visually-hidden">0 %</div>
     <button id="enterFlash" type="button" class="visually-hidden" onclick="startFlashFocus();">Set focus to client</button>
-    <div id="content" >
+    <div id="content" class="hiddenContent">
       <div id="altFlash"  style="width:50%; margin-left: auto; margin-right: auto; font-family: sans-serif; text-align: center;">
         <p style="font-weight: bold;">You need Adobe Flash installed and enabled in order to use this client.</p>
         <br/>
diff --git a/bigbluebutton-config/bin/bbb-conf b/bigbluebutton-config/bin/bbb-conf
index 62e4c02f0d956342b7748e6de42b1695cc6cc5e0..e792c123dafd2abd709bcd04ddeac706093115cf 100755
--- a/bigbluebutton-config/bin/bbb-conf
+++ b/bigbluebutton-config/bin/bbb-conf
@@ -150,7 +150,7 @@ if LANG=c ifconfig | grep -q 'venet0:0'; then
         IP=$(ifconfig | grep -v '127.0.0.1' | grep -E "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" | tail -1 | cut -d: -f2 | awk '{ print $1}')
 else
         # IP detection for et* and en* networks
-IP=$(echo "$(LANG=c ifconfig  | awk -v RS="" '{gsub (/\n[ ]*inet /," ")}1' | grep ^et.* | grep addr: | head -n1 | sed 's/.*addr://g' | sed 's/ .*//g')$(LANG=c ifconfig  | awk -v RS="" '{gsub (/\n[ ]*inet /," ")}1' | grep ^en.* | grep addr: | head -n1 | sed 's/.*addr://g' | sed 's/ .*//g')$(LANG=c ifconfig  | awk -v RS="" '{gsub (/\n[ ]*inet /," ")}1' | grep ^wl.* | grep addr: | head -n1 | sed 's/.*addr://g' | sed 's/ .*//g')$(LANG=c ifconfig  | awk -v RS="" '{gsub (/\n[ ]*inet /," ")}1' | grep ^bo.* | grep addr: | head -n1 | sed 's/.*addr://g' | sed 's/ .*//g')"  | head -n1)
+IP=$(echo "$(LANG=c ifconfig  | awk -v RS="" '{gsub (/\n[ ]*inet /," ")}1' | grep ^et.* | grep addr: | head -n1 | sed 's/.*addr://g' | sed 's/ .*//g')$(LANG=c ifconfig  | awk -v RS="" '{gsub (/\n[ ]*inet /," ")}1' | grep ^en.* | grep addr: | head -n1 | sed 's/.*addr://g' | sed 's/ .*//g')$(LANG=c ifconfig  | awk -v RS="" '{gsub (/\n[ ]*inet /," ")}1' | grep ^wl.* | grep addr: | head -n1 | sed 's/.*addr://g' | sed 's/ .*//g')$(LANG=c ifconfig  | awk -v RS="" '{gsub (/\n[ ]*inet /," ")}1' | grep ^bo.* | grep addr: | head -n1 | sed 's/.*addr://g' | sed 's/ .*//g')$(LANG=c ifconfig  | awk -v RS="" '{gsub (/\n[ ]*inet /," ")}1' | grep ^em.* | grep addr: | head -n1 | sed 's/.*addr://g' | sed 's/ .*//g')$(LANG=c ifconfig  | awk -v RS="" '{gsub (/\n[ ]*inet /," ")}1' | grep ^p.p.* | grep addr: | head -n1 | sed 's/.*addr://g' | sed 's/ .*//g')"  | head -n1)
 fi
 
 if [ -z "$IP" ]; then
@@ -891,7 +891,7 @@ check_configuration() {
 	BBB_SECRET=$(cat ${SERVLET_DIR}/bigbluebutton/WEB-INF/classes/bigbluebutton.properties | grep -v '#' | tr -d '\r' | sed -n '/securitySalt/{s/.*=//;p}')
 	NGINX_IP=$(cat /etc/nginx/sites-available/bigbluebutton | grep -v '#' | sed -n '/server_name/{s/.*server_name[ ]*//;s/;//;p}' | cut -d' ' -f1)
 
-	if [ -f /usr/local/bigbluebutton/bbb-webhooks/config_local.coffee ]; then
+	if [ -f /usr/lib/systemd/system/bbb-webhooks.service ]; then
 		WEBHOOKS_SECRET=$(cat /usr/local/bigbluebutton/bbb-webhooks/config_local.coffee | grep '^[ \t]*config.bbb.sharedSecret[ =]*' | cut -d '"' -f2)
 		
 		if [ "$BBB_SECRET" != "$WEBHOOKS_SECRET" ]; then
diff --git a/bigbluebutton-html5/client/compatibility/adjust-videos.js b/bigbluebutton-html5/client/compatibility/adjust-videos.js
index c2042eb725c954c7721b48e451c4f5bb240efbac..5e1c2dcb57a017a89b046c2a8564b86a8a787e49 100644
--- a/bigbluebutton-html5/client/compatibility/adjust-videos.js
+++ b/bigbluebutton-html5/client/compatibility/adjust-videos.js
@@ -60,6 +60,7 @@
     const y = e.outerHeight() - 1;
 
     const videos = $("#" + tagId + " > div:visible");
+
     const isPortrait = ( $(document).width() < $(document).height() );
 
     if (isPortrait) {
diff --git a/bigbluebutton-html5/imports/api/acl/Acl.js b/bigbluebutton-html5/imports/api/acl/Acl.js
index 7c2102e16a6c1b205a87728e86f7d4512ccbefbe..b5fcf8b91b6bfc01057f5a2e91d041bded544c3c 100644
--- a/bigbluebutton-html5/imports/api/acl/Acl.js
+++ b/bigbluebutton-html5/imports/api/acl/Acl.js
@@ -27,9 +27,9 @@ export default class Acl {
       userId,
       authToken,
       validated: true,
-      // TODO: We cant check for approved until we move subscription logif out of <Base />
-      // approved: true,
       connectionStatus: 'online',
+      // TODO: We cant check for approved until we move subscription login out of <Base />
+      // approved: true,
     });
 
     return !!User; // if he found a user means the meeting/user/token is valid
diff --git a/bigbluebutton-html5/imports/api/log-client/server/methods/logClient.js b/bigbluebutton-html5/imports/api/log-client/server/methods/logClient.js
index d187c3e0e2af2085888da8dc8c518217e8a01312..22c5f6af9a121b44a1741a79fc6ac7ee8dfe0281 100644
--- a/bigbluebutton-html5/imports/api/log-client/server/methods/logClient.js
+++ b/bigbluebutton-html5/imports/api/log-client/server/methods/logClient.js
@@ -1,7 +1,11 @@
 import Logger from '/imports/startup/server/logger';
 
 const logClient = (type, log, ...args) => {
-  Logger.log(type, `CLIENT LOG: ${log}\n`, ...args);
+  if (typeof log === 'string' || log instanceof String) {
+    Logger.log(type, `CLIENT LOG: ${log}\n`, ...args);
+  } else {
+    Logger.log(type, `CLIENT LOG: ${JSON.stringify(log)}\n`, ...args);
+  }
 };
 
 export default logClient;
diff --git a/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js b/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js
index 37c33abb8b5503e9710dc40559101c3870c43cc3..78cfd231e3e5b4e66edab9aa1f6afaef4b8bed7d 100644
--- a/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js
+++ b/bigbluebutton-html5/imports/api/users/server/handlers/validateAuthToken.js
@@ -53,6 +53,7 @@ export default function handleValidateAuthToken({ body }, meetingId) {
 
   // Publish user join message
   if (valid && !waitForApproval) {
+    Logger.info('User=', JSON.stringify(User));
     userJoin(meetingId, userId, User.authToken);
   }
 
diff --git a/bigbluebutton-html5/imports/api/users/server/methods/userJoin.js b/bigbluebutton-html5/imports/api/users/server/methods/userJoin.js
index b182fff2c0c8920efdcfe3146299dfcde80bc061..83b8b2766f0d2d04b6a0df3bc2df477b32733b39 100644
--- a/bigbluebutton-html5/imports/api/users/server/methods/userJoin.js
+++ b/bigbluebutton-html5/imports/api/users/server/methods/userJoin.js
@@ -8,6 +8,8 @@ export default function userJoin(meetingId, userId, authToken) {
   const CHANNEL = REDIS_CONFIG.channels.toAkkaApps;
   const EVENT_NAME = 'UserJoinMeetingReqMsg';
 
+  Logger.info(`User='${userId}' is joining meeting='${meetingId}' authToken='${authToken}' pt1`);
+
   check(meetingId, String);
   check(userId, String);
   check(authToken, String);
@@ -17,7 +19,7 @@ export default function userJoin(meetingId, userId, authToken) {
     authToken,
   };
 
-  Logger.info(`User '${userId}' is joining meeting '${meetingId}'`);
+  Logger.info(`User='${userId}' is joining meeting='${meetingId}' authToken='${authToken}' pt2`);
 
   return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, userId, payload);
 }
diff --git a/bigbluebutton-html5/imports/api/users/server/publishers.js b/bigbluebutton-html5/imports/api/users/server/publishers.js
index 81babf80bfb4ac0ed9c56fb84d8b0f881426f714..51e78ac4fd536e03808478ba89577bb0f781dac5 100644
--- a/bigbluebutton-html5/imports/api/users/server/publishers.js
+++ b/bigbluebutton-html5/imports/api/users/server/publishers.js
@@ -1,3 +1,4 @@
+import _ from 'lodash';
 import Users from '/imports/api/users';
 import { Meteor } from 'meteor/meteor';
 import { check } from 'meteor/check';
@@ -6,9 +7,20 @@ import mapToAcl from '/imports/startup/mapToAcl';
 
 import userLeaving from './methods/userLeaving';
 
-Meteor.publish('current-user', (credentials) => {
+Meteor.publish('current-user', function currentUserPub(credentials) {
   const { meetingId, requesterUserId, requesterToken } = credentials;
 
+  const connectionId = this.connection.id;
+  const onCloseConnection = Meteor.bindEnvironment(() => {
+    try {
+      userLeaving(credentials, requesterUserId, connectionId);
+    } catch (e) {
+      Logger.error(`Exception while executing userLeaving: ${e}`);
+    }
+  });
+
+  this._session.socket.on('close', _.debounce(onCloseConnection, 100));
+
   check(meetingId, String);
   check(requesterUserId, String);
   check(requesterToken, String);
@@ -39,14 +51,6 @@ function users(credentials) {
   check(requesterUserId, String);
   check(requesterToken, String);
 
-  this.onStop(() => {
-    try {
-      userLeaving(credentials, requesterUserId, this.connection.id);
-    } catch (e) {
-      Logger.error(`Exception while executing userLeaving: ${e}`);
-    }
-  });
-
   const selector = {
     meetingId,
   };
diff --git a/bigbluebutton-html5/imports/startup/client/base.jsx b/bigbluebutton-html5/imports/startup/client/base.jsx
index 25471a3e3f92ce07baaa3a321360093d039d7c10..27e7ae493708e1888bea417a65d8c078eb34cbe7 100644
--- a/bigbluebutton-html5/imports/startup/client/base.jsx
+++ b/bigbluebutton-html5/imports/startup/client/base.jsx
@@ -100,12 +100,15 @@ const SUBSCRIPTIONS_NAME = [
 const BaseContainer = withRouter(withTracker(({ params, router }) => {
   if (params.errorCode) return params;
 
-  if (!Auth.loggedIn) {
-    return router.push('/logout');
-  }
-
-  const { credentials } = Auth;
+  const { locale } = Settings.application;
+  const { credentials, loggedIn } = Auth;
 
+  if (!loggedIn) {
+    return {
+      locale,
+      subscriptionsReady: false,
+    };
+  }
 
   const subscriptionErrorHandler = {
     onError: (error) => {
@@ -117,9 +120,8 @@ const BaseContainer = withRouter(withTracker(({ params, router }) => {
   const subscriptionsHandlers = SUBSCRIPTIONS_NAME.map(name =>
     Meteor.subscribe(name, credentials, subscriptionErrorHandler));
 
-
   return {
-    locale: Settings.application.locale,
+    locale,
     subscriptionsReady: subscriptionsHandlers.every(handler => handler.ready()),
   };
 })(Base));
diff --git a/bigbluebutton-html5/imports/startup/server/index.js b/bigbluebutton-html5/imports/startup/server/index.js
index 41ffed6aace191fd27a0fd0edfc08899abb68b51..5339ed23266c55d84165124c039d90cfc069ea88 100644
--- a/bigbluebutton-html5/imports/startup/server/index.js
+++ b/bigbluebutton-html5/imports/startup/server/index.js
@@ -6,7 +6,8 @@ import Redis from './redis';
 
 Meteor.startup(() => {
   const APP_CONFIG = Meteor.settings.public.app;
-  Logger.info(`SERVER STARTED. DEV_ENV=${Meteor.isDevelopment} PROD_ENV=${Meteor.isProduction}`, APP_CONFIG);
+  const env = Meteor.isDevelopment ? 'development' : 'production';
+  Logger.warn(`SERVER STARTED. ENV=${env}, nodejs version=${process.version}`, APP_CONFIG);
 });
 
 WebApp.connectHandlers.use('/check', (req, res) => {
diff --git a/bigbluebutton-html5/imports/startup/server/redis.js b/bigbluebutton-html5/imports/startup/server/redis.js
index 0314b3ce6c8541174339a53275aabccf35288972..043cb76b8e9dc23709fc65502271b0708523f502 100644
--- a/bigbluebutton-html5/imports/startup/server/redis.js
+++ b/bigbluebutton-html5/imports/startup/server/redis.js
@@ -70,7 +70,7 @@ class MettingMessageQueue {
     };
 
     try {
-      this.debug(`${eventName} emitted`);
+      this.debug(`${JSON.stringify(data.parsedMessage.core)} emitted`);
 
       if (isAsync) {
         callNext();
diff --git a/bigbluebutton-html5/imports/ui/components/actions-bar/component.jsx b/bigbluebutton-html5/imports/ui/components/actions-bar/component.jsx
index c433564a601caa68b9d5e2cc7c30d7b1136b316d..45338e8270c793e17b7aca07b60c7f1460ac0017 100644
--- a/bigbluebutton-html5/imports/ui/components/actions-bar/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/actions-bar/component.jsx
@@ -4,7 +4,7 @@ import { styles } from './styles.scss';
 import EmojiSelect from './emoji-select/component';
 import ActionsDropdown from './actions-dropdown/component';
 import AudioControlsContainer from '../audio/audio-controls/container';
-import JoinVideoOptionsContainer from '../video-dock/video-menu/container';
+import JoinVideoOptionsContainer from '../video-provider/video-menu/container';
 
 class ActionsBar extends React.PureComponent {
   render() {
diff --git a/bigbluebutton-html5/imports/ui/components/actions-bar/container.jsx b/bigbluebutton-html5/imports/ui/components/actions-bar/container.jsx
index 5ba1a03183d53e4498db9c85d047066177ae3647..ca2f85b1c1a5f6a6ba9688fdb452254e9f6375e8 100644
--- a/bigbluebutton-html5/imports/ui/components/actions-bar/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/actions-bar/container.jsx
@@ -2,7 +2,7 @@ import React from 'react';
 import { withTracker } from 'meteor/react-meteor-data';
 import ActionsBar from './component';
 import Service from './service';
-import VideoService from '../video-dock/service';
+import VideoService from '../video-provider/service';
 import { shareScreen, unshareScreen, isVideoBroadcasting } from '../screenshare/service';
 
 const ActionsBarContainer = props => <ActionsBar {...props} />;
diff --git a/bigbluebutton-html5/imports/ui/components/audio/audio-modal/component.jsx b/bigbluebutton-html5/imports/ui/components/audio/audio-modal/component.jsx
index b8635661bc8b4ada85a9155c9edd4db2d455469c..778200dab5b1773b1f1a4260feeb8781bfc63218 100644
--- a/bigbluebutton-html5/imports/ui/components/audio/audio-modal/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/audio/audio-modal/component.jsx
@@ -24,6 +24,12 @@ const propTypes = {
   isConnected: PropTypes.bool.isRequired,
   inputDeviceId: PropTypes.string,
   outputDeviceId: PropTypes.string,
+  showPermissionsOvelay: PropTypes.bool.isRequired,
+  listenOnlyMode: PropTypes.bool.isRequired,
+  skipCheck: PropTypes.bool.isRequired,
+  joinFullAudioImmediately: PropTypes.bool.isRequired,
+  joinFullAudioEchoTest: PropTypes.bool.isRequired,
+  forceListenOnlyAttendee: PropTypes.bool.isRequired,
 };
 
 const defaultProps = {
@@ -76,12 +82,12 @@ class AudioModal extends Component {
 
     this.state = {
       content: null,
+      hasError: false,
     };
 
     const {
       intl,
       closeModal,
-      joinListenOnly,
       joinEchoTest,
       exitAudio,
       leaveEchoTest,
@@ -94,6 +100,7 @@ class AudioModal extends Component {
     this.handleGoToEchoTest = this.handleGoToEchoTest.bind(this);
     this.handleJoinMicrophone = this.handleJoinMicrophone.bind(this);
     this.handleJoinListenOnly = this.handleJoinListenOnly.bind(this);
+    this.skipAudioOptions = this.skipAudioOptions.bind(this);
     this.closeModal = closeModal;
     this.joinEchoTest = joinEchoTest;
     this.exitAudio = exitAudio;
@@ -117,6 +124,26 @@ class AudioModal extends Component {
     };
   }
 
+  componentWillMount() {
+    const {
+      joinFullAudioImmediately,
+      joinFullAudioEchoTest,
+      forceListenOnlyAttendee,
+    } = this.props;
+
+    if (joinFullAudioImmediately) {
+      this.handleJoinMicrophone();
+    }
+
+    if (joinFullAudioEchoTest) {
+      this.handleGoToEchoTest();
+    }
+
+    if (forceListenOnlyAttendee) {
+      this.handleJoinListenOnly();
+    }
+  }
+
   componentWillUnmount() {
     const {
       isEchoTest,
@@ -130,6 +157,7 @@ class AudioModal extends Component {
   handleGoToAudioOptions() {
     this.setState({
       content: null,
+      hasError: true,
     });
   }
 
@@ -147,6 +175,10 @@ class AudioModal extends Component {
       outputDeviceId,
     } = this.props;
 
+    this.setState({
+      hasError: false,
+    });
+
     return this.joinEchoTest().then(() => {
       console.log(inputDeviceId, outputDeviceId);
       this.setState({
@@ -180,48 +212,78 @@ class AudioModal extends Component {
       joinMicrophone,
     } = this.props;
 
+    this.setState({
+      hasError: false,
+    });
+
     joinMicrophone().catch(this.handleGoToAudioOptions);
   }
 
+  skipAudioOptions() {
+    const {
+      isConnecting,
+      joinFullAudioImmediately,
+      joinFullAudioEchoTest,
+      forceListenOnlyAttendee,
+    } = this.props;
+
+    const {
+      content,
+      hasError,
+    } = this.state;
+
+
+    return (
+      isConnecting ||
+      forceListenOnlyAttendee ||
+      joinFullAudioImmediately ||
+      joinFullAudioEchoTest
+    ) && !content && !hasError;
+  }
+
   renderAudioOptions() {
     const {
       intl,
+      listenOnlyMode,
+      forceListenOnlyAttendee,
+      skipCheck,
     } = this.props;
 
     return (
       <span className={styles.audioOptions}>
-        <Button
-          className={styles.audioBtn}
-          label={intl.formatMessage(intlMessages.microphoneLabel)}
-          icon="unmute"
-          circle
-          size="jumbo"
-          onClick={this.handleGoToEchoTest}
-        />
-        <Button
-          className={styles.audioBtn}
-          label={intl.formatMessage(intlMessages.listenOnlyLabel)}
-          icon="listen"
-          circle
-          size="jumbo"
-          onClick={this.handleJoinListenOnly}
-        />
+        {!forceListenOnlyAttendee ?
+          <Button
+            className={styles.audioBtn}
+            label={intl.formatMessage(intlMessages.microphoneLabel)}
+            icon="unmute"
+            circle
+            size="jumbo"
+            onClick={skipCheck ? this.handleJoinMicrophone : this.handleGoToEchoTest}
+          />
+        : null}
+        {listenOnlyMode ?
+          <Button
+            className={styles.audioBtn}
+            label={intl.formatMessage(intlMessages.listenOnlyLabel)}
+            icon="listen"
+            circle
+            size="jumbo"
+            onClick={this.handleJoinListenOnly}
+          />
+        : null}
       </span>
     );
   }
 
   renderContent() {
     const {
-      isConnecting,
       isEchoTest,
       intl,
     } = this.props;
 
-    const {
-      content,
-    } = this.state;
+    const { content } = this.state;
 
-    if (isConnecting) {
+    if (this.skipAudioOptions()) {
       return (
         <span className={styles.connecting}>
           { !isEchoTest ?
@@ -235,15 +297,8 @@ class AudioModal extends Component {
   }
 
   renderEchoTest() {
-    const {
-      isConnecting,
-    } = this.props;
-
     return (
       <EchoTest
-        isConnecting={isConnecting}
-        joinEchoTest={this.joinEchoTest}
-        leaveEchoTest={this.leaveEchoTest}
         handleNo={this.handleGoToAudioSettings}
         handleYes={this.handleJoinMicrophone}
       />
@@ -287,13 +342,10 @@ class AudioModal extends Component {
   render() {
     const {
       intl,
-      isConnecting,
       showPermissionsOvelay,
     } = this.props;
 
-    const {
-      content,
-    } = this.state;
+    const { content } = this.state;
 
     return (
       <span>
@@ -303,26 +355,27 @@ class AudioModal extends Component {
           className={styles.modal}
           onRequestClose={this.closeModal}
         >
-          { isConnecting ? null :
-          <header
-            data-test="audioModalHeader"
-            className={styles.header}
-          >
-            <h3 className={styles.title}>
-              { content ?
-                this.contents[content].title :
-                intl.formatMessage(intlMessages.audioChoiceLabel)}
-            </h3>
-            <Button
-              data-test="modalBaseCloseButton"
-              className={styles.closeBtn}
-              label={intl.formatMessage(intlMessages.closeLabel)}
-              icon="close"
-              size="md"
-              hideLabel
-              onClick={this.closeModal}
-            />
-          </header>
+          { !this.skipAudioOptions() ?
+            <header
+              data-test="audioModalHeader"
+              className={styles.header}
+            >
+              <h3 className={styles.title}>
+                { content ?
+                  this.contents[content].title :
+                  intl.formatMessage(intlMessages.audioChoiceLabel)}
+              </h3>
+              <Button
+                data-test="modalBaseCloseButton"
+                className={styles.closeBtn}
+                label={intl.formatMessage(intlMessages.closeLabel)}
+                icon="close"
+                size="md"
+                hideLabel
+                onClick={this.closeModal}
+              />
+            </header>
+            : null
           }
           <div className={styles.content}>
             { this.renderContent() }
diff --git a/bigbluebutton-html5/imports/ui/components/audio/audio-modal/container.jsx b/bigbluebutton-html5/imports/ui/components/audio/audio-modal/container.jsx
index b69051954fc5d59eed6d171846025cd7cd5ff111..24c367b1a0a87b2d732e5705b68e33f772c2c6e3 100644
--- a/bigbluebutton-html5/imports/ui/components/audio/audio-modal/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/audio/audio-modal/container.jsx
@@ -6,21 +6,33 @@ import Service from '../service';
 
 const AudioModalContainer = props => <AudioModal {...props} />;
 
+const APP_CONFIG = Meteor.settings.public.app;
+
+const { listenOnlyMode, forceListenOnly, skipCheck } = APP_CONFIG;
+
 export default withModalMounter(withTracker(({ mountModal }) =>
   ({
     closeModal: () => {
       if (!Service.isConnecting()) mountModal(null);
     },
-    joinMicrophone: () =>
-      new Promise((resolve, reject) => {
-        Service.transferCall().then(() => {
-          mountModal(null);
-          resolve();
-        }).catch(() => {
+    joinMicrophone: () => {
+      const call = new Promise((resolve, reject) => {
+        if (skipCheck) {
+          resolve(Service.joinMicrophone());
+        } else {
+          resolve(Service.transferCall());
+        }
+        reject(() => {
           Service.exitAudio();
-          reject();
-        });
-      }),
+        })
+      });
+
+      return call.then(() => {
+        mountModal(null);
+      }).catch((error) => {
+        throw error;
+      });
+    },
     joinListenOnly: () => Service.joinListenOnly().then(() => mountModal(null)),
     leaveEchoTest: () => {
       if (!Service.isEchoTest()) {
@@ -38,4 +50,9 @@ export default withModalMounter(withTracker(({ mountModal }) =>
     inputDeviceId: Service.inputDeviceId(),
     outputDeviceId: Service.outputDeviceId(),
     showPermissionsOvelay: Service.isWaitingPermissions(),
+    listenOnlyMode,
+    skipCheck,
+    joinFullAudioImmediately: !listenOnlyMode && skipCheck,
+    joinFullAudioEchoTest: !listenOnlyMode && !skipCheck,
+    forceListenOnlyAttendee: listenOnlyMode && forceListenOnly && !Service.isUserModerator(),
   }))(AudioModalContainer));
diff --git a/bigbluebutton-html5/imports/ui/components/audio/audio-modal/styles.scss b/bigbluebutton-html5/imports/ui/components/audio/audio-modal/styles.scss
index 606dbad0eb2e5d6aaf44943b0b9f2f4d597bbcd6..290ec97ba42e7845e1e14a95648331aee2b0073d 100644
--- a/bigbluebutton-html5/imports/ui/components/audio/audio-modal/styles.scss
+++ b/bigbluebutton-html5/imports/ui/components/audio/audio-modal/styles.scss
@@ -24,6 +24,9 @@
       margin-right: 1rem;
     }
   }
+  .audioBtn:only-child {
+    margin-right: 0;
+  }
 }
 
 .audioOptions {
diff --git a/bigbluebutton-html5/imports/ui/components/audio/container.jsx b/bigbluebutton-html5/imports/ui/components/audio/container.jsx
index b950b9dca99b8f222f53b8b480486b95f9c18108..893f6b507a2df504571060cac6b3b30f0df493fc 100644
--- a/bigbluebutton-html5/imports/ui/components/audio/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/audio/container.jsx
@@ -63,7 +63,7 @@ let didMountAutoJoin = false;
 export default withModalMounter(injectIntl(withTracker(({ mountModal, intl }) => {
   const APP_CONFIG = Meteor.settings.public.app;
 
-  const { autoJoinAudio } = APP_CONFIG;
+  const { autoJoin } = APP_CONFIG;
   const openAudioModal = mountModal.bind(
     null,
     <AudioModalContainer />,
@@ -94,7 +94,7 @@ export default withModalMounter(injectIntl(withTracker(({ mountModal, intl }) =>
     init: () => {
       Service.init(messages);
       Service.changeOutputDevice(document.querySelector('#remote-media').sinkId);
-      if (!autoJoinAudio || didMountAutoJoin) return;
+      if (!autoJoin || didMountAutoJoin) return;
       openAudioModal();
       didMountAutoJoin = true;
     },
diff --git a/bigbluebutton-html5/imports/ui/components/audio/echo-test/component.jsx b/bigbluebutton-html5/imports/ui/components/audio/echo-test/component.jsx
index 3cb2c70f4e511e047d621486f7c743f9e45f553f..e8a37027fdfe4860f29300f94e2d07e126214ea3 100644
--- a/bigbluebutton-html5/imports/ui/components/audio/echo-test/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/audio/echo-test/component.jsx
@@ -39,19 +39,19 @@ class EchoTest extends Component {
         <Button
           className={styles.button}
           label={intl.formatMessage(intlMessages.yes)}
-          icon={'thumbs_up'}
+          icon="thumbs_up"
           circle
-          color={'success'}
-          size={'jumbo'}
+          color="success"
+          size="jumbo"
           onClick={this.handleYes}
         />
         <Button
           className={styles.button}
           label={intl.formatMessage(intlMessages.no)}
-          icon={'thumbs_down'}
+          icon="thumbs_down"
           circle
-          color={'danger'}
-          size={'jumbo'}
+          color="danger"
+          size="jumbo"
           onClick={this.handleNo}
         />
       </span>
diff --git a/bigbluebutton-html5/imports/ui/components/audio/service.js b/bigbluebutton-html5/imports/ui/components/audio/service.js
index 8628984225f68a18a20c1e48f026fd323c66cbdd..d585664458fa76c433af9ec210c9c63c27d42db1 100644
--- a/bigbluebutton-html5/imports/ui/components/audio/service.js
+++ b/bigbluebutton-html5/imports/ui/components/audio/service.js
@@ -8,7 +8,7 @@ const init = (messages) => {
   if (AudioManager.initialized) return;
   const meetingId = Auth.meetingID;
   const userId = Auth.userID;
-  const sessionToken = Auth.sessionToken;
+  const { sessionToken } = Auth;
   const User = Users.findOne({ userId });
   const username = User.name;
   const Meeting = Meetings.findOne({ meetingId: User.meetingId });
@@ -53,4 +53,5 @@ export default {
   outputDeviceId: () => AudioManager.outputDeviceId,
   isEchoTest: () => AudioManager.isEchoTest,
   error: () => AudioManager.error,
+  isUserModerator: () => Users.findOne({ userId: Auth.userID }).moderator,
 };
diff --git a/bigbluebutton-html5/imports/ui/components/dropdown/list/component.jsx b/bigbluebutton-html5/imports/ui/components/dropdown/list/component.jsx
old mode 100644
new mode 100755
index 6d824b289e6200047af5f5052f9b0606b8cf674b..c5d8cc762054fc9ef9d994b7fd3d74a4a7802c82
--- a/bigbluebutton-html5/imports/ui/components/dropdown/list/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/dropdown/list/component.jsx
@@ -22,6 +22,12 @@ const propTypes = {
     }
     return true;
   }).isRequired,
+
+  horizontal: PropTypes.bool,
+};
+
+const defaultProps = {
+  horizontal: false,
 };
 
 export default class DropdownList extends Component {
@@ -59,8 +65,17 @@ export default class DropdownList extends Component {
   handleItemKeyDown(event, callback) {
     const { getDropdownMenuParent } = this.props;
     let nextFocusedIndex = this.state.focusedIndex;
-
-    if (KEY_CODES.ARROW_UP === event.which) {
+    const isHorizontal = this.props.horizontal;
+    const navigationKeys = {
+      previous: KEY_CODES[`ARROW_${isHorizontal ? 'LEFT' : 'UP'}`],
+      next: KEY_CODES[`ARROW_${isHorizontal ? 'RIGHT' : 'DOWN'}`],
+      click: isHorizontal ? [KEY_CODES.ENTER] : [KEY_CODES.ENTER, KEY_CODES.ARROW_RIGHT],
+      close: [KEY_CODES.ESCAPE,
+        KEY_CODES.TAB,
+        KEY_CODES[`ARROW_${isHorizontal ? 'DOWN' : 'LEFT'}`]],
+    };
+
+    if (navigationKeys.previous === event.which) {
       event.stopPropagation();
 
       nextFocusedIndex -= 1;
@@ -72,7 +87,7 @@ export default class DropdownList extends Component {
       }
     }
 
-    if ([KEY_CODES.ARROW_DOWN].includes(event.keyCode)) {
+    if ([navigationKeys.next].includes(event.keyCode)) {
       event.stopPropagation();
 
       nextFocusedIndex += 1;
@@ -82,12 +97,12 @@ export default class DropdownList extends Component {
       }
     }
 
-    if ([KEY_CODES.ENTER, KEY_CODES.ARROW_RIGHT].includes(event.keyCode)) {
+    if (navigationKeys.click.includes(event.keyCode)) {
       event.stopPropagation();
       document.activeElement.firstChild.click();
     }
 
-    if ([KEY_CODES.ESCAPE, KEY_CODES.TAB, KEY_CODES.ARROW_LEFT].includes(event.keyCode)) {
+    if (navigationKeys.close.includes(event.keyCode)) {
       const { dropdownHide } = this.props;
 
       event.stopPropagation();
@@ -151,10 +166,11 @@ export default class DropdownList extends Component {
         });
       });
 
+    const listDirection = this.props.horizontal ? styles.horizontalList : styles.verticalList;
     return (
       <ul
         style={style}
-        className={cx(styles.list, className)}
+        className={cx(listDirection, className)}
         role="menu"
         ref={(menu) => {
           this._menu = menu;
@@ -168,3 +184,4 @@ export default class DropdownList extends Component {
 }
 
 DropdownList.propTypes = propTypes;
+DropdownList.defaultProps = defaultProps;
diff --git a/bigbluebutton-html5/imports/ui/components/dropdown/list/styles.scss b/bigbluebutton-html5/imports/ui/components/dropdown/list/styles.scss
old mode 100644
new mode 100755
index 17a7005996f69bf55b13c85011a7871b26783b00..2715196f05c1619b4487ffa9eaafbbc868d79e24
--- a/bigbluebutton-html5/imports/ui/components/dropdown/list/styles.scss
+++ b/bigbluebutton-html5/imports/ui/components/dropdown/list/styles.scss
@@ -3,7 +3,7 @@
 $item-bg-focus: $color-blue-lightest;
 $item-border-focus: $color-blue-lighter;
 
-.list {
+%list {
   list-style: none;
   font-size: $font-size-base;
   margin: 0;
@@ -12,7 +12,6 @@ $item-border-focus: $color-blue-lighter;
   color: $color-gray-dark;
   padding: ($line-height-computed / 2);
   display: flex;
-  flex-direction: column;
 
   @include mq($small-only) {
     font-size: $font-size-large * 1.1;
@@ -20,6 +19,20 @@ $item-border-focus: $color-blue-lighter;
   }
 }
 
+.verticalList {
+  @extend %list;
+  flex-direction: column;
+}
+
+.horizontalList {
+  @extend %list;
+  padding: 0;
+  flex-direction: row;
+  @include mq($small-only) {
+    flex-direction: column;
+  }
+}
+
 .title {
   @extend %text-elipsis;
   color: $color-gray;
@@ -42,7 +55,6 @@ $item-border-focus: $color-blue-lighter;
   display: flex;
   flex: 1 1 100%;
   padding: ($line-height-computed / 3) 0;
-  padding-left: ($line-height-computed / 3);
 
   &:focus {
     outline: none;
diff --git a/bigbluebutton-html5/imports/ui/components/logout-confirmation/component.jsx b/bigbluebutton-html5/imports/ui/components/logout-confirmation/component.jsx
index d1aa2092a4f88652d498ccf942fc6fb8a620b39e..bb0065c612ac514a9e1d541563400b33c9e04a51 100644
--- a/bigbluebutton-html5/imports/ui/components/logout-confirmation/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/logout-confirmation/component.jsx
@@ -44,6 +44,10 @@ const intlMessages = defineMessages({
     id: 'app.leaveConfirmation.endMeetingLabel',
     description: 'End meeting button label',
   },
+  endMeetingAriaLabel: {
+    id: 'app.leaveConfirmation.endMeetingAriaLabel',
+    description: 'End meeting button aria label',
+  },
   endMeetingDesc: {
     id: 'app.leaveConfirmation.endMeetingDesc',
     description: 'adds context to end meeting option',
diff --git a/bigbluebutton-html5/imports/ui/components/media/container.jsx b/bigbluebutton-html5/imports/ui/components/media/container.jsx
index b560609f9dae5d3783af1d4241170344e1fbc507..36fcea28490a1da7b1bc22744aba337eced1d055 100644
--- a/bigbluebutton-html5/imports/ui/components/media/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/media/container.jsx
@@ -3,10 +3,12 @@ import { withTracker } from 'meteor/react-meteor-data';
 import Settings from '/imports/ui/services/settings';
 import Meetings from '/imports/api/meetings/';
 import Auth from '/imports/ui/services/auth';
+import { defineMessages, injectIntl } from 'react-intl';
+import { notify } from '/imports/ui/services/notification';
 import Media from './component';
 import MediaService from './service';
 import PresentationAreaContainer from '../presentation/container';
-import VideoDockContainer from '../video-dock/container';
+import VideoProviderContainer from '../video-provider/container';
 import ScreenshareContainer from '../screenshare/container';
 import DefaultContent from '../presentation/default-content/component';
 
@@ -16,6 +18,17 @@ const defaultProps = {
   defaultContent: <DefaultContent />,
 };
 
+const intlMessages = defineMessages({
+  screenshareStarted: {
+    id: 'app.media.screenshare.start',
+    description: 'toast to show when a screenshare has started',
+  },
+  screenshareEnded: {
+    id: 'app.media.screenshare.end',
+    description: 'toast to show when a screenshare has ended',
+  },
+});
+
 class MediaContainer extends Component {
   constructor(props) {
     super(props);
@@ -30,6 +43,19 @@ class MediaContainer extends Component {
   }
 
   componentWillReceiveProps(nextProps) {
+    const {
+      isScreensharing,
+      intl,
+    } = this.props;
+
+    if (isScreensharing !== nextProps.isScreensharing) {
+      if (nextProps.isScreensharing) {
+        notify(intl.formatMessage(intlMessages.screenshareStarted), 'info', 'desktop');
+      } else {
+        notify(intl.formatMessage(intlMessages.screenshareEnded), 'info', 'desktop');
+      }
+    }
+
     if (nextProps.current_presentation !== this.props.current_presentation) {
       if (nextProps.current_presentation) {
         this.setState({ content: this.props.content });
@@ -54,7 +80,7 @@ MediaContainer.defaultProps = defaultProps;
 
 export default withTracker(() => {
   const { dataSaving } = Settings;
-  const { viewParticipantsWebcams: viewVideoDock, viewScreenshare } = dataSaving;
+  const { viewParticipantsWebcams, viewScreenshare } = dataSaving;
 
   const data = {};
   data.currentPresentation = MediaService.getPresentationInfo();
@@ -72,9 +98,11 @@ export default withTracker(() => {
     data.content = <ScreenshareContainer />;
   }
 
-  if (MediaService.shouldShowOverlay() && viewVideoDock && !webcamOnlyModerator) {
-    data.overlay = <VideoDockContainer />;
+  if (MediaService.shouldShowOverlay() && viewParticipantsWebcams && !webcamOnlyModerator) {
+    data.overlay = <VideoProviderContainer />;
   }
 
+  data.isScreensharing = MediaService.isVideoBroadcasting();
+
   return data;
-})(MediaContainer);
+})(injectIntl(MediaContainer));
diff --git a/bigbluebutton-html5/imports/ui/components/media/service.js b/bigbluebutton-html5/imports/ui/components/media/service.js
index d697ee637f80fdcdd54caa6c530c9a928541373b..ef68ebcae4f2d6622233e140190c836d0ccaa954 100644
--- a/bigbluebutton-html5/imports/ui/components/media/service.js
+++ b/bigbluebutton-html5/imports/ui/components/media/service.js
@@ -34,4 +34,5 @@ export default {
   shouldShowScreenshare,
   shouldShowOverlay,
   isUserPresenter,
+  isVideoBroadcasting,
 };
diff --git a/bigbluebutton-html5/imports/ui/components/modal/base/component.jsx b/bigbluebutton-html5/imports/ui/components/modal/base/component.jsx
index ba3170e06f08509762eb71ea3724635f6a8c8ddd..2547e5c75b7b3772bd627a0652bc89ce37a86b5b 100644
--- a/bigbluebutton-html5/imports/ui/components/modal/base/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/modal/base/component.jsx
@@ -20,6 +20,8 @@ const defaultProps = {
 
 export default class ModalBase extends Component {
   render() {
+    if (!this.props.isOpen) return null;
+
     return (
       <ReactModal {...this.props}>
         {this.props.children}
diff --git a/bigbluebutton-html5/imports/ui/components/polling/component.jsx b/bigbluebutton-html5/imports/ui/components/polling/component.jsx
index 1ec189e4302a38f3b43c911fdade35a3d3ad15d6..7d18e4b563e9e433a48a925fca210710e6dd32b1 100644
--- a/bigbluebutton-html5/imports/ui/components/polling/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/polling/component.jsx
@@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
 import Button from '/imports/ui/components/button/component';
 import { defineMessages, injectIntl } from 'react-intl';
 import injectWbResizeEvent from '/imports/ui/components/presentation/resize-wrapper/component';
+import Tooltip from '/imports/ui/components/tooltip/component';
 import { styles } from './styles.scss';
 
 const intlMessages = defineMessages({
@@ -13,7 +14,6 @@ const intlMessages = defineMessages({
 });
 
 class PollingComponent extends Component {
-
   getStyles() {
     const number = this.props.poll.answers.length + 1;
     const buttonStyle =
@@ -32,7 +32,7 @@ class PollingComponent extends Component {
     const { intl } = this.props;
 
     return (
-      <div className={styles.pollingContainer}>
+      <div className={styles.pollingContainer} role="alert">
         <div className={styles.pollingTitle}>
           <p>
             {intl.formatMessage(intlMessages.pollingTitleLabel)}
@@ -44,15 +44,19 @@ class PollingComponent extends Component {
             style={calculatedStyles}
             className={styles.pollButtonWrapper}
           >
-            <Button
-              className={styles.pollingButton}
-              label={pollAnswer.key}
-              size="lg"
-              color="primary"
-              onClick={() => this.props.handleVote(poll.pollId, pollAnswer)}
-              aria-labelledby={`pollAnswerLabel${pollAnswer.key}`}
-              aria-describedby={`pollAnswerDesc${pollAnswer.key}`}
-            />
+            <Tooltip
+              title={pollAnswer.key}
+            >
+              <Button
+                className={styles.pollingButton}
+                size="lg"
+                color="primary"
+                label={pollAnswer.key}
+                onClick={() => this.props.handleVote(poll.pollId, pollAnswer)}
+                aria-labelledby={`pollAnswerLabel${pollAnswer.key}`}
+                aria-describedby={`pollAnswerDesc${pollAnswer.key}`}
+              />
+            </Tooltip>
             <div
               className={styles.hidden}
               id={`pollAnswerLabel${pollAnswer.key}`}
@@ -65,8 +69,7 @@ class PollingComponent extends Component {
             >
               {`Select this option to vote for ${pollAnswer.key}`}
             </div>
-          </div>),
-        )}
+          </div>))}
       </div>
     );
   }
@@ -81,11 +84,9 @@ PollingComponent.propTypes = {
   handleVote: PropTypes.func.isRequired,
   poll: PropTypes.shape({
     pollId: PropTypes.string.isRequired,
-    answers: PropTypes.arrayOf(
-      PropTypes.shape({
-        id: PropTypes.number.isRequired,
-        key: PropTypes.string.isRequired,
-      }).isRequired,
-    ).isRequired,
+    answers: PropTypes.arrayOf(PropTypes.shape({
+      id: PropTypes.number.isRequired,
+      key: PropTypes.string.isRequired,
+    }).isRequired).isRequired,
   }).isRequired,
 };
diff --git a/bigbluebutton-html5/imports/ui/components/polling/styles.scss b/bigbluebutton-html5/imports/ui/components/polling/styles.scss
index 02e4abd6fbb4d01f54c19b2b3fdb9db6e756d8ce..d45e769c6daeaaa6407cf85534347887391bf3a0 100644
--- a/bigbluebutton-html5/imports/ui/components/polling/styles.scss
+++ b/bigbluebutton-html5/imports/ui/components/polling/styles.scss
@@ -13,6 +13,9 @@
 .pollingButton {
   width: 100%;
   height: 100%;
+  white-space: nowrap;                      
+  overflow: hidden;
+  text-overflow: ellipsis;
 }
 
 .pollingTitle {
diff --git a/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/component.jsx b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/component.jsx
index 951246efc2e0bfbeb0e687bc133a738ad40567e0..e013c296f6d98fb7f13b08c9e7c097c6f606a8e8 100644
--- a/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/component.jsx
@@ -193,7 +193,7 @@ class PresentationToolbar extends Component {
           aria-relevant="all"
           value={currentSlideNum}
           onChange={actions.skipToSlideHandler}
-          className={styles.skipSlide}
+          className={styles.skipSlideSelect}
         >
           {this.renderSkipSlideOpts(numberOfSlides)}
         </select>
@@ -208,6 +208,7 @@ class PresentationToolbar extends Component {
           onClick={actions.nextSlideHandler}
           label={intl.formatMessage(intlMessages.nextSlideLabel)}
           hideLabel
+          className={styles.skipSlide}
         />
 
         {/* Fit to width button
diff --git a/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/styles.scss b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/styles.scss
index b20f7a7d980388942af52da02b672d8ae0f0f7f6..9a0d494164766ecd883b1ef546c52f78e0162fa4 100644
--- a/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/styles.scss
+++ b/bigbluebutton-html5/imports/ui/components/presentation/presentation-toolbar/styles.scss
@@ -33,7 +33,7 @@ $controls-background: #F0F2F6 !default;
     background-color: $controls-background;
     color: $controls-color;
     border-top: 0;
-    border-right: $color-gray-light 2px solid;
+    border-right: $color-gray-light $border-size solid;
     border-bottom: 0;
     border-left: 0;
     border-radius: 0;
@@ -58,12 +58,14 @@ $controls-background: #F0F2F6 !default;
   border-right: 0 !important;
 }
 
+.skipSlide,
 .prevSlide {
-  border-radius: 5px 0 0 5px;
+  border: none !important;
 }
 
-.skipSlide {
+.skipSlideSelect {
   padding: 0 0.8%;
+  border-left: $border-size solid $color-gray-light !important;
 }
 
 .zoomSlider {
diff --git a/bigbluebutton-html5/imports/ui/components/screenshare/component.jsx b/bigbluebutton-html5/imports/ui/components/screenshare/component.jsx
old mode 100644
new mode 100755
index 9845cd3584ca801afea00b49c6a43ce41beb0872..1367fe85538a80313854d0586d4bb6823226f96b
--- a/bigbluebutton-html5/imports/ui/components/screenshare/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/screenshare/component.jsx
@@ -4,6 +4,14 @@ export default class ScreenshareComponent extends React.Component {
   componentDidMount() {
     this.props.presenterScreenshareHasStarted();
   }
+  componentWillReceiveProps(nextProps) {
+    if (this.props.isPresenter && !nextProps.isPresenter) {
+      this.props.unshareScreen();
+    }
+  }
+  componentWillUnmount() {
+    this.props.presenterScreenshareHasEnded();
+  }
 
   render() {
     return (
diff --git a/bigbluebutton-html5/imports/ui/components/screenshare/container.jsx b/bigbluebutton-html5/imports/ui/components/screenshare/container.jsx
old mode 100644
new mode 100755
index b10659a3dbb169acb2bc2f5a27f8d35b6001796b..169fd0eb237a5904eae20c6be5a414ef5a7ee59e
--- a/bigbluebutton-html5/imports/ui/components/screenshare/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/screenshare/container.jsx
@@ -1,14 +1,13 @@
 import React from 'react';
 import { withTracker } from 'meteor/react-meteor-data';
-import { isVideoBroadcasting, presenterScreenshareHasEnded,
+import Users from '/imports/api/users/';
+import Auth from '/imports/ui/services/auth';
+import mapUser from '/imports/ui/services/user/mapUser';
+import { isVideoBroadcasting, presenterScreenshareHasEnded, unshareScreen,
   presenterScreenshareHasStarted } from './service';
 import ScreenshareComponent from './component';
 
 class ScreenshareContainer extends React.Component {
-  componentWillUnmount() {
-    this.props.presenterScreenshareHasEnded();
-  }
-
   render() {
     if (this.props.isVideoBroadcasting()) {
       return <ScreenshareComponent {...this.props} />;
@@ -18,9 +17,14 @@ class ScreenshareContainer extends React.Component {
   }
 }
 
-export default withTracker(() => ({
-  isVideoBroadcasting,
-  presenterScreenshareHasStarted,
-  presenterScreenshareHasEnded,
-}))(ScreenshareContainer);
-
+export default withTracker(() => {
+  const user = Users.findOne({ userId: Auth.userID });
+  const MappedUser = mapUser(user);
+  return {
+    isPresenter: MappedUser.isPresenter,
+    unshareScreen,
+    isVideoBroadcasting,
+    presenterScreenshareHasStarted,
+    presenterScreenshareHasEnded,
+  };
+})(ScreenshareContainer);
diff --git a/bigbluebutton-html5/imports/ui/components/settings/component.jsx b/bigbluebutton-html5/imports/ui/components/settings/component.jsx
index 130aded284308ecb105be42e4904a1ad4d86e70c..7cb8ac1160129bf710876d4370f92a3f6592e119 100644
--- a/bigbluebutton-html5/imports/ui/components/settings/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/settings/component.jsx
@@ -217,7 +217,6 @@ class Settings extends Component {
         title={intl.formatMessage(intlMessages.SettingsLabel)}
         confirm={{
           callback: () => {
-            this.props.mountModal(null);
             if (location.pathname.includes('/users')) {
               router.push('/');
             }
@@ -227,9 +226,7 @@ class Settings extends Component {
           description: intl.formatMessage(intlMessages.SaveLabelDesc),
         }}
         dismiss={{
-          callback: () => {
-            Settings.setHtmlFontSize(this.state.saved.application.fontSize);
-          },
+          callback: () => Settings.setHtmlFontSize(this.state.saved.application.fontSize),
           label: intl.formatMessage(intlMessages.CancelLabel),
           description: intl.formatMessage(intlMessages.CancelLabelDesc),
         }}
diff --git a/bigbluebutton-html5/imports/ui/components/switch/component.jsx b/bigbluebutton-html5/imports/ui/components/switch/component.jsx
index d5862c9fe301b81b709f0fc43b41c4aee54ea613..3f250374d5921c6db2d6226e033d46585999b8a2 100644
--- a/bigbluebutton-html5/imports/ui/components/switch/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/switch/component.jsx
@@ -1,17 +1,30 @@
 import React from 'react';
 import Toggle from 'react-toggle';
 import classNames from 'classnames';
+import { defineMessages, injectIntl } from 'react-intl';
 
-export default class Switch extends Toggle {
+const intlMessages = defineMessages({
+  on: {
+    id: 'app.switch.onLabel',
+    description: 'label for toggle switch on state',
+  },
+  off: {
+    id: 'app.switch.offLabel',
+    description: 'label for toggle switch off state',
+  },
+});
+
+class Switch extends Toggle {
   render() {
     const {
+      intl,
       className,
       icons: _icons,
       ariaLabelledBy,
       ariaDescribedBy,
       ariaLabel,
       ariaDesc,
-      ...inputProps,
+      ...inputProps
     } = this.props;
 
     const classes = classNames('react-toggle', {
@@ -21,33 +34,38 @@ export default class Switch extends Toggle {
     }, className);
 
     return (
-      <div className={classes}
+      <div
+        className={classes}
         onClick={this.handleClick}
         onTouchStart={this.handleTouchStart}
         onTouchMove={this.handleTouchMove}
-        onTouchEnd={this.handleTouchEnd}>
-        <div className='react-toggle-track' aria-hidden="true">
-          <div className='react-toggle-track-check'>
-            ON
+        onTouchEnd={this.handleTouchEnd}
+      >
+        <div className="react-toggle-track" aria-hidden="true">
+          <div className="react-toggle-track-check">
+            {intl.formatMessage(intlMessages.on)}
           </div>
-          <div className='react-toggle-track-x'>
-            OFF
+          <div className="react-toggle-track-x">
+            {intl.formatMessage(intlMessages.off)}
           </div>
         </div>
-        <div className='react-toggle-thumb' />
+        <div className="react-toggle-thumb" />
 
         <input
           {...inputProps}
-          ref={ref => { this.input = ref; }}
+          ref={(ref) => { this.input = ref; }}
           onFocus={this.handleFocus}
           onBlur={this.handleBlur}
-          className='react-toggle-screenreader-only'
-          type='checkbox'
-          tabIndex='0'
+          className="react-toggle-screenreader-only"
+          type="checkbox"
+          tabIndex="0"
           aria-label={ariaLabel}
-          aria-describedby={ariaDescribedBy}/>
-          <div id={ariaDescribedBy} hidden>{ariaDesc}</div>
+          aria-describedby={ariaDescribedBy}
+        />
+        <div id={ariaDescribedBy} hidden>{ariaDesc}</div>
       </div>
     );
   }
-};
+}
+
+export default injectIntl(Switch);
diff --git a/bigbluebutton-html5/imports/ui/components/toast/component.jsx b/bigbluebutton-html5/imports/ui/components/toast/component.jsx
index e3adfcdbc02bbc56a6f33fc53e6338d3f7cce786..64b98edd19fd2a8d80ec090b66d0584f4bc492d4 100644
--- a/bigbluebutton-html5/imports/ui/components/toast/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/toast/component.jsx
@@ -24,7 +24,7 @@ const defaultIcons = {
 };
 
 const Toast = ({ icon, type, message }) => (
-  <div className={styles[type]}>
+  <div className={styles[type]} role="alert">
     <div className={styles.icon}><Icon iconName={icon || defaultIcons[type]} /></div>
     <div className={styles.message}>
       <span>{message}</span>
diff --git a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/component.jsx b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/component.jsx
index 5eaa767db058da255cf164fcd53b17750d367ebb..96a4f5772c36cebb4acfa16213e8e97faae2df70 100644
--- a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/component.jsx
@@ -249,7 +249,7 @@ class UserParticipants extends Component {
         }
         <div
           className={styles.scrollableList}
-          role="tabpanel"
+          role="list"
           tabIndex={0}
           ref={(ref) => { this.refScrollContainer = ref; }}
         >
diff --git a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-list-content/component.jsx b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-list-content/component.jsx
index fbb4ab9ced7a1cd199bce5502d7896abdaf39ab6..12ad8b998e9c294e929887f2c85325e40d3b8cb5 100644
--- a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-list-content/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-list-content/component.jsx
@@ -241,6 +241,7 @@ class UserListContent extends Component {
             intl={intl}
             meeting={meeting}
             isMeetingLocked={isMeetingLocked}
+            userAriaLabel={userAriaLabel}
           />}
           {<UserIcons
             user={user}
diff --git a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-name/component.jsx b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-name/component.jsx
index 4b67eb7770f3f9b9653b7f7449166c0190beaa86..f4554ac11a64a135ff50b16e3a04d9d1502c8bfc 100644
--- a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-name/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-name/component.jsx
@@ -4,7 +4,6 @@ import { defineMessages } from 'react-intl';
 import Icon from '/imports/ui/components/icon/component';
 import { styles } from './styles';
 
-
 const messages = defineMessages({
   presenter: {
     id: 'app.userList.presenter',
@@ -31,6 +30,7 @@ const messages = defineMessages({
     description: 'aria label for each user in the userlist',
   },
 });
+
 const propTypes = {
   user: PropTypes.shape({
     name: PropTypes.string.isRequired,
@@ -45,6 +45,7 @@ const propTypes = {
   }).isRequired,
   meeting: PropTypes.shape({}).isRequired,
   isMeetingLocked: PropTypes.func.isRequired,
+  userAriaLabel: PropTypes.string.isRequired,
 };
 
 const UserName = (props) => {
@@ -54,6 +55,7 @@ const UserName = (props) => {
     compact,
     isMeetingLocked,
     meeting,
+    userAriaLabel,
   } = props;
 
   if (compact) {
@@ -77,9 +79,8 @@ const UserName = (props) => {
     userNameSub.push(intl.formatMessage(messages.guest));
   }
 
-
   return (
-    <div className={styles.userName}>
+    <div className={styles.userName} role="button" aria-label={userAriaLabel}>
       <span className={styles.userNameMain}>
         {user.name} <i>{(user.isCurrent) ? `(${intl.formatMessage(messages.you)})` : ''}</i>
       </span>
diff --git a/bigbluebutton-html5/imports/ui/components/video-dock/component.jsx b/bigbluebutton-html5/imports/ui/components/video-dock/component.jsx
deleted file mode 100755
index be743709b97c554b9ae26414a7680b3f5f4f99e5..0000000000000000000000000000000000000000
--- a/bigbluebutton-html5/imports/ui/components/video-dock/component.jsx
+++ /dev/null
@@ -1,692 +0,0 @@
-import React, { Component } from 'react';
-import { styles } from './styles';
-import { defineMessages, injectIntl } from 'react-intl';
-import VideoService from './service';
-import { log } from '/imports/ui/services/api';
-import { notify } from '/imports/ui/services/notification';
-import { toast } from 'react-toastify';
-import { styles as mediaStyles } from '/imports/ui/components/media/styles';
-import Toast from '/imports/ui/components/toast/component';
-import _ from 'lodash';
-
-const intlMessages = defineMessages({
-  iceCandidateError: {
-    id: 'app.video.iceCandidateError',
-    description: 'Error message for ice candidate fail',
-  },
-  permissionError: {
-    id: 'app.video.permissionError',
-    description: 'Error message for webcam permission',
-  },
-  sharingError: {
-    id: 'app.video.sharingError',
-    description: 'Error on sharing webcam',
-  },
-  chromeExtensionError: {
-    id: 'app.video.chromeExtensionError',
-    description: 'Error message for Chrome Extension not installed',
-  },
-  chromeExtensionErrorLink: {
-    id: 'app.video.chromeExtensionErrorLink',
-    description: 'Error message for Chrome Extension not installed',
-  },
-});
-
-const RECONNECT_WAIT_TIME = 5000;
-const INITIAL_SHARE_WAIT_TIME = 2000;
-const CAMERA_SHARE_FAILED_WAIT_TIME = 10000;
-
-class VideoElement extends Component {
-  constructor(props) {
-    super(props);
-  }
-
-  render() {
-    let cssClass;
-    if (this.props.shared || !this.props.localCamera) {
-      cssClass = styles.sharedWebcamVideoLocal;
-    } else {
-      cssClass = styles.sharedWebcamVideo;
-    }
-    return (
-      <div className={`${styles.videoContainer} ${cssClass}`} >
-        { this.props.localCamera ?
-          <video id="shareWebcam" muted autoPlay playsInline />
-          :
-          <video id={`video-elem-${this.props.videoId}`} autoPlay playsInline />
-        }
-        <div className={styles.videoText}>
-          <div className={styles.userName}>{this.props.name}</div>
-          {/* <Button
-            label=""
-            className={styles.pauseButton}
-            icon={'unmute'}
-            size={'sm'}
-            circle
-            onClick={() => {}}
-          /> */}
-        </div>
-      </div>
-    );
-  }
-
-  componentDidMount() {
-    if (typeof this.props.onMount === 'function' && !this.props.localCamera) {
-      this.props.onMount(this.props.videoId, false);
-    }
-  }
-}
-
-class VideoDock extends Component {
-  constructor(props) {
-    super(props);
-
-    // Set a valid bbb-webrtc-sfu application server socket in the settings
-    this.ws = new ReconnectingWebSocket(Meteor.settings.public.kurento.wsUrl);
-    this.wsQueue = [];
-    this.webRtcPeers = {};
-    this.reconnectWebcam = false;
-    this.reconnectList = [];
-    this.cameraTimeouts = {};
-
-    this.state = {
-      videos: {},
-      sharedWebcam: false,
-      userNames: {},
-    };
-
-    this.unshareWebcam = this.unshareWebcam.bind(this);
-    this.shareWebcam = this.shareWebcam.bind(this);
-
-    this.onWsOpen = this.onWsOpen.bind(this);
-    this.onWsClose = this.onWsClose.bind(this);
-    this.onWsMessage = this.onWsMessage.bind(this);
-  }
-
-  setupReconnectVideos() {
-    for (id in this.webRtcPeers) {
-      this.disconnected(id);
-      this.stop(id);
-    }
-  }
-
-  reconnectVideos() {
-    for (i in this.reconnectList) {
-      const id = this.reconnectList[i];
-
-      // TODO: base this on BBB API users instead of using memory
-      if (id != this.myId) {
-        setTimeout(() => {
-          log('debug', ` [camera] Trying to reconnect camera ${id}`);
-          this.start(id, false);
-        }, RECONNECT_WAIT_TIME);
-      }
-    }
-
-    if (this.reconnectWebcam) {
-      log('debug', ` [camera] Trying to re-share ${this.myId} after reconnect.`);
-      this.start(this.myId, true);
-    }
-
-    this.reconnectWebcam = false;
-    this.reconnectList = [];
-  }
-
-  componentDidMount() {
-    const ws = this.ws;
-    const { users, userId } = this.props;
-
-    users.forEach((user) => {
-      if (user.has_stream && user.userId !== userId) {
-        // FIX: Really ugly hack, but sometimes the ICE candidates aren't
-        // generated properly when we send videos right after componentDidMount
-        setTimeout(() => {
-          this.start(user.userId, false);
-        }, INITIAL_SHARE_WAIT_TIME);
-      }
-    });
-
-    document.addEventListener('joinVideo', this.shareWebcam.bind(this)); // TODO find a better way to do this
-    document.addEventListener('exitVideo', this.unshareWebcam.bind(this));
-    document.addEventListener('installChromeExtension', this.installChromeExtension.bind(this));
-
-    window.addEventListener('resize', this.adjustVideos);
-    window.addEventListener('orientationchange', this.adjustVideos);
-
-    ws.addEventListener('message', this.onWsMessage);
-  }
-
-  componentWillMount() {
-    this.ws.addEventListener('open', this.onWsOpen);
-    this.ws.addEventListener('close', this.onWsClose);
-
-    window.addEventListener('online', this.ws.open.bind(this.ws));
-    window.addEventListener('offline', this.onWsClose);
-  }
-
-  componentWillUpdate(nextProps) {
-    const { isLocked } = nextProps;
-    if (isLocked && VideoService.isConnected()) {
-      this.unshareWebcam();
-    }
-  }
-
-  componentWillUnmount() {
-    document.removeEventListener('joinVideo', this.shareWebcam);
-    document.removeEventListener('exitVideo', this.unshareWebcam);
-    document.removeEventListener('installChromeExtension', this.installChromeExtension);
-    window.removeEventListener('resize', this.adjustVideos);
-    window.removeEventListener('orientationchange', this.adjustVideos);
-
-    this.ws.removeEventListener('message', this.onWsMessage);
-    this.ws.removeEventListener('open', this.onWsOpen);
-    this.ws.removeEventListener('close', this.onWsClose);
-
-    window.removeEventListener('online', this.ws.open.bind(this.ws));
-    window.removeEventListener('offline', this.onWsClose);
-
-    // Unshare user webcam
-    if (this.state.sharedWebcam) {
-      this.unshareWebcam();
-      this.stop(this.props.userId);
-    }
-
-    Object.keys(this.webRtcPeers).forEach((id) => {
-     this.destroyWebRTCPeer(id);
-    });
-    // Close websocket connection to prevent multiple reconnects from happening
-    this.ws.close();
-  }
-
-  adjustVideos() {
-    setTimeout(() => {
-      window.adjustVideos('webcamArea', true, mediaStyles.moreThan4Videos, mediaStyles.container, mediaStyles.overlayWrapper, 'presentationAreaData', 'screenshareVideo');
-    }, 0);
-  }
-
-  onWsOpen() {
-    log('debug', '------ Websocket connection opened.');
-
-    // -- Resend queued messages that happened when socket was not connected
-    while (this.wsQueue.length > 0) {
-      this.sendMessage(this.wsQueue.pop());
-    }
-
-    this.reconnectVideos();
-  }
-
-  onWsClose(error) {
-    log('debug', '------ Websocket connection closed.');
-
-    this.setupReconnectVideos();
-  }
-
-  onWsMessage(msg) {
-    const { intl } = this.props;
-    const parsedMessage = JSON.parse(msg.data);
-
-    console.log('Received message new ws message: ');
-    console.log(parsedMessage);
-
-    switch (parsedMessage.id) {
-      case 'startResponse':
-        this.startResponse(parsedMessage);
-        break;
-
-      case 'playStart':
-        this.handlePlayStart(parsedMessage);
-        break;
-
-      case 'playStop':
-        this.handlePlayStop(parsedMessage);
-
-        break;
-
-      case 'iceCandidate':
-        const webRtcPeer = this.webRtcPeers[parsedMessage.cameraId];
-
-        if (webRtcPeer) {
-          if (webRtcPeer.didSDPAnswered) {
-            webRtcPeer.addIceCandidate(parsedMessage.candidate, (err) => {
-              if (err) {
-                this.notifyError(intl.formatMessage(intlMessages.iceCandidateError));
-                return log('error', `Error adding candidate: ${err}`);
-              }
-            });
-          } else {
-            webRtcPeer.iceQueue.push(parsedMessage.candidate);
-          }
-        } else {
-          log('error', ' [ICE] Message arrived after the peer was already thrown out, discarding it...');
-        }
-        break;
-
-      case 'error':
-      default:
-        this.handleError(parsedMessage);
-        break;
-    }
-  }
-
-  start(id, shareWebcam) {
-    const { users } = this.props;
-    const that = this;
-    const { intl } = this.props;
-
-    console.log(`Starting video call for video: ${id} with ${shareWebcam}`);
-    const userNames = this.state.userNames;
-    users.forEach((user) => {
-      if (user.userId === id) {
-        userNames[id] = user.name;
-      }
-    });
-    this.setState({ userNames });
-
-    this.cameraTimeouts[id] = setTimeout(() => {
-      log('error', `Camera share has not suceeded in ${CAMERA_SHARE_FAILED_WAIT_TIME}`);
-      if (that.myId == id) {
-        that.notifyError(intl.formatMessage(intlMessages.sharingError));
-        that.unshareWebcam();
-      } else {
-        that.stop(id);
-        that.start(id, shareWebcam);
-      }
-    }, CAMERA_SHARE_FAILED_WAIT_TIME);
-
-    if (shareWebcam) {
-      VideoService.joiningVideo();
-      this.setState({ sharedWebcam: true });
-      this.myId = id;
-      this.initWebRTC(id, true);
-    } else {
-      // initWebRTC with shareWebcam false will be called after react mounts the element
-      this.createVideoTag(id);
-    }
-  }
-
-  initWebRTC(id, shareWebcam) {
-    const that = this;
-    const { intl } = this.props;
-
-    const onIceCandidate = function (candidate) {
-      const message = {
-        type: 'video',
-        role: shareWebcam ? 'share' : 'viewer',
-        id: 'onIceCandidate',
-        candidate,
-        cameraId: id,
-      };
-      that.sendMessage(message);
-    };
-
-    let videoConstraints = {};
-    if (navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)) {
-      // Custom constraints for Safari
-      videoConstraints = {
-        width: {
-          min: 320,
-          max: 640,
-        },
-        height: {
-          min: 240,
-          max: 480,
-        },
-      };
-    } else {
-      videoConstraints = {
-        width: {
-          min: 320,
-          ideal: 640,
-        },
-        height: {
-          min: 240,
-          ideal: 480,
-        },
-        frameRate: {
-          min: 5,
-          ideal: 10,
-        },
-      };
-    }
-
-    const options = {
-      mediaConstraints: {
-        audio: false,
-        video: videoConstraints,
-      },
-      onicecandidate: onIceCandidate,
-    };
-
-    let peerObj;
-    if (shareWebcam) {
-      options.localVideo = document.getElementById('shareWebcam');
-      peerObj = kurentoUtils.WebRtcPeer.WebRtcPeerSendonly;
-    } else {
-      peerObj = kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly;
-      options.remoteVideo = document.getElementById(`video-elem-${id}`);
-    }
-
-    const webRtcPeer = new peerObj(options, function (error) {
-      if (error) {
-        log('error', ' WebRTC peerObj create error');
-        log('error', error);
-        that.notifyError(intl.formatMessage(intlMessages.permissionError));
-        /* This notification error is displayed considering kurento-utils
-         * returned the error 'The request is not allowed by the user agent
-         * or the platform in the current context.', but there are other
-         * errors that could be returned. */
-
-        that.destroyWebRTCPeer(id);
-        that.destroyVideoTag(id);
-        VideoService.resetState();
-        return log('error', error);
-      }
-
-      this.didSDPAnswered = false;
-      this.iceQueue = [];
-
-      that.webRtcPeers[id] = webRtcPeer;
-      if (shareWebcam) {
-        that.sharedWebcam = webRtcPeer;
-      }
-
-      this.generateOffer((error, offerSdp) => {
-        if (error) {
-          log('error', ' WebRtc generate offer error');
-
-          that.destroyWebRTCPeer(id);
-          that.destroyVideoTag(id);
-
-          return log('error', error);
-        }
-
-        console.log(`Invoking SDP offer callback function ${location.host}`);
-        const message = {
-          type: 'video',
-          role: shareWebcam ? 'share' : 'viewer',
-          id: 'start',
-          sdpOffer: offerSdp,
-          cameraId: id,
-        };
-        that.sendMessage(message);
-      });
-      while (this.iceQueue.length) {
-        const candidate = this.iceQueue.shift();
-        this.addIceCandidate(candidate, (err) => {
-          if (err) {
-            this.notifyError(intl.formatMessage(intlMessages.iceCandidateError));
-            return console.error(`Error adding candidate: ${err}`);
-          }
-        });
-      }
-      this.didSDPAnswered = true;
-    });
-  }
-
-  disconnected(id) {
-    if (this.sharedWebcam) {
-      log('debug', ' [camera] Webcam disconnected, will try re-share webcam later.');
-      this.reconnectWebcam = true;
-    } else {
-      this.reconnectList.push(id);
-
-      log('debug', ` [camera] ${id} disconnected, will try re-subscribe later.`);
-    }
-  }
-
-  stop(id) {
-    const { userId } = this.props;
-    this.sendMessage({
-      type: 'video',
-      role: id == userId ? 'share' : 'viewer',
-      id: 'stop',
-      cameraId: id,
-    });
-
-    if (id === userId) {
-      VideoService.exitedVideo();
-    }
-
-    this.destroyWebRTCPeer(id);
-    this.destroyVideoTag(id);
-  }
-
-  createVideoTag(id) {
-    const videos = this.state.videos;
-
-    videos[id] = true;
-    this.setState({ videos });
-  }
-
-  destroyVideoTag(id) {
-    const { videos, userNames } = this.state;
-
-    this.setState({
-      videos: _.omit(videos, id),
-      userNames: _.omit(userNames, id),
-    });
-    if (id == this.myId) {
-      this.setState({ sharedWebcam: false });
-    }
-  }
-
-  destroyWebRTCPeer(id) {
-    const webRtcPeer = this.webRtcPeers[id];
-
-    // Clear the shared camera fail timeout when destroying
-    clearTimeout(this.cameraTimeouts[id]);
-    this.cameraTimeouts[id] = null;
-
-    if (webRtcPeer) {
-      log('info', 'Stopping WebRTC peer');
-
-      if (id == this.myId && this.sharedWebcam) {
-        this.sharedWebcam.dispose();
-        this.sharedWebcam = null;
-      }
-
-      webRtcPeer.dispose();
-      delete this.webRtcPeers[id];
-    } else {
-      log('info', 'No WebRTC peer to stop (not an error)');
-    }
-  }
-
-  shareWebcam() {
-    const { users, userId } = this.props;
-
-    if (this.connectedToMediaServer()) {
-      this.start(userId, true);
-    } else {
-      log('error', 'Not connected to media server');
-    }
-  }
-
-  unshareWebcam() {
-    log('info', 'Unsharing webcam');
-    const { userId } = this.props;
-    VideoService.sendUserUnshareWebcam(userId);
-    this.stop(userId);
-  }
-
-  startResponse(message) {
-    const id = message.cameraId;
-    const webRtcPeer = this.webRtcPeers[id];
-
-    if (message.sdpAnswer == null) {
-      return log('debug', 'Null sdp answer. Camera unplugged?');
-    }
-
-    if (webRtcPeer == null) {
-      return log('debug', 'Null webrtc peer ????');
-    }
-
-    log('info', 'SDP answer received from server. Processing ...');
-
-    webRtcPeer.processAnswer(message.sdpAnswer, (error) => {
-      if (error) {
-        return log('error', error);
-      }
-
-      if (message.cameraId == this.props.userId) {
-        log('info', 'camera id sendusershare ', id);
-        VideoService.sendUserShareWebcam(id);
-      }
-    });
-  }
-
-  sendMessage(message) {
-    const ws = this.ws;
-
-    if (this.connectedToMediaServer()) {
-      const jsonMessage = JSON.stringify(message);
-      console.log(`Sending message: ${jsonMessage}`);
-      ws.send(jsonMessage, (error) => {
-        if (error) {
-          console.error(`client: Websocket error "${error}" on message "${jsonMessage.id}"`);
-        }
-      });
-    } else {
-      // No need to queue video stop messages
-      if (message.id != 'stop') {
-        this.wsQueue.push(message);
-      }
-    }
-  }
-
-  connectedToMediaServer() {
-    return this.ws.readyState === WebSocket.OPEN;
-  }
-
-  connectionStatus() {
-    return this.ws.readyState;
-  }
-
-  handlePlayStop(message) {
-    log('info', 'Handle play stop <--------------------');
-    log('error', message);
-
-    if (message.cameraId == this.props.userId) {
-      this.unshareWebcam();
-    } else {
-      this.stop(message.cameraId);
-    }
-  }
-
-  handlePlayStart(message) {
-    log('info', 'Handle play start <===================');
-
-    // Clear camera shared timeout when camera succesfully starts
-    clearTimeout(this.cameraTimeouts[message.cameraId]);
-    this.cameraTimeouts[message.cameraId] = null;
-
-    if (message.cameraId == this.props.userId) {
-      VideoService.joinedVideo();
-    }
-  }
-
-  handleError(message) {
-    const { intl, userId } = this.props;
-
-    if (message.cameraId == userId) {
-      this.notifyError(intl.formatMessage(intlMessages.sharingError));
-      this.unshareWebcam();
-    } else {
-      this.stop(message.cameraId);
-    }
-
-    console.error(' Handle error --------------------->');
-    log('debug', message.message);
-  }
-
-  notifyError(message) {
-    notify(message, 'error', 'video');
-  }
-
-  installChromeExtension() {
-    const { intl } = this.props;
-    const CHROME_EXTENSION_LINK = Meteor.settings.public.kurento.chromeExtensionLink;
-
-    this.notifyError(<div>
-      {intl.formatMessage(intlMessages.chromeExtensionError)}{' '}
-      <a href={CHROME_EXTENSION_LINK} target="_blank">
-        {intl.formatMessage(intlMessages.chromeExtensionErrorLink)}
-      </a>
-                     </div>);
-  }
-
-  componentDidUpdate() {
-    this.adjustVideos();
-  }
-
-  render() {
-    return (
-      <div className={styles.videoDock}>
-        <div id="webcamArea" className={styles.webcamArea}>
-          {Object.keys(this.state.videos).map(id => (
-            <VideoElement videoId={id} key={id} name={this.state.userNames[id]} localCamera={false} onMount={this.initWebRTC.bind(this)} />
-            ))}
-          <VideoElement shared={this.state.sharedWebcam} name={this.state.userNames[this.myId]} localCamera />
-        </div>
-      </div>
-    );
-  }
-
-  shouldComponentUpdate(nextProps, nextState) {
-    const { userId } = this.props;
-    const currentUsers = this.props.users || {};
-    const nextUsers = nextProps.users;
-
-    const users = {};
-    const present = {};
-
-    if (!currentUsers) { return false; }
-
-    // Map user objectos to an object in the form {userId: has_stream}
-    currentUsers.forEach((user) => {
-      users[user.userId] = user.has_stream;
-    });
-
-    // Keep instances where the flag has changed or next user adds it
-    nextUsers.forEach((user) => {
-      const id = user.userId;
-      // The case when a user exists and stream status has not changed
-      if (users[id] === user.has_stream) {
-        delete users[id];
-      } else {
-        // Case when a user has been added to the list
-        users[id] = user.has_stream;
-      }
-
-      // Mark the ids which are present in nextUsers
-      present[id] = true;
-    });
-
-    const userIds = Object.keys(users);
-
-    for (let i = 0; i < userIds.length; i++) {
-      const id = userIds[i];
-
-      // If a userId is not present in nextUsers let's stop it
-      if (!present[id]) {
-        this.stop(id);
-        continue;
-      }
-
-      console.log(`User ${users[id] ? '' : 'un'}shared webcam ${id}`);
-
-      // If a user stream is true, changed and was shared by other
-      // user we'll start it. If it is false and changed we stop it
-      if (users[id]) {
-        if (userId !== id) {
-          this.start(id, false);
-        }
-      } else {
-        this.stop(id);
-      }
-    }
-    return true;
-  }
-}
-
-export default injectIntl(VideoDock);
diff --git a/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/component.jsx b/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/component.jsx
deleted file mode 100644
index 5f1dab02b4e26a4908c623fbd823f7bbe1cda75c..0000000000000000000000000000000000000000
--- a/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/component.jsx
+++ /dev/null
@@ -1,68 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import Button from '/imports/ui/components/button/component';
-import { defineMessages, injectIntl, intlShape } from 'react-intl';
-import { styles } from './styles';
-
-const intlMessages = defineMessages({
-  joinVideo: {
-    id: 'app.video.joinVideo',
-    description: 'Join video button label',
-  },
-  leaveVideo: {
-    id: 'app.video.leaveVideo',
-    description: 'Leave video button label',
-  },
-});
-
-class JoinVideoOptions extends React.Component {
-  render() {
-    const {
-      intl,
-      isWaitingResponse,
-      isConnected,
-      isSharingVideo,
-      handleJoinVideo,
-      handleCloseVideo,
-      isLocked,
-      enableShare,
-    } = this.props;
-
-    if (isSharingVideo) {
-      return (
-        <span className={styles.container}>
-          <Button
-            onClick={handleCloseVideo}
-            label={intl.formatMessage(intlMessages.leaveVideo)}
-            hideLabel
-            aria-label={intl.formatMessage(intlMessages.leaveVideo)}
-            color="danger"
-            icon="video_off"
-            size="lg"
-            circle
-            disabled={isLocked || isWaitingResponse}
-          />
-        </span>
-      );
-    }
-
-    return (
-      <span className={styles.container}>
-        <Button
-          className={styles.button}
-          onClick={handleJoinVideo}
-          label={intl.formatMessage(intlMessages.joinVideo)}
-          hideLabel
-          aria-label={intl.formatMessage(intlMessages.joinVideo)}
-          color="primary"
-          icon="video"
-          size="lg"
-          circle
-          disabled={isLocked || isWaitingResponse || (!isSharingVideo && isConnected) || enableShare}
-        />
-      </span>
-    );
-  }
-}
-
-export default injectIntl(JoinVideoOptions);
diff --git a/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/container.jsx b/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/container.jsx
deleted file mode 100644
index 5e598eabac56f87502d2f7f1919a9e59c5052df6..0000000000000000000000000000000000000000
--- a/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/container.jsx
+++ /dev/null
@@ -1,37 +0,0 @@
-import React from 'react';
-import { withTracker } from 'meteor/react-meteor-data';
-import Settings from '/imports/ui/services/settings';
-import mapUser from '/imports/ui/services/user/mapUser';
-import Auth from '/imports/ui/services/auth';
-import Meetings from '/imports/api/meetings/';
-import Users from '/imports/api/users/';
-import JoinVideoOptions from './component';
-import VideoMenuService from './service';
-import VideoService from '../service';
-
-const JoinVideoOptionsContainer = props => <JoinVideoOptions {...props} />;
-
-export default withTracker((params) => {
-  const isSharingVideo = VideoMenuService.isSharingVideo();
-  const isWaitingResponse = VideoService.isWaitingResponse();
-  const isConnected = VideoService.isConnected();
-
-  const videoSettings = Settings.dataSaving;
-  const enableShare = !videoSettings.viewParticipantsWebcams;
-  const meeting = Meetings.findOne({ meetingId: Auth.meetingID });
-  const LockCam = meeting.lockSettingsProp ? meeting.lockSettingsProp.disableCam : false;
-  const webcamOnlyModerator = meeting.usersProp.webcamsOnlyForModerator;
-
-  const user = Users.findOne({ userId: Auth.userID });
-  const userLocked = mapUser(user).isLocked;
-
-  return {
-    isSharingVideo,
-    isWaitingResponse,
-    isConnected,
-    enableShare,
-    handleJoinVideo: params.handleJoinVideo,
-    handleCloseVideo: params.handleCloseVideo,
-    isLocked: (LockCam && userLocked) || webcamOnlyModerator,
-  };
-})(JoinVideoOptionsContainer);
diff --git a/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/service.js b/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/service.js
deleted file mode 100644
index 92a58cd21afc50dac0196a3d19d325fea668e125..0000000000000000000000000000000000000000
--- a/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/service.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import Users from '/imports/api/users';
-import Auth from '/imports/ui/services/auth/index';
-
-const isSharingVideo = () => {
-  const userId = Auth.userID;
-  const user = Users.findOne({ userId: userId });
-  return user.has_stream ? true : false;
-};
-
-export default {
-  isSharingVideo
-};
diff --git a/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/styles.scss b/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/styles.scss
deleted file mode 100644
index d96d5b04cb239b7ba3059b86aaa292c89392e84d..0000000000000000000000000000000000000000
--- a/bigbluebutton-html5/imports/ui/components/video-dock/video-menu/styles.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-.container {
-
-  span:first-child{
-    box-shadow: 0 2px 5px 0 rgb(0, 0, 0);
-  }
-
-}
-
-.button {
-
-  &:focus {
-    outline: none !important;
-  }
-
-}
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..3c26359ea1570b7f9c9a7fa8ec19264948293a25
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx
@@ -0,0 +1,446 @@
+import React, { Component } from 'react';
+import { styles } from './styles';
+import { defineMessages, injectIntl } from 'react-intl';
+import { log } from '/imports/ui/services/api';
+import { notify } from '/imports/ui/services/notification';
+import { toast } from 'react-toastify';
+import Toast from '/imports/ui/components/toast/component';
+import _ from 'lodash';
+
+import VideoService from './service';
+import VideoDockContainer from './video-dock/container';
+
+const intlMessages = defineMessages({
+  iceCandidateError: {
+    id: 'app.video.iceCandidateError',
+    description: 'Error message for ice candidate fail',
+  },
+  permissionError: {
+    id: 'app.video.permissionError',
+    description: 'Error message for webcam permission',
+  },
+  sharingError: {
+    id: 'app.video.sharingError',
+    description: 'Error on sharing webcam',
+  },
+  chromeExtensionError: {
+    id: 'app.video.chromeExtensionError',
+    description: 'Error message for Chrome Extension not installed',
+  },
+  chromeExtensionErrorLink: {
+    id: 'app.video.chromeExtensionErrorLink',
+    description: 'Error message for Chrome Extension not installed',
+  },
+});
+
+const RECONNECT_WAIT_TIME = 5000;
+const CAMERA_SHARE_FAILED_WAIT_TIME = 10000;
+
+class VideoProvider extends Component {
+  constructor(props) {
+    super(props);
+
+    this.state = {
+      sharedWebcam: false,
+      socketOpen: false,
+    };
+
+    // Set a valid bbb-webrtc-sfu application server socket in the settings
+    this.ws = new ReconnectingWebSocket(Meteor.settings.public.kurento.wsUrl);
+    this.wsQueue = [];
+
+    this.reconnectWebcam = false;
+    this.cameraTimeouts = {};
+    this.webRtcPeers = {};
+
+    this.onWsOpen = this.onWsOpen.bind(this);
+    this.onWsClose = this.onWsClose.bind(this);
+    this.onWsMessage = this.onWsMessage.bind(this);
+
+    this.unshareWebcam = this.unshareWebcam.bind(this);
+    this.shareWebcam = this.shareWebcam.bind(this);
+  }
+
+  componentWillMount() {
+    this.ws.addEventListener('open', this.onWsOpen);
+    this.ws.addEventListener('close', this.onWsClose);
+
+    window.addEventListener('online', this.ws.open.bind(this.ws));
+    window.addEventListener('offline', this.onWsClose);
+  }
+
+  componentDidMount() {
+    document.addEventListener('joinVideo', this.shareWebcam.bind(this)); // TODO find a better way to do this
+    document.addEventListener('exitVideo', this.unshareWebcam.bind(this));
+
+    this.ws.addEventListener('message', this.onWsMessage);
+  }
+
+  componentWillUnmount() {
+    document.removeEventListener('joinVideo', this.shareWebcam);
+    document.removeEventListener('exitVideo', this.unshareWebcam);
+
+    this.ws.removeEventListener('message', this.onWsMessage);
+    this.ws.removeEventListener('open', this.onWsOpen);
+    this.ws.removeEventListener('close', this.onWsClose);
+
+    window.removeEventListener('online', this.ws.open.bind(this.ws));
+    window.removeEventListener('offline', this.onWsClose);
+
+    // Unshare user webcam
+    if (this.state.sharedWebcam) {
+      this.unshareWebcam();
+      this.stop(this.props.userId);
+    }
+
+    Object.keys(this.webRtcPeers).forEach((id) => {
+      this.destroyWebRTCPeer(id);
+    });
+
+    // Close websocket connection to prevent multiple reconnects from happening
+    this.ws.close();
+  }
+
+  onWsOpen() {
+    log('debug', '------ Websocket connection opened.');
+
+    // -- Resend queued messages that happened when socket was not connected
+    while (this.wsQueue.length > 0) {
+      this.sendMessage(this.wsQueue.pop());
+    }
+
+    this.setState({ socketOpen: true });
+  }
+
+  onWsClose(error) {
+    log('debug', '------ Websocket connection closed.');
+
+    this.unshareWebcam();
+    VideoService.exitedVideo();
+
+    this.setState({ socketOpen: false });
+  }
+
+  disconnected(id) {
+    this.reconnectList.push(id);
+
+    log('debug', ` [camera] ${id} disconnected, will try re-subscribe later.`);
+  }
+
+  onWsMessage(msg) {
+    const { intl } = this.props;
+    const parsedMessage = JSON.parse(msg.data);
+
+    console.log('Received message new ws message: ');
+    console.log(parsedMessage);
+
+    switch (parsedMessage.id) {
+      case 'startResponse':
+        this.startResponse(parsedMessage);
+        break;
+
+      case 'playStart':
+        this.handlePlayStart(parsedMessage);
+        break;
+
+      case 'playStop':
+        this.handlePlayStop(parsedMessage);
+
+        break;
+
+      case 'iceCandidate':
+        this.handleIceCandidate(parsedMessage);
+        break;
+
+      case 'error':
+      default:
+        this.handleError(parsedMessage);
+        break;
+    }
+  }
+
+  sendMessage(message) {
+    const ws = this.ws;
+
+    if (this.connectedToMediaServer()) {
+      const jsonMessage = JSON.stringify(message);
+      console.log(`Sending message: ${jsonMessage}`);
+      ws.send(jsonMessage, (error) => {
+        if (error) {
+          console.error(`client: Websocket error "${error}" on message "${jsonMessage.id}"`);
+        }
+      });
+    } else {
+      // No need to queue video stop messages
+      if (message.id != 'stop') {
+        this.wsQueue.push(message);
+      }
+    }
+  }
+
+  connectedToMediaServer() {
+    return this.ws.readyState === WebSocket.OPEN;
+  }
+
+  startResponse(message) {
+    const id = message.cameraId;
+    const webRtcPeer = this.webRtcPeers[id];
+
+    if (message.sdpAnswer == null || webRtcPeer == null) {
+      return log('debug', 'Null sdp answer or null webrtcpeer');
+    }
+
+    log('info', 'SDP answer received from server. Processing ...');
+
+    webRtcPeer.processAnswer(message.sdpAnswer, (error) => {
+      if (error) {
+        return log('error', error);
+      }
+
+      if (message.cameraId == this.props.userId) {
+        log('info', 'camera id sendusershare ', id);
+        VideoService.sendUserShareWebcam(id);
+      }
+    });
+  }
+
+  handleIceCandidate(message) {
+    const { intl } = this.props;
+    const webRtcPeer = this.webRtcPeers[message.cameraId];
+
+    if (webRtcPeer) {
+      if (webRtcPeer.didSDPAnswered) {
+        webRtcPeer.addIceCandidate(message.candidate, (err) => {
+          if (err) {
+            this.notifyError(intl.formatMessage(intlMessages.iceCandidateError));
+            return log('error', `Error adding candidate: ${err}`);
+          }
+        });
+      } else {
+        webRtcPeer.iceQueue.push(message.candidate);
+      }
+    } else {
+      log('error', ' [ICE] Message arrived after the peer was already thrown out, discarding it...');
+    }
+  }
+
+  destroyWebRTCPeer(id) {
+    const webRtcPeer = this.webRtcPeers[id];
+
+    // Clear the shared camera fail timeout when destroying
+    clearTimeout(this.cameraTimeouts[id]);
+    this.cameraTimeouts[id] = null;
+
+    if (webRtcPeer) {
+      log('info', 'Stopping WebRTC peer');
+
+      if (id == this.props.userId && this.state.sharedWebcam) {
+        this.setState({ sharedWebcam: false });
+      }
+
+      webRtcPeer.dispose();
+      delete this.webRtcPeers[id];
+    } else {
+      log('info', 'No WebRTC peer to stop (not an error)');
+    }
+  }
+
+  initWebRTC(id, shareWebcam, videoOptions, tag) {
+    const that = this;
+    const { intl, meetingId } = this.props;
+
+    const options = {
+      mediaConstraints: {
+        audio: false,
+        video: videoOptions,
+      },
+      onicecandidate: this.getOnIceCandidateCallback(id, shareWebcam),
+    };
+
+    let peerObj;
+    if (shareWebcam) {
+      peerObj = kurentoUtils.WebRtcPeer.WebRtcPeerSendonly;
+      options.localVideo = tag;
+    } else {
+      peerObj = kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly;
+      options.remoteVideo = tag;
+    }
+
+    this.cameraTimeouts[id] = setTimeout(() => {
+      log('error', `Camera share has not suceeded in ${CAMERA_SHARE_FAILED_WAIT_TIME}`);
+      if (this.props.userId == id) {
+        this.notifyError(intl.formatMessage(intlMessages.sharingError));
+        this.unshareWebcam();
+      } else {
+        this.stop(id);
+        this.initWebRTC(id, shareWebcam, videoOptions, tag);
+      }
+    }, CAMERA_SHARE_FAILED_WAIT_TIME);
+
+    const webRtcPeer = new peerObj(options, function (error) {
+      if (error) {
+        log('error', ' WebRTC peerObj create error');
+        log('error', error);
+        that.notifyError(intl.formatMessage(intlMessages.permissionError));
+        /* This notification error is displayed considering kurento-utils
+         * returned the error 'The request is not allowed by the user agent
+         * or the platform in the current context.', but there are other
+         * errors that could be returned. */
+
+        that.destroyWebRTCPeer(id);
+
+        if (shareWebcam) {
+          VideoService.exitVideo();
+          VideoService.exitedVideo();
+          that.unshareWebcam();
+        }
+        return log('error', error);
+      }
+
+      this.didSDPAnswered = false;
+      this.iceQueue = [];
+
+      that.webRtcPeers[id] = webRtcPeer;
+      if (shareWebcam) {
+        that.sharedWebcam = webRtcPeer;
+      }
+
+      this.generateOffer((error, offerSdp) => {
+        if (error) {
+          log('error', ' WebRtc generate offer error');
+
+          that.destroyWebRTCPeer(id);
+          return log('error', error);
+        }
+
+        console.log(`Invoking SDP offer callback function ${location.host}`);
+        const message = {
+          type: 'video',
+          role: shareWebcam ? 'share' : 'viewer',
+          id: 'start',
+          sdpOffer: offerSdp,
+          cameraId: id,
+          meetingId,
+        };
+        that.sendMessage(message);
+      });
+      while (this.iceQueue.length) {
+        const candidate = this.iceQueue.shift();
+        this.addIceCandidate(candidate, (err) => {
+          if (err) {
+            this.notifyError(intl.formatMessage(intlMessages.iceCandidateError));
+            return console.error(`Error adding candidate: ${err}`);
+          }
+        });
+      }
+      this.didSDPAnswered = true;
+    });
+  }
+
+  getOnIceCandidateCallback(id, shareWebcam) {
+    const that = this;
+
+    return function (candidate) {
+      const message = {
+        type: 'video',
+        role: shareWebcam ? 'share' : 'viewer',
+        id: 'onIceCandidate',
+        candidate,
+        cameraId: id,
+      };
+      that.sendMessage(message);
+    };
+  }
+
+  stop(id) {
+    const userId = this.props.userId;
+
+    if (id === userId) {
+      this.sendMessage({
+        type: 'video',
+        role: id == userId ? 'share' : 'viewer',
+        id: 'stop',
+        cameraId: id,
+      });
+
+      this.unshareWebcam();
+      VideoService.exitedVideo();
+    }
+
+    this.destroyWebRTCPeer(id);
+  }
+
+  handlePlayStop(message) {
+    const id = message.cameraId;
+    log('info', 'Handle play stop <--------------------');
+    log('error', message);
+
+    this.stop(id);
+  }
+
+  handlePlayStart(message) {
+    log('info', 'Handle play start <===================');
+
+    // Clear camera shared timeout when camera succesfully starts
+    clearTimeout(this.cameraTimeouts[message.cameraId]);
+    this.cameraTimeouts[message.cameraId] = null;
+
+    if (message.cameraId == this.props.userId) {
+      VideoService.joinedVideo();
+    }
+  }
+
+  handleError(message) {
+    const { intl } = this.props;
+    const userId = this.props.userId;
+
+    if (message.cameraId == userId) {
+      this.unshareWebcam();
+      this.notifyError(intl.formatMessage(intlMessages.sharingError));
+    } else {
+      this.stop(message.cameraId);
+    }
+
+    console.error(' Handle error --------------------->');
+    log('debug', message.message);
+  }
+
+  notifyError(message) {
+    notify(message, 'error', 'video');
+  }
+
+  shareWebcam() {
+    let { intl } = this.props;
+    log('info', 'Sharing webcam');
+
+    if (this.connectedToMediaServer()) {
+      this.setState({ sharedWebcam: true });
+      VideoService.joiningVideo();
+    } else {
+      this.notifyError(intl.formatMessage(intlMessages.sharingError));
+    }
+  }
+
+  unshareWebcam() {
+    log('info', 'Unsharing webcam');
+
+    this.setState({ ...this.state, sharedWebcam: false });
+
+    VideoService.sendUserUnshareWebcam(this.props.userId);
+  }
+
+  render() {
+    return (
+      <VideoDockContainer
+        onStart={this.initWebRTC.bind(this)}
+        onStop={this.stop.bind(this)}
+        sharedWebcam={this.state.sharedWebcam}
+        onShareWebcam={this.shareWebcam.bind(this)}
+        socketOpen={this.state.socketOpen}
+        isLocked={this.props.isLocked}
+      />
+    );
+  }
+}
+
+export default injectIntl(VideoProvider);
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/container.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/container.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..3826341cd8a30f7e137d8fe45a01bb8996175432
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/container.jsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import { withTracker } from 'meteor/react-meteor-data';
+import VideoProvider from './component';
+import VideoService from './service';
+
+const VideoProviderContainer = ({ children, ...props }) => <VideoProvider {...props}>{children}</VideoProvider>;
+
+export default withTracker(() => ({
+  isLocked: VideoService.isLocked(),
+  meetingId: VideoService.meetingId(),
+  userId: VideoService.userId(),
+}))(VideoProviderContainer);
diff --git a/bigbluebutton-html5/imports/ui/components/video-dock/service.js b/bigbluebutton-html5/imports/ui/components/video-provider/service.js
similarity index 73%
rename from bigbluebutton-html5/imports/ui/components/video-dock/service.js
rename to bigbluebutton-html5/imports/ui/components/video-provider/service.js
index c6cdaddd11cca8b10f2504574583d0cfe5b2bccc..5d98a27769bba529c811191894434bcdd63e3b6b 100644
--- a/bigbluebutton-html5/imports/ui/components/video-dock/service.js
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/service.js
@@ -1,6 +1,7 @@
 import { Tracker } from 'meteor/tracker';
 import { makeCall } from '/imports/ui/services/api';
 import Users from '/imports/api/users';
+import Meetings from '/imports/api/meetings/';
 import Auth from '/imports/ui/services/auth';
 
 class VideoService {
@@ -33,7 +34,7 @@ class VideoService {
   }
 
   joinVideo() {
-    var joinVideoEvent = new Event('joinVideo');
+    const joinVideoEvent = new Event('joinVideo');
     document.dispatchEvent(joinVideoEvent);
   }
 
@@ -47,7 +48,7 @@ class VideoService {
   }
 
   exitVideo() {
-    var exitVideoEvent = new Event('exitVideo');
+    const exitVideoEvent = new Event('exitVideo');
     document.dispatchEvent(exitVideoEvent);
   }
 
@@ -56,11 +57,6 @@ class VideoService {
     this.isConnected = false;
   }
 
-  resetState() {
-    this.isWaitingResponse = false;
-    this.isConnected = false;
-  }
-
   sendUserShareWebcam(stream) {
     makeCall('userShareWebcam', stream);
   }
@@ -74,10 +70,24 @@ class VideoService {
     return Users.find().fetch();
   }
 
+  webcamOnlyModerator() {
+    const m = Meetings.findOne({meetingId: Auth.meetingID});
+    return m.usersProp.webcamsOnlyForModerator;
+  }
+
+  isLocked() {
+    const m = Meetings.findOne({meetingId: Auth.meetingID});
+    return m.lockSettingsProp ? m.lockSettingsProp.disableCam : false;
+  }
+
   userId() {
     return Auth.userID;
   }
 
+  meetingId() {
+    return Auth.meetingID;
+  }
+
   isConnected() {
     return this.isConnected;
   }
@@ -94,13 +104,15 @@ export default {
   exitingVideo: () => videoService.exitingVideo(),
   exitedVideo: () => videoService.exitedVideo(),
   getAllUsers: () => videoService.getAllUsers(),
+  webcamOnlyModerator: () => videoService.webcamOnlyModerator(),
+  isLocked:    () => videoService.isLocked(),
   isConnected: () => videoService.isConnected,
   isWaitingResponse: () => videoService.isWaitingResponse,
   joinVideo: () => videoService.joinVideo(),
   joiningVideo: () => videoService.joiningVideo(),
   joinedVideo: () => videoService.joinedVideo(),
-  resetState: () => videoService.resetState(),
-  sendUserShareWebcam: (stream) => videoService.sendUserShareWebcam(stream),
-  sendUserUnshareWebcam: (stream) => videoService.sendUserUnshareWebcam(stream),
+  sendUserShareWebcam: stream => videoService.sendUserShareWebcam(stream),
+  sendUserUnshareWebcam: stream => videoService.sendUserUnshareWebcam(stream),
   userId: () => videoService.userId(),
+  meetingId: () => videoService.meetingId(),
 };
diff --git a/bigbluebutton-html5/imports/ui/components/video-dock/styles.scss b/bigbluebutton-html5/imports/ui/components/video-provider/styles.scss
similarity index 100%
rename from bigbluebutton-html5/imports/ui/components/video-dock/styles.scss
rename to bigbluebutton-html5/imports/ui/components/video-provider/styles.scss
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-dock/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-dock/component.jsx
new file mode 100755
index 0000000000000000000000000000000000000000..fb9335de360be7b1dd209779410cb1529af75ba4
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-dock/component.jsx
@@ -0,0 +1,105 @@
+import React, { Component } from 'react';
+import { styles } from '../styles';
+import { defineMessages, injectIntl } from 'react-intl';
+import { log } from '/imports/ui/services/api';
+import { notify } from '/imports/ui/services/notification';
+import { toast } from 'react-toastify';
+import { styles as mediaStyles } from '/imports/ui/components/media/styles';
+import Toast from '/imports/ui/components/toast/component';
+import _ from 'lodash';
+
+import VideoElement from '../video-element/component';
+
+const intlMessages = defineMessages({
+  chromeExtensionError: {
+    id: 'app.video.chromeExtensionError',
+    description: 'Error message for Chrome Extension not installed',
+  },
+  chromeExtensionErrorLink: {
+    id: 'app.video.chromeExtensionErrorLink',
+    description: 'Error message for Chrome Extension not installed',
+  },
+});
+
+class VideoDock extends Component {
+  constructor(props) {
+    super(props);
+
+    this.state = {};
+  }
+
+  componentDidMount() {
+    const { users, userId } = this.props;
+
+    document.addEventListener('installChromeExtension', this.installChromeExtension.bind(this));
+
+    window.addEventListener('resize', this.adjustVideos);
+    window.addEventListener('orientationchange', this.adjustVideos);
+  }
+
+  componentWillUnmount() {
+    window.removeEventListener('resize', this.adjustVideos);
+    window.removeEventListener('orientationchange', this.adjustVideos);
+    document.removeEventListener('installChromeExtension', this.installChromeExtension.bind(this));
+  }
+
+  componentDidUpdate() {
+    this.adjustVideos();
+  }
+
+  notifyError(message) {
+    notify(message, 'error', 'video');
+  }
+
+  installChromeExtension() {
+    console.log(intlMessages);
+    const { intl } = this.props;
+    const CHROME_EXTENSION_LINK = Meteor.settings.public.kurento.chromeExtensionLink;
+
+    this.notifyError(<div>
+      {intl.formatMessage(intlMessages.chromeExtensionError)}{' '}
+      <a href={CHROME_EXTENSION_LINK} target="_blank">
+        {intl.formatMessage(intlMessages.chromeExtensionErrorLink)}
+      </a>
+    </div>);
+  }
+
+  // TODO
+  // Find a better place to put this piece of code
+  adjustVideos() {
+    setTimeout(() => {
+      window.adjustVideos('webcamArea', true, mediaStyles.moreThan4Videos, mediaStyles.container, mediaStyles.overlayWrapper, 'presentationAreaData', 'screenshareVideo');
+    }, 0);
+  }
+
+  render() {
+    if (!this.props.socketOpen) {
+      // TODO: return something when disconnected
+      return null;
+    }
+
+    const id = this.props.userId;
+    const sharedWebcam = this.props.sharedWebcam;
+
+    return (
+      <div className={styles.videoDock} id={this.props.sharedWebcam.toString()}>
+        <div id="webcamArea" className={styles.webcamArea}>
+          {this.props.users.map(user => (
+            <VideoElement
+              shared={id === user.userId && sharedWebcam}
+              videoId={user.userId}
+              key={user.userId}
+              name={user.name}
+              localCamera={id === user.userId}
+              onShareWebcam={this.props.onShareWebcam.bind(this)}
+              onMount={this.props.onStart.bind(this)}
+              onUnmount={this.props.onStop.bind(this)}
+            />
+          ))}
+        </div>
+      </div>
+    );
+  }
+}
+
+export default injectIntl(VideoDock);
diff --git a/bigbluebutton-html5/imports/ui/components/video-dock/container.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-dock/container.jsx
similarity index 51%
rename from bigbluebutton-html5/imports/ui/components/video-dock/container.jsx
rename to bigbluebutton-html5/imports/ui/components/video-provider/video-dock/container.jsx
index 313b06b743374136e34e804d1213517bc5d76a5c..1f23af5bbe73ec003a8400fd37a9de1d95b1baef 100644
--- a/bigbluebutton-html5/imports/ui/components/video-dock/container.jsx
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-dock/container.jsx
@@ -1,23 +1,34 @@
 import React from 'react';
 import { withTracker } from 'meteor/react-meteor-data';
 import Auth from '/imports/ui/services/auth';
-import mapUser from '../../services/user/mapUser';
+import mapUser from '../../../services/user/mapUser';
 import Meetings from '/imports/api/meetings/';
 import Users from '/imports/api/users/';
 import VideoDock from './component';
-import VideoService from './service';
+import VideoService from '../service';
 
 const VideoDockContainer = ({ children, ...props }) => <VideoDock {...props}>{children}</VideoDock>;
 
-export default withTracker(() => {
+export default withTracker(({sharedWebcam}) => {
   const meeting = Meetings.findOne({ meetingId: Auth.meetingID });
   const lockCam = meeting.lockSettingsProp ? meeting.lockSettingsProp.disableCam : false;
-  const user = Users.findOne({ userId: Auth.userID });
+  const userId = Auth.userID;
+  const user = Users.findOne({ userId });
   const userLocked = mapUser(user).isLocked;
 
+  const withActiveStreams = (users) => {
+    const activeFilter = (user) => {
+      const isLocked = lockCam && user.locked;
+      return !isLocked && (user.has_stream || (sharedWebcam && user.userId == userId));
+    };
+
+    return users.filter(activeFilter);
+  }
+
+  const users = withActiveStreams(VideoService.getAllUsers());
+
   return {
-    users: VideoService.getAllUsers(),
-    userId: VideoService.userId(),
-    isLocked: userLocked && lockCam,
+    users,
+    userId
   };
 })(VideoDockContainer);
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-element/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-element/component.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..2fe8e6ba5ecebf5fb5bf86c9e8e09b61538e8c44
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-element/component.jsx
@@ -0,0 +1,68 @@
+import React, { Component } from 'react';
+import cx from 'classnames';
+import { styles } from '../styles';
+
+class VideoElement extends Component {
+  constructor(props) {
+    super(props);
+  }
+
+  render() {
+    const tagId = this.props.localCamera ? 'shareWebcam' : `video-elem-${this.props.videoId}`;
+
+    return (
+      <div className={cx({
+        [styles.videoContainer]: true,
+        [styles.sharedWebcamVideo]: !this.props.shared && this.props.localCamera,
+        [styles.sharedWebcamVideoLocal]: this.props.shared || !this.props.localCamera })}>
+
+        <video id={tagId} muted={this.props.localCamera} autoPlay playsInline />
+        <div className={styles.videoText}>
+          <div className={styles.userName}>{this.props.name}</div>
+        </div>
+      </div>
+    );
+  }
+
+  componentDidMount() {
+    const { videoId, localCamera } = this.props;
+
+    const tagId = localCamera ? 'shareWebcam' : `video-elem-${videoId}`;
+    const tag = document.getElementById(tagId);
+
+    if (localCamera && this.props.onShareWebcam === 'function') {
+      this.props.onShareWebcam();
+    }
+
+    if (typeof this.props.onMount === 'function') {
+      this.props.onMount(videoId, localCamera, this.getVideoConstraints(), tag);
+    }
+  }
+
+  componentWillUnmount() {
+    if (typeof this.props.onUnmount === 'function') {
+      this.props.onUnmount(this.props.videoId);
+    }
+  }
+
+  getVideoConstraints() {
+    let videoConstraints = {
+      width: {
+        min: 320,
+        max: 640,
+      },
+      height: {
+        min: 240,
+        max: 480,
+      },
+    };
+
+    if (!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)) {
+      videoConstraints.frameRate = { min: 5, ideal: 10, };
+    }
+
+    return videoConstraints;
+  }
+}
+
+export default VideoElement;
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/component.jsx
new file mode 100755
index 0000000000000000000000000000000000000000..48d263e92e8c996a4339dca63d7e8cbe63b68f71
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/component.jsx
@@ -0,0 +1,76 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import _ from 'lodash';
+import Button from '/imports/ui/components/button/component';
+import { defineMessages, injectIntl, intlShape } from 'react-intl';
+import Dropdown from '/imports/ui/components/dropdown/component';
+import DropdownTrigger from '/imports/ui/components/dropdown/trigger/component';
+import DropdownContent from '/imports/ui/components/dropdown/content/component';
+import DropdownList from '/imports/ui/components/dropdown/list/component';
+import DropdownListItem from '/imports/ui/components/dropdown/list/item/component';
+import { styles } from './styles';
+
+const intlMessages = defineMessages({
+  videoMenu: {
+    id: 'app.video.videoMenu',
+    description: 'video menu label',
+  },
+  videoMenuDesc: {
+    id: 'app.video.videoMenuDesc',
+    description: 'video menu description',
+  },
+});
+
+
+const propTypes = {
+  intl: intlShape.isRequired,
+  isSharingVideo: PropTypes.bool.isRequired,
+  videoItems: PropTypes.arrayOf(PropTypes.object).isRequired,
+};
+
+const JoinVideoOptions = ({
+  intl,
+  isSharingVideo,
+  videoItems,
+}) => {
+  const menuItems = videoItems
+    .filter(item => !item.disabled)
+    .map(item =>
+      (
+        <DropdownListItem
+          key={_.uniqueId('video-menu-')}
+          className={styles.item}
+          description={item.description}
+          onClick={item.click}
+          tabIndex={-1}
+        >
+          <img src={item.iconPath} className={styles.imageSize} alt="video menu icon" />
+          <span className={styles.label}>{item.label}</span>
+        </DropdownListItem>
+      ));
+  return (
+    <Dropdown
+      autoFocus
+    >
+      <DropdownTrigger tabIndex={0}>
+        <Button
+          label={intl.formatMessage(intlMessages.videoMenu)}
+          onClick={() => null}
+          hideLabel
+          aria-label={intl.formatMessage(intlMessages.videoMenuDesc)}
+          color={isSharingVideo ? 'danger' : 'primary'}
+          icon={isSharingVideo ? 'video_off' : 'video'}
+          size="lg"
+          circle
+        />
+      </DropdownTrigger>
+      <DropdownContent placement="top" >
+        <DropdownList horizontal>
+          {menuItems}
+        </DropdownList>
+      </DropdownContent>
+    </Dropdown>
+  );
+};
+JoinVideoOptions.propTypes = propTypes;
+export default injectIntl(JoinVideoOptions);
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/container.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/container.jsx
new file mode 100755
index 0000000000000000000000000000000000000000..36ded78826585bf2cfa3597c90e653d2f69f9a3b
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/container.jsx
@@ -0,0 +1,68 @@
+import React from 'react';
+import { withTracker } from 'meteor/react-meteor-data';
+import { defineMessages, injectIntl } from 'react-intl';
+import JoinVideoOptions from './component';
+import VideoMenuService from './service';
+
+const intlMessages = defineMessages({
+  joinVideo: {
+    id: 'app.video.joinVideo',
+    description: 'Join video button label',
+  },
+  leaveVideo: {
+    id: 'app.video.leaveVideo',
+    description: 'Leave video button label',
+  },
+  swapCam: {
+    id: 'app.video.swapCam',
+    description: 'Swap cam button label',
+  },
+  swapCamDesc: {
+    id: 'app.video.swapCamDesc',
+    description: 'Swap cam button description',
+  },
+});
+
+const JoinVideoOptionsContainer = (props) => {
+  const {
+    isSharingVideo,
+    isDisabled,
+    handleJoinVideo,
+    handleCloseVideo,
+    baseName,
+    intl,
+    ...restProps
+  } = props;
+
+  const videoItems = [
+    {
+      iconPath: `${baseName}/resources/images/video-menu/icon-swap.svg`,
+      description: intl.formatMessage(intlMessages.swapCamDesc),
+      label: intl.formatMessage(intlMessages.swapCam),
+      disabled: false,
+      click: () => {},
+    },
+    {
+      iconPath: `${baseName}/resources/images/video-menu/icon-webcam-off.svg`,
+      description: intl.formatMessage(intlMessages[isSharingVideo ? 'leaveVideo' : 'joinVideo']),
+      label: intl.formatMessage(intlMessages[isSharingVideo ? 'leaveVideo' : 'joinVideo']),
+      disabled: isDisabled,
+      click: isSharingVideo ? handleCloseVideo : handleJoinVideo,
+    },
+  ];
+
+  return <JoinVideoOptions {...{ videoItems, isSharingVideo, ...restProps }} />;
+};
+
+export default injectIntl(withTracker(({
+  intl,
+  handleJoinVideo,
+  handleCloseVideo,
+}) => ({
+  baseName: VideoMenuService.baseName,
+  isSharingVideo: VideoMenuService.isSharingVideo(),
+  isDisabled: VideoMenuService.isDisabled(),
+  handleJoinVideo,
+  handleCloseVideo,
+  intl,
+}))(JoinVideoOptionsContainer));
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/service.js b/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/service.js
new file mode 100755
index 0000000000000000000000000000000000000000..474c13168bd7b1396509aa30c200519223790d8b
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/service.js
@@ -0,0 +1,39 @@
+import Settings from '/imports/ui/services/settings';
+import mapUser from '/imports/ui/services/user/mapUser';
+import Auth from '/imports/ui/services/auth';
+import Users from '/imports/api/users/';
+import VideoService from '../service';
+
+const baseName = Meteor.settings.public.app.basename;
+
+const isSharingVideo = () => {
+  const userId = Auth.userID;
+  const user = Users.findOne({ userId });
+  return !!user.has_stream;
+};
+
+const isDisabled = () => {
+  const isWaitingResponse = VideoService.isWaitingResponse();
+  const isConnected = VideoService.isConnected();
+
+  const videoSettings = Settings.dataSaving;
+  const enableShare = !videoSettings.viewParticipantsWebcams;
+  const LockCam = VideoService.isLocked()
+  const webcamOnlyModerator = VideoService.webcamOnlyModerator();
+  const user = Users.findOne({ userId: Auth.userID });
+  const userLocked = mapUser(user).isLocked;
+
+  const isConnecting = (!isSharingVideo && isConnected);
+  const isLocked = (LockCam && userLocked) || webcamOnlyModerator;
+
+  return isLocked
+      || isWaitingResponse
+      || isConnecting
+      || enableShare;
+};
+
+export default {
+  isSharingVideo,
+  isDisabled,
+  baseName,
+};
diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/styles.scss b/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/styles.scss
new file mode 100755
index 0000000000000000000000000000000000000000..cdb5f1c8d4d274db1445dd8d2962d2c302d5a31b
--- /dev/null
+++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-menu/styles.scss
@@ -0,0 +1,48 @@
+@import "/imports/ui/stylesheets/variables/_all";
+
+.container {
+
+  span:first-child{
+    box-shadow: 0 2px 5px 0 rgb(0, 0, 0);
+  }
+
+}
+
+.button {
+
+  &:focus {
+    outline: none !important;
+  }
+
+}
+
+.imageSize {
+  height: 4rem;
+  @include mq($small-only) {
+    margin: auto 1rem;
+  };
+}
+
+.label {
+  font-size: $font-size-small;
+  white-space: nowrap;
+  margin-top: .5rem;
+  color: $color-gray;
+  @include mq($small-only) {
+    margin-top: 0;
+    color: #06172A;
+    font-size: 90%;
+  };
+}
+
+.item {
+  padding-left: 0;
+  display: flex;
+  justify-content: flex-start;
+  flex-direction: column;
+  align-items: center;
+  margin: auto 0.25rem;
+  @include mq($small-only) {
+    flex-direction: row;
+  };
+}
diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-toolbar/component.jsx b/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-toolbar/component.jsx
old mode 100644
new mode 100755
index bbe79fb38470efde1716394c0aece1d5b3a9a428..22cd0fce1b633e128892c0db2678113fdab1243c
--- a/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-toolbar/component.jsx
+++ b/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-toolbar/component.jsx
@@ -24,10 +24,18 @@ const intlMessages = defineMessages({
     id: 'app.whiteboard.toolbar.thickness',
     description: 'Whiteboard toolbar thickness menu',
   },
+  toolbarLineThicknessDisabled: {
+    id: 'app.whiteboard.toolbar.thicknessDisabled',
+    description: 'Whiteboard toolbar thickness menu',
+  },
   toolbarLineColor: {
     id: 'app.whiteboard.toolbar.color',
     description: 'Whiteboard toolbar colors menu',
   },
+  toolbarLineColorDisabled: {
+    id: 'app.whiteboard.toolbar.colorDisabled',
+    description: 'Whiteboard toolbar colors menu',
+  },
   toolbarUndoAnnotation: {
     id: 'app.whiteboard.toolbar.undo',
     description: 'Whiteboard toolbar tools menu',
@@ -364,13 +372,15 @@ class WhiteboardToolbar extends Component {
 
   renderThicknessItem() {
     const { intl } = this.props;
-
+    const isDisabled = this.state.annotationSelected.value === 'hand';
     return (
       <ToolbarMenuItem
-        disabled={this.state.annotationSelected.value === 'hand'}
-        label={intl.formatMessage(intlMessages.toolbarLineThickness)}
+        disabled={isDisabled}
+        label={isDisabled ?
+          intl.formatMessage(intlMessages.toolbarLineThicknessDisabled)
+          : intl.formatMessage(intlMessages.toolbarLineThickness)}
         onItemClick={this.displaySubMenu}
-        objectToReturn={'thicknessList'}
+        objectToReturn="thicknessList"
         onBlur={this.closeSubMenu}
         className={cx(styles.toolbarButton, this.state.currentSubmenuOpen === 'thicknessList' ? '' : styles.notActive)}
         customIcon={this.renderThicknessItemIcon()}
@@ -430,13 +440,15 @@ class WhiteboardToolbar extends Component {
 
   renderColorItem() {
     const { intl } = this.props;
-
+    const isDisabled = this.state.annotationSelected.value === 'hand';
     return (
       <ToolbarMenuItem
-        disabled={this.state.annotationSelected.value === 'hand'}
-        label={intl.formatMessage(intlMessages.toolbarLineColor)}
+        disabled={isDisabled}
+        label={isDisabled ?
+          intl.formatMessage(intlMessages.toolbarLineColorDisabled)
+          : intl.formatMessage(intlMessages.toolbarLineColor)}
         onItemClick={this.displaySubMenu}
-        objectToReturn={'colorList'}
+        objectToReturn="colorList"
         onBlur={this.closeSubMenu}
         className={cx(styles.toolbarButton, this.state.currentSubmenuOpen === 'colorList' ? '' : styles.notActive)}
         customIcon={this.renderColorItemIcon()}
@@ -467,7 +479,7 @@ class WhiteboardToolbar extends Component {
             attributeType="XML"
             from={this.state.prevColorSelected.value}
             to={this.state.colorSelected.value}
-            begin={'indefinite'}
+            begin="indefinite"
             dur={TRANSITION_DURATION}
             repeatCount="0"
             fill="freeze"
diff --git a/bigbluebutton-html5/imports/ui/services/auth/index.js b/bigbluebutton-html5/imports/ui/services/auth/index.js
index 49f576eac4856399953661aa6204ac2f67830812..08d639ca577cfcca617a6a916b2a5340562ec92f 100644
--- a/bigbluebutton-html5/imports/ui/services/auth/index.js
+++ b/bigbluebutton-html5/imports/ui/services/auth/index.js
@@ -125,13 +125,14 @@ class Auth {
       });
     }
 
-    return this.validateAuthToken();
+    this.loggedIn = false;
+    return this.validateAuthToken()
+      .then(() => { this.loggedIn = true; });
   }
 
   validateAuthToken() {
     return new Promise((resolve, reject) => {
       Meteor.connection.setUserId(`${this.meetingID}-${this.userID}`);
-
       let computation = null;
 
       const validationTimeout = setTimeout(() => {
@@ -144,9 +145,7 @@ class Auth {
 
       Tracker.autorun((c) => {
         computation = c;
-        const subscription = Meteor.subscribe('current-user', this.credentials);
-
-        if (!subscription.ready()) return;
+        Meteor.subscribe('current-user', this.credentials);
 
         const selector = { meetingId: this.meetingID, userId: this.userID };
         const User = Users.findOne(selector);
@@ -155,8 +154,6 @@ class Auth {
         if (!User || !('intId' in User)) return;
 
         if (User.ejected) {
-          this.loggedIn = false;
-
           reject({
             error: 401,
             description: 'User has been ejected.',
@@ -164,11 +161,11 @@ class Auth {
           return;
         }
 
-        if (User.validated === true) {
+        if (User.validated === true && User.connectionStatus === 'online') {
           computation.stop();
           clearTimeout(validationTimeout);
-          this.loggedIn = true;
-          resolve();
+          // setTimeout to prevent race-conditions with subscription
+          setTimeout(resolve, 100);
         }
       });
 
diff --git a/bigbluebutton-html5/private/config/settings-development.json b/bigbluebutton-html5/private/config/settings-development.json
old mode 100644
new mode 100755
index 722e93b17e0af9e0280fc8656e15e4968312cd03..c71de862148b314b2a67f3f907b0dcef30eabe63
--- a/bigbluebutton-html5/private/config/settings-development.json
+++ b/bigbluebutton-html5/private/config/settings-development.json
@@ -5,8 +5,9 @@
       "mobileFont": 16,
       "desktopFont": 14,
       "audioChatNotification": false,
-      "autoJoinAudio": true,
-      "listenOnly": false,
+      "autoJoin": true,
+      "listenOnlyMode": true,
+      "forceListenOnly": false,
       "skipCheck": false,
       "appName": "BigBlueButton HTML5 Client",
       "bbbServerVersion": "2.0-rc",
diff --git a/bigbluebutton-html5/private/config/settings-production.json b/bigbluebutton-html5/private/config/settings-production.json
index 09385bef721a142daa1c2a36f763e4fe5afc01be..f2d763b18133614a8651054faedf97c68ed37c09 100644
--- a/bigbluebutton-html5/private/config/settings-production.json
+++ b/bigbluebutton-html5/private/config/settings-production.json
@@ -5,8 +5,9 @@
       "mobileFont": 16,
       "desktopFont": 14,
       "audioChatNotification": false,
-      "autoJoinAudio": true,
-      "listenOnly": false,
+      "autoJoin": true,
+      "listenOnlyMode": true,
+      "forceListenOnly": false,
       "skipCheck": false,
       "appName": "BigBlueButton HTML5 Client",
       "bbbServerVersion": "2.0-rc",
diff --git a/bigbluebutton-html5/private/locales/de.json b/bigbluebutton-html5/private/locales/de.json
index 6c9fa5a87e757e15a653d4d80dd05c310372c6de..aa63759224d6a696911d0e3c48d57350b974bd0a 100644
--- a/bigbluebutton-html5/private/locales/de.json
+++ b/bigbluebutton-html5/private/locales/de.json
@@ -40,8 +40,8 @@
     "app.userList.menu.promoteUser.label": "{0} zum Moderator machen",
     "app.userList.menu.demoteUser.label": "{0} zum Zuschauer zurückstufen",
     "app.media.label": "Media",
-    "app.meeting.ended":"Diese Konferenz wurde beendet",
-    "app.meeting.endedMessage":"Sie werden zum Startbildschirm weitergeleitet",
+    "app.meeting.ended": "Diese Konferenz wurde beendet",
+    "app.meeting.endedMessage": "Sie werden zum Startbildschirm weitergeleitet",
     "app.presentation.presentationToolbar.prevSlideLabel": "Vorherige Folie",
     "app.presentation.presentationToolbar.prevSlideDesc": "Präsentation zur vorherigen Folie wechseln",
     "app.presentation.presentationToolbar.nextSlideLabel": "Nächste Folie",
@@ -54,7 +54,7 @@
     "app.presentation.presentationToolbar.fitScreenDesc": "Gesamte Folie darstellen",
     "app.presentation.presentationToolbar.zoomLabel": "Vergrößerungsgrad",
     "app.presentation.presentationToolbar.zoomDesc": "Vergrößerungsstufe der Präsentation ändern",
-    "app.presentation.presentationToolbar.goToSlide":"Folie {0}",
+    "app.presentation.presentationToolbar.goToSlide": "Folie {0}",
     "app.presentationUploder.title": "Präsentation",
     "app.presentationUploder.message": "Als Präsentator haben Sie in BigBlueButton die Möglichkeit, jegliche Office-Dokumente oder PDF-Dateien hochzuladen. Die beste Qualität erzielen Sie mit PDF-Dateien.",
     "app.presentationUploder.confirmLabel": "Start",
@@ -91,7 +91,11 @@
     "app.navBar.settingsDropdown.leaveSessionDesc": "Konferenz verlassen",
     "app.navBar.settingsDropdown.exitFullscreenDesc": "Vollbildmodus beenden",
     "app.navBar.userListToggleBtnLabel": "Teilnehmerliste umschalten",
+    "app.navBar.toggleUserList.ariaLabel": "Nutzer / Gespräche-Umschaltung",
     "app.navBar.toggleUserList.newMessages": "mit Benachrichtigung für neue Nachrichten",
+    "app.navBar.recording": "Diese Konferenz wird aufgezeichnet",
+    "app.navBar.recording.on": "Aufzeichnung läuft",
+    "app.navBar.recording.off": "Keine Aufnahme",
     "app.leaveConfirmation.title": "Konferenz verlassen",
     "app.leaveConfirmation.message": "Wollen Sie die Konferenz verlassen?",
     "app.leaveConfirmation.confirmLabel": "Verlassen",
@@ -171,6 +175,12 @@
     "app.settings.main.cancel.label.description": "Verwirft die Änderungen und schließt das Einstellungsmenü",
     "app.settings.main.save.label": "Speichern",
     "app.settings.main.save.label.description": "Speichert die Einstellungen und schließt das Einstellungsmenü",
+    "app.settings.dataSavingTab.label": "Dateneinsparung",
+    "app.settings.dataSavingTab.webcam": "Webcams ausschalten",
+    "app.settings.dataSavingTab.screenShare": "Bildschirmfreigabe ausschalten",
+    "app.settings.dataSavingTab.description": "Um Datentransfervolumen zu sparen, können Sie hier einstellen, was angezeigt wird.",
+    "app.switch.onLabel": "AN",
+    "app.switch.offLabel": "AUS",
     "app.actionsBar.actionsDropdown.actionsLabel": "Aktionen",
     "app.actionsBar.actionsDropdown.presentationLabel": "Eine Präsentation hochladen",
     "app.actionsBar.actionsDropdown.initPollLabel": "Eine Umfrage starten",
@@ -180,6 +190,8 @@
     "app.actionsBar.actionsDropdown.initPollDesc": "Eine Umfrage starten",
     "app.actionsBar.actionsDropdown.desktopShareDesc": "Ihren Bildschirm mit anderen teilen",
     "app.actionsBar.actionsDropdown.stopDesktopShareDesc": "Bildschirmfreigabe beenden mit",
+    "app.actionsBar.actionsDropdown.startRecording": "Aufnahme starten",
+    "app.actionsBar.actionsDropdown.stopRecording": "Aufnahme beenden",
     "app.actionsBar.emojiMenu.statusTriggerLabel": "Status",
     "app.actionsBar.emojiMenu.awayLabel": "Abwesend",
     "app.actionsBar.emojiMenu.awayDesc": "Ihren Status auf abwesend setzen",
@@ -240,7 +252,7 @@
     "app.audioModal.connectingEchoTest": "Verbinde zum Echotest",
     "app.audioManager.joinedAudio": "Sie sind der Konferenz beigetreten",
     "app.audioManager.joinedEcho": "Der Echotest wurde gestartet",
-    "app.audioManager.leftAudio": "Sie haben die Konferenz verlassen",
+    "app.audioManager.leftAudio": "Sie haben die Audiokonferenz verlassen",
     "app.audioManager.genericError": "Fehler: Es ist ein Fehler aufgetreten, bitte versuchen Sie es erneut",
     "app.audioManager.connectionError": "Fehler: Verbindungsfehler",
     "app.audioManager.requestTimeout": "Fehler: Zeitüberschreitung beim Aufruf",
@@ -271,10 +283,10 @@
     "app.error.leaveLabel": "Erneut einloggen",
     "app.guest.waiting": "Warte auf Erlaubnis zur Konferenzteilnahme",
     "app.toast.breakoutRoomEnded": "Breakout Raum wurde beendet. Bitte klicken Sie aufs Mikrofon-Icon um wieder der Audiokonferenz im Hauptraum beizutreten",
-    "app.toast.chat.singular":"Sie haben {0} neue Nachricht in {1}",
-    "app.toast.chat.plural":"Sie haben {0} neue Nachrichten in {1}",
-    "app.notification.recordingStart": "Die Sitzung wird jetzt aufgezeichnet",
-    "app.notification.recordingStop": "Die Sitzung wird nicht mehr aufgezeichnet",
+    "app.toast.chat.singular": "Sie haben {0} neue Nachricht in {1}",
+    "app.toast.chat.plural": "Sie haben {0} neue Nachrichten in {1}",
+    "app.notification.recordingStart": "Die Konferenz wird jetzt aufgezeichnet",
+    "app.notification.recordingStop": "Die Konferenz wird nicht mehr aufgezeichnet",
     "app.video.joinVideo": "Webcam freigeben",
     "app.video.leaveVideo": "Webcam stoppen",
     "app.video.iceCandidateError": "Fehler beim Hinzufügen vom ice candidate",
diff --git a/bigbluebutton-html5/private/locales/en.json b/bigbluebutton-html5/private/locales/en.json
index 4fdb9edd0969f794c5cbac8b02f9294dacc86557..e09bbf8eadf20722ebe8c8ebe5fcb9945f8b7779 100755
--- a/bigbluebutton-html5/private/locales/en.json
+++ b/bigbluebutton-html5/private/locales/en.json
@@ -40,6 +40,8 @@
     "app.userList.menu.promoteUser.label": "Promote {0} to moderator",
     "app.userList.menu.demoteUser.label": "Demote {0} to viewer",
     "app.media.label": "Media",
+    "app.media.screenshare.start": "Screenshare has started",
+    "app.media.screenshare.end": "Screenshare has ended",
     "app.meeting.ended": "This session has ended",
     "app.meeting.endedMessage": "You will be forwarded back to the home screen",
     "app.presentation.presentationToolbar.prevSlideLabel": "Previous slide",
@@ -103,6 +105,7 @@
     "app.leaveConfirmation.dismissLabel": "Cancel",
     "app.leaveConfirmation.dismissDesc": "Closes and rejects the leave confirmation",
     "app.leaveConfirmation.endMeetingLabel": "Yes and close the session",
+    "app.leaveConfirmation.endMeetingAriaLabel": "Leave and end the session",
     "app.leaveConfirmation.endMeetingDesc": "Closes and end meeting confirmation",
     "app.about.title": "About",
     "app.about.version": "Client Build:",
@@ -179,6 +182,8 @@
     "app.settings.dataSavingTab.webcam": "Disable Webcams",
     "app.settings.dataSavingTab.screenShare": "Disable Desktop Sharing",
     "app.settings.dataSavingTab.description": "To save your bandwidth adjust what's currently being displayed.",
+    "app.switch.onLabel": "ON",
+    "app.switch.offLabel": "OFF",
     "app.actionsBar.actionsDropdown.actionsLabel": "Actions",
     "app.actionsBar.actionsDropdown.presentationLabel": "Upload a presentation",
     "app.actionsBar.actionsDropdown.initPollLabel": "Initiate a poll",
@@ -290,6 +295,10 @@
     "app.video.iceCandidateError": "Error on adding ice candidate",
     "app.video.permissionError": "Error on sharing webcam. Please check permissions",
     "app.video.sharingError": "Error on sharing webcam",
+    "app.video.swapCam": "Swap",
+    "app.video.swapCamDesc": "swap the direction of webcams",
+    "app.video.videoMenu": "Video menu",
+    "app.video.videoMenuDesc": "Open video menu dropdown",
     "app.video.chromeExtensionError": "You must install",
     "app.video.chromeExtensionErrorLink": "this Chrome Extension",
     "app.meeting.endNotification.ok.label": "OK",
@@ -301,8 +310,10 @@
     "app.whiteboard.toolbar.tools.ellipse": "Ellipse",
     "app.whiteboard.toolbar.tools.line": "Line",
     "app.whiteboard.toolbar.tools.text": "Text",
-    "app.whiteboard.toolbar.thickness": "Thickness List",
-    "app.whiteboard.toolbar.color": "Color List",
+    "app.whiteboard.toolbar.thickness": "Drawing Thickness",
+    "app.whiteboard.toolbar.thicknessDisabled": "Drawing Thickness is Disabled",
+    "app.whiteboard.toolbar.color": "Colors",
+    "app.whiteboard.toolbar.colorDisabled": "Colors is Disabled",
     "app.whiteboard.toolbar.color.black": "Black",
     "app.whiteboard.toolbar.color.white": "White",
     "app.whiteboard.toolbar.color.red": "Red",
diff --git a/bigbluebutton-html5/private/locales/fr.json b/bigbluebutton-html5/private/locales/fr.json
index ca0dbb6a3e8bf37d230d6e4762c96250a832704c..84f827222b75735d7c7e117eeeda487f9b4dd206 100644
--- a/bigbluebutton-html5/private/locales/fr.json
+++ b/bigbluebutton-html5/private/locales/fr.json
@@ -93,8 +93,8 @@
     "app.error.500": "Oups, quelque chose s'est mal passé",
     "app.error.404": "Non trouvé",
     "app.error.403": "Interdit",
-    "app.toast.chat.singular":"vous avez {0} nouveau message dans {1}",
-    "app.toast.chat.plural":"vous avez {0} nouveaux messages dans {1}",
+    "app.toast.chat.singular": "vous avez {0} nouveau message dans {1}",
+    "app.toast.chat.plural": "vous avez {0} nouveaux messages dans {1}",
     "app.notification.recordingStart": "Cette session est maintenant enregistrée",
     "app.notification.recordingStop": "Cette session n'est maintenant plus enregistrée"
 
diff --git a/bigbluebutton-html5/private/locales/km.json b/bigbluebutton-html5/private/locales/km.json
index 7d674fffc9a99c53e6e7228e3c5b3f989d519153..ce91d81c8d0484f8059bbb1b2cab507f7734436b 100644
--- a/bigbluebutton-html5/private/locales/km.json
+++ b/bigbluebutton-html5/private/locales/km.json
@@ -1,6 +1,8 @@
 {
     "app.home.greeting": "សូមស្វាគមន៍ {0}! បទ​បង្ហាញ​របស់​អ្នក​នឹង​ចាប់ផ្តើម​បន្តិច​ទៀត​នេះ",
     "app.chat.submitLabel": "ផ្ញើ​សារ",
+    "app.chat.errorMinMessageLength": "សារ​នេះ​នៅ​ខ្វះ {0} តួ​អក្សរ​ទៀត",
+    "app.chat.errorMaxMessageLength": "សារ​នេះ​លើស {0} តួ​អក្សរ",
     "app.chat.inputLabel": "ការ​បញ្ចូល​សារ​សម្រាប់​ការ​ជជែក {0}",
     "app.chat.inputPlaceholder": "សារ {0}",
     "app.chat.titlePublic": "ជជែក​សាធារណៈ",
diff --git a/bigbluebutton-html5/private/locales/pt_BR.json b/bigbluebutton-html5/private/locales/pt_BR.json
index b295d4c1d4a0ba9a3e9dfcab3a0f51fe7c3460a4..59567165c170f5dfe209fbac71a2a81807d8e9c9 100644
--- a/bigbluebutton-html5/private/locales/pt_BR.json
+++ b/bigbluebutton-html5/private/locales/pt_BR.json
@@ -33,12 +33,15 @@
     "app.userList.menu.chat.label": "Bate-papo",
     "app.userList.menu.clearStatus.label": "Limpar status",
     "app.userList.menu.makePresenter.label": "Torná-lo apresentador",
+    "app.userList.menu.removeUser.label": "Remover usuário",
     "app.userList.menu.muteUserAudio.label": "Silenciar usuário",
     "app.userList.menu.unmuteUserAudio.label": "Desbloquear microfone do usuário",
     "app.userList.userAriaLabel": "Usuário : {0}  Papel: {1}  Pessoa: {2}  Status: {3}",
     "app.userList.menu.promoteUser.label": "Transforme {0} em moderador",
     "app.userList.menu.demoteUser.label": "Transforme {0} em espectador",
     "app.media.label": "Mídia",
+    "app.meeting.ended": "Esta reunião terminou",
+    "app.meeting.endedMessage": "Você será redirecionado para a tela inicial",
     "app.presentation.presentationToolbar.prevSlideLabel": "Slide anterior",
     "app.presentation.presentationToolbar.prevSlideDesc": "Mudar a apresentação para o slide anterior",
     "app.presentation.presentationToolbar.nextSlideLabel": "Próximo slide",
@@ -51,7 +54,7 @@
     "app.presentation.presentationToolbar.fitScreenDesc": "Exibir todo o slide",
     "app.presentation.presentationToolbar.zoomLabel": "Zoom",
     "app.presentation.presentationToolbar.zoomDesc": "Alterar o nível de zoom da apresentação",
-    "app.presentation.presentationToolbar.goToSlide":"Slide {0}",
+    "app.presentation.presentationToolbar.goToSlide": "Slide {0}",
     "app.presentationUploder.title": "Apresentação",
     "app.presentationUploder.message": "Como apresentador no BigBlueButton, você tem a capacidade de carregar qualquer documento do Office ou arquivo PDF. Para melhores resultados, recomendamos que se carregue arquivos em PDF.",
     "app.presentationUploder.confirmLabel": "Iniciar",
@@ -89,7 +92,7 @@
     "app.navBar.settingsDropdown.exitFullscreenDesc": "Sair do modo de tela cheia",
     "app.navBar.userListToggleBtnLabel": "Alternar lista de usuários",
     "app.navBar.toggleUserList.newMessages": "com notificação para novas mensagens",
-    "app.leaveConfirmation.title": "Deixar a sessão",
+    "app.leaveConfirmation.title": "Deixar a reunião",
     "app.leaveConfirmation.message": "Você quer sair desta reunião?",
     "app.leaveConfirmation.confirmLabel": "Sair",
     "app.leaveConfirmation.confirmDesc": "Desconecta da reunião",
@@ -172,9 +175,11 @@
     "app.actionsBar.actionsDropdown.presentationLabel": "Carregar uma apresentação",
     "app.actionsBar.actionsDropdown.initPollLabel": "Iniciar uma enquete",
     "app.actionsBar.actionsDropdown.desktopShareLabel": "Compartilhar sua tela",
+    "app.actionsBar.actionsDropdown.stopDesktopShareLabel": "Parar compartilhamento de tela",
     "app.actionsBar.actionsDropdown.presentationDesc": "Carregar sua apresentação",
     "app.actionsBar.actionsDropdown.initPollDesc": "Iniciar uma enquete",
     "app.actionsBar.actionsDropdown.desktopShareDesc": "Compartilhar sua tela com os outros",
+    "app.actionsBar.actionsDropdown.stopDesktopShareDesc": "Pare o compartilhamento de tela com",
     "app.actionsBar.emojiMenu.statusTriggerLabel": "Status",
     "app.actionsBar.emojiMenu.awayLabel": "Ausente",
     "app.actionsBar.emojiMenu.awayDesc": "Mudar seu status para ausente",
@@ -256,6 +261,7 @@
     "app.audio.listenOnly.closeLabel": "Fechar",
     "app.audio.permissionsOverlay.title": "Permitir que o BigBlueButton acesse seus dispositivos de mídia",
     "app.audio.permissionsOverlay.hint": "Precisamos que você nos permita acessar seus dispositivos de mídia para participar da conferência por voz :)",
+    "app.error.removed": "Você foi removido da conferência",
     "app.error.meeting.ended": "Você saiu da conferência",
     "app.dropdown.close": "Fechar",
     "app.error.500": "Ops, algo deu errado",
@@ -264,10 +270,46 @@
     "app.error.403": "Proibido",
     "app.error.leaveLabel": "Faça o login novamente",
     "app.guest.waiting": "Esperando aprovação para participar",
-    "app.toast.chat.singular":"você tem {0} nova mensagem em {1}",
-    "app.toast.chat.plural":"você tem {0} novas mensagens em {1}",
-    "app.notification.recordingStart": "Esta sessão está sendo gravada",
-    "app.notification.recordingStop": "Esta sessão não está mais sendo gravada"
+    "app.toast.breakoutRoomEnded": "A sala de apoio terminou. Clique no ícone do microfone para reingressar a conferência de áudio na sala principal",
+    "app.toast.chat.singular": "você tem {0} nova mensagem em {1}",
+    "app.toast.chat.plural": "você tem {0} novas mensagens em {1}",
+    "app.notification.recordingStart": "Esta reunião está sendo gravada",
+    "app.notification.recordingStop": "Esta reunião não está mais sendo gravada",
+    "app.video.joinVideo": "Ativar Webcam",
+    "app.video.leaveVideo": "Pare a Webcam",
+    "app.video.iceCandidateError": "Erro ao adicionar o candidato ICE",
+    "app.video.permissionError": "Erro ao compartilhar a webcam. Verifique as permissões",
+    "app.video.sharingError": "Erro ao compartilhar a webcam",
+    "app.video.chromeExtensionError": "Você deve instalar o seguinte:",
+    "app.video.chromeExtensionErrorLink": "esta extensão do Chrome",
+    "app.meeting.endNotification.ok.label": "OK",
+    "app.whiteboard.toolbar.tools": "Ferramentas",
+    "app.whiteboard.toolbar.tools.hand": "Mão",
+    "app.whiteboard.toolbar.tools.pencil": "Lápis",
+    "app.whiteboard.toolbar.tools.rectangle": "Retângulo",
+    "app.whiteboard.toolbar.tools.triangle": "Triângulo",
+    "app.whiteboard.toolbar.tools.ellipse": "Elipse",
+    "app.whiteboard.toolbar.tools.line": "Linha",
+    "app.whiteboard.toolbar.tools.text": "Texto",
+    "app.whiteboard.toolbar.thickness": "Lista de espessura",
+    "app.whiteboard.toolbar.color": "Lista de cores",
+    "app.whiteboard.toolbar.color.black": "Preto",
+    "app.whiteboard.toolbar.color.white": "Branco",
+    "app.whiteboard.toolbar.color.red": "Vermelho",
+    "app.whiteboard.toolbar.color.orange": "Laranja",
+    "app.whiteboard.toolbar.color.eletricLime": "Verde limão",
+    "app.whiteboard.toolbar.color.lime": "Verde",
+    "app.whiteboard.toolbar.color.cyan": "Ciano",
+    "app.whiteboard.toolbar.color.dodgerBlue": "Azul Dodger",
+    "app.whiteboard.toolbar.color.blue": "Azul",
+    "app.whiteboard.toolbar.color.violet": "Violeta",
+    "app.whiteboard.toolbar.color.magenta": "Magenta",
+    "app.whiteboard.toolbar.color.silver": "Prata",
+    "app.whiteboard.toolbar.undo": "Desfazer Anotação",
+    "app.whiteboard.toolbar.clear": "Limpar todas as anotações",
+    "app.whiteboard.toolbar.multiUserOn": "Iniciar o modo multiusuário",
+    "app.whiteboard.toolbar.multiUserOff": "Sair do modo multiusuário",
+    "app.whiteboard.toolbar.fontSize": "Lista de tamanhos de fonte"
 
 }
 
diff --git a/bigbluebutton-html5/private/locales/tr_TR.json b/bigbluebutton-html5/private/locales/tr_TR.json
index 67c4a4a300af718232ee74be36702ffbef0857d2..6fd6e342ec2800390477637879a7fee861450d89 100644
--- a/bigbluebutton-html5/private/locales/tr_TR.json
+++ b/bigbluebutton-html5/private/locales/tr_TR.json
@@ -33,12 +33,15 @@
     "app.userList.menu.chat.label": "Sohbet",
     "app.userList.menu.clearStatus.label": "Durum Temizle",
     "app.userList.menu.makePresenter.label": "Sunucu Yap",
+    "app.userList.menu.removeUser.label": "Kullanıcı uzaklaştır",
     "app.userList.menu.muteUserAudio.label": "Kullanıcıyı sustur",
     "app.userList.menu.unmuteUserAudio.label": "Kullanıcıyı konuştur",
     "app.userList.userAriaLabel": "Kullanıcı : {0}  Rol: {1}  Kişi: {2}  Durum: {3}",
     "app.userList.menu.promoteUser.label": "{0} kullanıcısını moderatör yap",
     "app.userList.menu.demoteUser.label": "{0} kullanıcısını izleyici yap",
     "app.media.label": "Medya",
+    "app.meeting.ended": "Oturum sonlandı",
+    "app.meeting.endedMessage": "Ana ekrana geri yönlendirileceksiniz",
     "app.presentation.presentationToolbar.prevSlideLabel": "Önceki slayt",
     "app.presentation.presentationToolbar.prevSlideDesc": "Sunumu önceki slayda değiştir",
     "app.presentation.presentationToolbar.nextSlideLabel": "Sonraki slayt",
@@ -51,7 +54,7 @@
     "app.presentation.presentationToolbar.fitScreenDesc": "Tüm slaydı göster",
     "app.presentation.presentationToolbar.zoomLabel": "Odak",
     "app.presentation.presentationToolbar.zoomDesc": "Sunumun odak seviyesini deÄŸiÅŸtir",
-    "app.presentation.presentationToolbar.goToSlide":"Slayt {0}",
+    "app.presentation.presentationToolbar.goToSlide": "Slayt {0}",
     "app.presentationUploder.title": "Sunum",
     "app.presentationUploder.message": "BigBlueButton'da sunucu olarak herhangi bir ofis belgesini ya da PDF dosyasını yükleyebilirsiniz. En iyi sonuç için PDF dosyası yüklemenizi tavsiye ederiz.",
     "app.presentationUploder.confirmLabel": "BaÅŸlat",
@@ -88,6 +91,7 @@
     "app.navBar.settingsDropdown.leaveSessionDesc": "Görüşmeden ayrıl",
     "app.navBar.settingsDropdown.exitFullscreenDesc": "Tam ekran modundan çık",
     "app.navBar.userListToggleBtnLabel": "Kullanıcı Listesini Değiştir",
+    "app.navBar.toggleUserList.ariaLabel": "Kullanıcılar / Konuşmalar Değiştir",
     "app.navBar.toggleUserList.newMessages": "yeni mesaj bildirimiyle",
     "app.leaveConfirmation.title": "Oturumdan Ayrıl",
     "app.leaveConfirmation.message": "Görüşmeden ayrılmak istiyor musunuz?",
@@ -168,13 +172,19 @@
     "app.settings.main.cancel.label.description": "Değişiklikleri geri alır ve ayarlar menüsünü kapatır",
     "app.settings.main.save.label": "Kaydet",
     "app.settings.main.save.label.description": "Değişiklikleri kaydeder ve ayarlar menüsünü kapatır",
+    "app.settings.dataSavingTab.label": "Veri Kazancı",
+    "app.settings.dataSavingTab.webcam": "Kameraları Devre Dışı Bırak",
+    "app.settings.dataSavingTab.screenShare": "Masaüstü Paylaşımını Devre Dışı Bırak",
+    "app.settings.dataSavingTab.description": "Bant genişliğinden tasarruf etmek için mevcut gösterimi ayarlayın.",
     "app.actionsBar.actionsDropdown.actionsLabel": "Eylemler",
     "app.actionsBar.actionsDropdown.presentationLabel": "Bir sunum yükle",
     "app.actionsBar.actionsDropdown.initPollLabel": "Oylama baÅŸlat",
     "app.actionsBar.actionsDropdown.desktopShareLabel": "Ekranını paylaş",
+    "app.actionsBar.actionsDropdown.stopDesktopShareLabel": "Ekran paylaşımını sonlandır",
     "app.actionsBar.actionsDropdown.presentationDesc": "Sunumunuzu yükleyin",
     "app.actionsBar.actionsDropdown.initPollDesc": "Oylama baÅŸlat",
     "app.actionsBar.actionsDropdown.desktopShareDesc": "Ekranını diğerleriyle paylaş",
+    "app.actionsBar.actionsDropdown.stopDesktopShareDesc": "Ekran genişliği paylaşımını sonlandır",
     "app.actionsBar.emojiMenu.statusTriggerLabel": "Durum",
     "app.actionsBar.emojiMenu.awayLabel": "Dışarıda",
     "app.actionsBar.emojiMenu.awayDesc": "Durumunu dışarıda yap",
@@ -256,6 +266,7 @@
     "app.audio.listenOnly.closeLabel": "Kapat",
     "app.audio.permissionsOverlay.title": "BigBlueButton'un Medya Cihazlarınızı kullanmasına izin verin",
     "app.audio.permissionsOverlay.hint": "Sizi sesli görüşmeye katabilmemiz için Medya Cihazlarınıza erişimimize izin vermeniz gerekir :)",
+    "app.error.removed": "Konferanstan uzaklaştırıldınız",
     "app.error.meeting.ended": "Konferanstan ayrıldınız",
     "app.dropdown.close": "Kapat",
     "app.error.500": "Hops, birÅŸeyler ters gitti",
@@ -264,10 +275,46 @@
     "app.error.403": "Yasaklı",
     "app.error.leaveLabel": "Tekrar giriÅŸ yap",
     "app.guest.waiting": "Katılım onayı bekleniyor",
-    "app.toast.chat.singular":"{1} için {0} yeni mesajınız var",
-    "app.toast.chat.plural":"{1} için {0} yeni mesajınız var",
+    "app.toast.breakoutRoomEnded": "Özel sonlandı. Lütfen sesli görüşmeye yeniden katılın.",
+    "app.toast.chat.singular": "{1} için {0} yeni mesajınız var",
+    "app.toast.chat.plural": "{1} için {0} yeni mesajınız var",
     "app.notification.recordingStart": "Bu oturum ÅŸu anda kaydediliyor",
-    "app.notification.recordingStop": "Bu oturum artık kaydedilmiyor"
+    "app.notification.recordingStop": "Bu oturum artık kaydedilmiyor",
+    "app.video.joinVideo": "Kamera PaylaÅŸ",
+    "app.video.leaveVideo": "Kamera PaylaÅŸma",
+    "app.video.iceCandidateError": "ICE adayı ekleme hatası",
+    "app.video.permissionError": "Kamera paylaşımı hatası. Lütfen izinleri kontrol edin.",
+    "app.video.sharingError": "Kamera paylaşımı hatası",
+    "app.video.chromeExtensionError": "Yüklemeniz gerekiyor",
+    "app.video.chromeExtensionErrorLink": "Chrome Uzantısı",
+    "app.meeting.endNotification.ok.label": "TAMAM",
+    "app.whiteboard.toolbar.tools": "Araçlar",
+    "app.whiteboard.toolbar.tools.hand": "El",
+    "app.whiteboard.toolbar.tools.pencil": "Kalem",
+    "app.whiteboard.toolbar.tools.rectangle": "Dikdörtgen",
+    "app.whiteboard.toolbar.tools.triangle": "Üçgen",
+    "app.whiteboard.toolbar.tools.ellipse": "Elips",
+    "app.whiteboard.toolbar.tools.line": "Çizgi",
+    "app.whiteboard.toolbar.tools.text": "Metin",
+    "app.whiteboard.toolbar.thickness": "Kalınlık Listesi",
+    "app.whiteboard.toolbar.color": "Renk Listesi",
+    "app.whiteboard.toolbar.color.black": "Siyah",
+    "app.whiteboard.toolbar.color.white": "Beyaz",
+    "app.whiteboard.toolbar.color.red": "Kırmızı",
+    "app.whiteboard.toolbar.color.orange": "Turuncu",
+    "app.whiteboard.toolbar.color.eletricLime": "Parlak YeÅŸil",
+    "app.whiteboard.toolbar.color.lime": "Açık Yeşil",
+    "app.whiteboard.toolbar.color.cyan": "Cam Göbeği",
+    "app.whiteboard.toolbar.color.dodgerBlue": "Hile Mavisi",
+    "app.whiteboard.toolbar.color.blue": "Mavi",
+    "app.whiteboard.toolbar.color.violet": "MenekÅŸe",
+    "app.whiteboard.toolbar.color.magenta": "FuÅŸya",
+    "app.whiteboard.toolbar.color.silver": "Gümüş",
+    "app.whiteboard.toolbar.undo": "Ek Açıklamayı Geri Al",
+    "app.whiteboard.toolbar.clear": "Tüm Ek Açıklamaları Temizle",
+    "app.whiteboard.toolbar.multiUserOn": "Çoklu kullanıcı modunu aç",
+    "app.whiteboard.toolbar.multiUserOff": "Çoklu kullanıcı modunu kapat",
+    "app.whiteboard.toolbar.fontSize": "Yazı Tipi Büyüklüğü Listesi"
 
 }
 
diff --git a/bigbluebutton-html5/public/resources/images/video-menu/icon-swap.svg b/bigbluebutton-html5/public/resources/images/video-menu/icon-swap.svg
new file mode 100755
index 0000000000000000000000000000000000000000..5a5dba8ce8859f13da8699f35f9daedfa7622d54
--- /dev/null
+++ b/bigbluebutton-html5/public/resources/images/video-menu/icon-swap.svg
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="64px" height="40px" viewBox="0 0 64 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
+    <title>icon-swap</title>
+    <desc>Created with Sketch.</desc>
+    <defs>
+        <polygon id="path-1" points="0.437577197 0.52125 10.8119 0.52125 10.8119 14.8655357 0.437577197 14.8655357"></polygon>
+    </defs>
+    <g id="Video-Exploration" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="icon-swap">
+            <rect id="Rectangle-14" fill="#DFE7F0" x="0" y="0" width="64" height="40" rx="2"></rect>
+            <rect id="Rectangle-14" fill="#8BA2BB" x="7" y="0" width="50" height="32"></rect>
+            <g id="Page-1" transform="translate(24.000000, 8.000000)">
+                <path d="M3.56961165,16 L0.2104787,12.4507487 C0.076876821,12.3095853 2.72426615e-06,12.1107241 2.72426615e-06,11.9040206 C-0.000527441918,11.6967569 0.0763466549,11.4967754 0.2104787,11.3550518 C0.48828578,11.0620817 0.969676676,11.0620817 1.24695359,11.3550518 L2.77436237,12.968908 L2.77436237,8.33124205 C2.77436237,4.54839892 5.56568733,1.33020941 9.12840409,1.00362899 C9.35425489,0.981222105 9.57639452,1.06356742 9.74233653,1.22321651 C9.90562772,1.38174526 9.9999973,1.6069345 9.9999973,1.84108649 C10.0010576,2.27409963 9.68985008,2.64045228 9.29275561,2.67574313 C6.52899929,2.91549685 4.36486092,5.39930055 4.36486092,8.33124205 L4.36486092,12.968908 L5.8922697,11.3550518 C6.16954661,11.0620817 6.65093751,11.0620817 6.92874459,11.3550518 C7.06711797,11.5012568 7.14293173,11.6950763 7.14293173,11.9029002 C7.14293173,12.1084835 7.06764813,12.3023031 6.93033509,12.4490682 L3.56961165,16 Z" id="Fill-1" fill="#FEFEFE"></path>
+                <g id="Group-5" transform="translate(9.000000, 0.000000)">
+                    <mask id="mask-2" fill="white">
+                        <use xlink:href="#path-1"></use>
+                    </mask>
+                    <g id="Clip-4"></g>
+                    <path d="M1.26918,14.8655357 C1.06128,14.8655357 0.85943,14.7894643 0.70543,14.6528571 C0.53548,14.5007143 0.43758,14.2858929 0.43758,14.0619643 C0.43648,13.6478571 0.75933,13.2969643 1.17128,13.26375 C4.03843,13.0344643 6.28353,10.6585714 6.28353,7.85517857 L6.28353,3.42 L4.69898,4.96339286 C4.41133,5.24357143 3.91193,5.24357143 3.62373,4.96339286 C3.48073,4.82357143 3.40153,4.63767857 3.40153,4.43946429 C3.40153,4.24285714 3.48018,4.05696429 3.62208,3.91714286 L7.10853,0.52125 L10.59333,3.91553571 C10.73193,4.05053571 10.81223,4.24071429 10.81223,4.43839286 C10.81278,4.63607143 10.73248,4.82785714 10.59333,4.96339286 C10.30568,5.24357143 9.80573,5.24357143 9.51808,4.96339286 L7.93353,3.42 L7.93353,7.85517857 C7.93353,11.4728571 5.03833,14.5505357 1.34178,14.8623214 C1.31758,14.8644643 1.29338,14.8655357 1.26918,14.8655357" id="Fill-3" fill="#FEFEFE" mask="url(#mask-2)"></path>
+                </g>
+            </g>
+            <rect id="Rectangle-14" x="0" y="0" width="64" height="40" rx="2"></rect>
+            <g id="Group" transform="translate(24.000000, 34.000000)" fill="#8BA2BB">
+                <circle id="Oval" cx="2" cy="2" r="2"></circle>
+                <circle id="Oval-Copy" cx="8" cy="2" r="2"></circle>
+                <circle id="Oval-Copy-2" cx="14" cy="2" r="2"></circle>
+            </g>
+            <rect id="Rectangle-14-Copy-4" fill="#8BA2BB" x="54" y="33" width="8" height="5"></rect>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/bigbluebutton-html5/public/resources/images/video-menu/icon-webcam-off.svg b/bigbluebutton-html5/public/resources/images/video-menu/icon-webcam-off.svg
new file mode 100755
index 0000000000000000000000000000000000000000..46a74e6e98d241d7e1b4ec77843feeb23e0536b1
--- /dev/null
+++ b/bigbluebutton-html5/public/resources/images/video-menu/icon-webcam-off.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="64px" height="40px" viewBox="0 0 64 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
+    <title>icon-webcam-off</title>
+    <desc>Created with Sketch.</desc>
+    <defs></defs>
+    <g id="Video-Exploration" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="icon-webcam-off">
+            <rect id="Rectangle-14-Copy-15" fill="#DFE7F0" x="0" y="0" width="64" height="40" rx="2"></rect>
+            <rect id="Rectangle-14-Copy-16" fill="#8BA2BB" x="7" y="0" width="50" height="32"></rect>
+            <path d="M23.2059929,21.8093305 L33.7940071,21.8093305 L33.7940071,13.1906695 L23.2059929,13.1906695 L23.2059929,21.8093305 Z M34.3970036,23 L22.6029964,23 C22.2695394,23 22,22.7338854 22,22.4046653 L22,12.5953347 C22,12.26671 22.2695394,12 22.6029964,12 L34.3970036,12 C34.7298576,12 35,12.26671 35,12.5953347 L35,22.4046653 C35,22.7338854 34.7298576,23 34.3970036,23 Z" id="Fill-1" fill="#FFFFFF"></path>
+            <path d="M40.602925,21.0265445 L37.2408478,19.5331841 L37.2408478,17.0682399 L40.602925,15.5748796 L40.602925,21.0265445 Z M41.56148,14.1001319 C41.3852796,13.9859739 41.1625474,13.9679816 40.9714568,14.0536001 L36.3685318,16.0978969 C36.1439383,16.1971648 36,16.4192765 36,16.6649644 L36,19.9364597 C36,20.1821476 36.1439383,20.4042593 36.3685318,20.5035271 L40.9714568,22.5478239 C41.0521119,22.5838085 41.1377304,22.6011804 41.2233489,22.6011804 C41.3412295,22.6011804 41.45911,22.5670571 41.56148,22.5012921 C41.7376803,22.3865137 41.8437728,22.1910802 41.8437728,21.9807565 L41.8437728,14.6206676 C41.8437728,14.4103439 41.7376803,14.2149104 41.56148,14.1001319 Z" id="Fill-1" fill="#FFFFFF"></path>
+            <g id="Group-Copy" transform="translate(24.000000, 34.000000)" fill="#8BA2BB">
+                <circle id="Oval" cx="2" cy="2" r="2"></circle>
+                <circle id="Oval-Copy" cx="8" cy="2" r="2"></circle>
+                <circle id="Oval-Copy-2" cx="14" cy="2" r="2"></circle>
+            </g>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/labs/bbb-webrtc-sfu/config/default.example.yml b/labs/bbb-webrtc-sfu/config/default.example.yml
index 7817a8d1ccb0e288ea867b9b54ab1e195ccf2713..4895109f0cbf216ddd7fe974026f70843d1b2541 100644
--- a/labs/bbb-webrtc-sfu/config/default.example.yml
+++ b/labs/bbb-webrtc-sfu/config/default.example.yml
@@ -14,6 +14,7 @@ from-video: "from-video-sfu"
 to-video: "to-video-sfu"
 from-audio: "from-audio-sfu"
 to-audio: "to-audio-sfu"
+to-akka: "to-akka-apps-redis-channel"
 
 log:
     filename: '/var/log/bigbluebutton/bbb-webrtc-sfu/bbb-webrtc-sfu.log'
diff --git a/labs/bbb-webrtc-sfu/lib/bbb/messages/Constants.js b/labs/bbb-webrtc-sfu/lib/bbb/messages/Constants.js
index 3b2a77052aefe4154435efb76a485935e4ee9e43..dec25bb7a5e42479ad8a5c3ee7a1fd7a06439cab 100644
--- a/labs/bbb-webrtc-sfu/lib/bbb/messages/Constants.js
+++ b/labs/bbb-webrtc-sfu/lib/bbb/messages/Constants.js
@@ -25,6 +25,7 @@ const config = require('config');
         TO_VIDEO: config.get('to-video'),
         FROM_AUDIO: config.get('from-audio'),
         TO_AUDIO: config.get('to-audio'),
+        TO_AKKA_APPS: config.get('to-akka'),
 
         // RedisWrapper events
         REDIS_MESSAGE : "redis_message",
@@ -47,6 +48,8 @@ const config = require('config');
         STOP_TRANSCODER_REQ_2x: "StopTranscoderSysReqMsg",
         STOP_TRANSCODER_RESP_2x: "StopTranscoderSysRespMsg",
 
+        USER_CAM_BROADCAST_STOPPED_2x: "UserBroadcastCamStopMsg",
+
         // Redis messages fields
         //  Transcoder 1x
         USER_ID : "user_id",
diff --git a/labs/bbb-webrtc-sfu/lib/bbb/messages/Messaging.js b/labs/bbb-webrtc-sfu/lib/bbb/messages/Messaging.js
index a352acf1e5f8cfd736e48011316209995bf2a87d..3cf3f3a908a9bdda914c1203eea3430f391704bd 100644
--- a/labs/bbb-webrtc-sfu/lib/bbb/messages/Messaging.js
+++ b/labs/bbb-webrtc-sfu/lib/bbb/messages/Messaging.js
@@ -20,11 +20,12 @@ let ScreenshareRTMPBroadcastStartedEventMessage2x =
     require('./screenshare/ScreenshareRTMPBroadcastStartedEventMessage2x.js')(Constants);
 let ScreenshareRTMPBroadcastStoppedEventMessage2x =
     require('./screenshare/ScreenshareRTMPBroadcastStoppedEventMessage2x.js')(Constants);
-
+let UserCamBroadcastStoppedEventMessage2x =
+    require('./video/UserCamBroadcastStoppedEventMessage2x.js')(Constants);
 
  /**
   * @classdesc
-  * Messaging utils to assemble JSON/Redis BigBlueButton messages 
+  * Messaging utils to assemble JSON/Redis BigBlueButton messages
   * @constructor
   */
 function Messaging() {}
@@ -65,4 +66,10 @@ Messaging.prototype.generateScreenshareRTMPBroadcastStoppedEvent2x =
   return stodrbem.toJson();
 }
 
+Messaging.prototype.generateUserCamBroadcastStoppedEventMessage2x =
+  function(meetingId, userId, streamUrl) {
+  let stodrbem = new UserCamBroadcastStoppedEventMessage2x(meetingId, userId, streamUrl);
+  return stodrbem.toJson();
+}
+
 module.exports = new Messaging();
diff --git a/labs/bbb-webrtc-sfu/lib/bbb/messages/video/UserCamBroadcastStoppedEventMessage2x.js b/labs/bbb-webrtc-sfu/lib/bbb/messages/video/UserCamBroadcastStoppedEventMessage2x.js
new file mode 100644
index 0000000000000000000000000000000000000000..a4a320250011ab7d836a1f540e5a2db75e50dc26
--- /dev/null
+++ b/labs/bbb-webrtc-sfu/lib/bbb/messages/video/UserCamBroadcastStoppedEventMessage2x.js
@@ -0,0 +1,18 @@
+/*
+ * 
+ */
+
+var inherits = require('inherits');
+var OutMessage2x = require('../OutMessage2x');
+
+module.exports = function (C) {
+  function UserCamBroadcastStoppedEventMessage2x (meetingId, userId, stream) {
+    UserCamBroadcastStoppedEventMessage2x.super_.call(this, C.USER_CAM_BROADCAST_STOPPED_2x, {sender: 'bbb-webrtc-sfu'}, {meetingId, userId});
+
+    this.core.body = {};
+    this.core.body[C.STREAM_URL] = stream; 
+  };
+
+  inherits(UserCamBroadcastStoppedEventMessage2x, OutMessage2x);
+  return UserCamBroadcastStoppedEventMessage2x;
+}
diff --git a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/media-server.js b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/media-server.js
index d70a7bbffed5b0663313873633af893b5d268f19..1d5c6593aada90545be334a9379c1f94187640a2 100644
--- a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/media-server.js
+++ b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/media-server.js
@@ -113,7 +113,7 @@ module.exports = class MediaServer extends EventEmitter {
     if (source && sink) {
       return new Promise((resolve, reject) => {
         switch (type) {
-          case 'ALL': 
+          case 'ALL':
             source.connect(sink, (error) => {
               if (error) {
                 error = this._handleError(error);
@@ -156,6 +156,7 @@ module.exports = class MediaServer extends EventEmitter {
     Logger.info("[mcs-media] Releasing endpoint", elementId, "from room", room);
     let mediaElement = this._mediaElements[elementId];
     let pipeline = this._mediaPipelines[room];
+
     if (mediaElement && typeof mediaElement.release === 'function') {
       pipeline.activeElements--;
 
diff --git a/labs/bbb-webrtc-sfu/lib/video/VideoManager.js b/labs/bbb-webrtc-sfu/lib/video/VideoManager.js
index 718593aa466201a583eb633ef953f867023276d8..ea007f23b733fa7b92d73dc1ccd07cd7d79daccd 100755
--- a/labs/bbb-webrtc-sfu/lib/video/VideoManager.js
+++ b/labs/bbb-webrtc-sfu/lib/video/VideoManager.js
@@ -64,7 +64,7 @@ let _onMessage = async function (_message) {
       Logger.info('[VideoManager] Received message [' + message.id + '] from connection ' + sessionId);
       Logger.debug('[VideoManager] Message =>', JSON.stringify(message, null, 2));
 
-      video = new Video(bbbGW, message.cameraId, shared, message.connectionId);
+      video = new Video(bbbGW, message.meetingId, message.cameraId, shared, message.connectionId);
 
       // Empty ice queue after starting video
       if (iceQueue) {
@@ -164,7 +164,9 @@ let stopVideo = async function(sessionId, role, cameraId) {
       if (sharedVideo) {
         Logger.info('[VideoManager] Stopping sharer [', sessionId, '][', cameraId,']');
         await sharedVideo.stop();
-        delete sessions[sessionId][cameraId+'-shared'];
+        if (sessions[sessionId][cameraId+'-shared']) {
+          delete sessions[sessionId][cameraId+'-shared'];
+        }
       }
     }
     else if (role === 'viewer') {
@@ -175,6 +177,9 @@ let stopVideo = async function(sessionId, role, cameraId) {
         delete sessions[sessionId][cameraId];
       }
     }
+    if (sessions[sessionId]) {
+      delete sessions[sessionId];
+    }
   }
   catch (err) {
     Logger.error("[VideoManager] Stop error => ", err);
diff --git a/labs/bbb-webrtc-sfu/lib/video/video.js b/labs/bbb-webrtc-sfu/lib/video/video.js
index 67ff0029e60937e98aeab4be47b53d1822df3b21..030515bd89875bc124154365bff304199e10ed4a 100644
--- a/labs/bbb-webrtc-sfu/lib/video/video.js
+++ b/labs/bbb-webrtc-sfu/lib/video/video.js
@@ -5,16 +5,18 @@ const kurentoUrl = config.get('kurentoUrl');
 const MCSApi = require('../mcs-core/lib/media/MCSApiStub');
 const C = require('../bbb/messages/Constants');
 const Logger = require('../utils/Logger');
+const Messaging = require('../bbb/messages/Messaging');
+const h264_sdp = require('../h264-sdp');
 
 var sharedWebcams = {};
 
 module.exports = class Video {
-  constructor(_bbbGW, _id, _shared, _sessionId) {
+  constructor(_bbbGW, _meetingId, _id, _shared, _sessionId) {
     this.mcs = new MCSApi();
     this.bbbGW = _bbbGW;
     this.id = _id;
     this.sessionId = _sessionId;
-    this.meetingId = _id;
+    this.meetingId = _meetingId;
     this.shared = _shared;
     this.role = this.shared? 'share' : 'view'
     this.mediaId = null;
@@ -82,13 +84,12 @@ module.exports = class Video {
           Logger.warn("Setting up a timeout for " + this.sessionId + " camera " + this.id);
           if (!this.notFlowingTimeout) {
             this.notFlowingTimeout = setTimeout(() => {
-              this.bbbGW.publish(JSON.stringify({
-                connectionId: this.sessionId,
-                type: 'video',
-                role: this.role,
-                id : 'playStop',
-                cameraId: this.id,
-              }), C.FROM_VIDEO);
+
+              if (this.shared) {
+                let userCamEvent =
+                  Messaging.generateUserCamBroadcastStoppedEventMessage2x(this.meetingId, this.id, this.id);
+                this.bbbGW.publish(userCamEvent, C.TO_AKKA_APPS, function(error) {});
+              }
             }, config.get('mediaFlowTimeoutDuration'));
           }
         }
@@ -118,6 +119,9 @@ module.exports = class Video {
     Logger.info("[video] Starting video instance for", this.id);
     let sdpAnswer;
 
+    // Force H264
+    sdpOffer = h264_sdp.transform(sdpOffer);
+
     try {
       this.userId = await this.mcs.join(this.meetingId, 'SFU', {});
       Logger.info("[video] MCS join for", this.id, "returned", this.userId);