diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/UserSharedWebcamMessage.java b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/UserSharedWebcamMessage.java
new file mode 100755
index 0000000000000000000000000000000000000000..84d54dbe0607e6b583b00438c2d7a5abb6b6acf7
--- /dev/null
+++ b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/UserSharedWebcamMessage.java
@@ -0,0 +1,57 @@
+package org.bigbluebutton.common.messages;
+
+import java.util.HashMap;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+public class UserSharedWebcamMessage implements ISubscribedMessage {
+  public static final String USER_SHARED_WEBCAM  = "user_shared_webcam_message";
+  public static final String VERSION = "0.0.1";
+
+  public final String meetingId;
+  public final String userId;
+  public final String stream;
+
+  public UserSharedWebcamMessage(String meetingId, String userId, String stream) {
+    this.meetingId = meetingId;
+    this.userId = userId;
+    this.stream = stream;
+  }
+
+  public String toJson() {
+    HashMap<String, Object> payload = new HashMap<String, Object>();
+    payload.put(Constants.MEETING_ID, meetingId);
+    payload.put(Constants.USER_ID, userId);
+    payload.put(Constants.STREAM, stream);
+
+    java.util.HashMap<String, Object> header = MessageBuilder.buildHeader(USER_SHARED_WEBCAM, VERSION, null);
+
+    return MessageBuilder.buildJson(header, payload);
+  }
+
+  public static UserSharedWebcamMessage fromJson(String message) {
+    JsonParser parser = new JsonParser();
+    JsonObject obj = (JsonObject) parser.parse(message);
+
+    if (obj.has("header") && obj.has("payload")) {
+      JsonObject header = (JsonObject) obj.get("header");
+      JsonObject payload = (JsonObject) obj.get("payload");
+
+      if (header.has("name")) {
+        String messageName = header.get("name").getAsString();
+        if (USER_SHARED_WEBCAM.equals(messageName)) {
+          if (payload.has(Constants.MEETING_ID)
+            && payload.has(Constants.USER_ID)
+            && payload.has(Constants.STREAM)) {
+            String id = payload.get(Constants.MEETING_ID).getAsString();
+            String userid = payload.get(Constants.USER_ID).getAsString();
+            String stream = payload.get(Constants.STREAM).getAsString();
+            return new UserSharedWebcamMessage(id, userid, stream);
+          }
+        }
+      }
+    }
+    return null;
+
+  }
+}
diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/UserUnshareWebcamRequestMessage.java b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/UserUnshareWebcamRequestMessage.java
new file mode 100755
index 0000000000000000000000000000000000000000..8b51b3f1e49e79fbb6d9e5da4ad6047500d4836e
--- /dev/null
+++ b/bbb-common-message/src/main/java/org/bigbluebutton/common/messages/UserUnshareWebcamRequestMessage.java
@@ -0,0 +1,59 @@
+package org.bigbluebutton.common.messages;
+
+import java.util.HashMap;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+
+public class UserUnshareWebcamRequestMessage implements ISubscribedMessage {
+  public static final String USER_UNSHARE_WEBCAM_REQUEST  = "user_unshare_webcam_request_message";
+  public static final String VERSION = "0.0.1";
+
+  public final String meetingId;
+  public final String userId;
+  public final String stream;
+
+  public UserUnshareWebcamRequestMessage(String meetingId, String userId, String stream) {
+    this.meetingId = meetingId;
+    this.userId = userId;
+    this.stream = stream;
+  }
+
+  public String toJson() {
+    HashMap<String, Object> payload = new HashMap<String, Object>();
+    payload.put(Constants.MEETING_ID, meetingId);
+    payload.put(Constants.USER_ID, userId);
+    payload.put(Constants.STREAM, stream);
+
+    java.util.HashMap<String, Object> header = MessageBuilder.buildHeader(USER_UNSHARE_WEBCAM_REQUEST, VERSION, null);
+
+    return MessageBuilder.buildJson(header, payload);
+  }
+
+  public static UserUnshareWebcamRequestMessage fromJson(String message) {
+    JsonParser parser = new JsonParser();
+    JsonObject obj = (JsonObject) parser.parse(message);
+
+    if (obj.has("header") && obj.has("payload")) {
+      JsonObject header = (JsonObject) obj.get("header");
+      JsonObject payload = (JsonObject) obj.get("payload");
+
+      if (header.has("name")) {
+        String messageName = header.get("name").getAsString();
+        if (USER_UNSHARE_WEBCAM_REQUEST.equals(messageName)) {
+          if (payload.has(Constants.MEETING_ID)
+            && payload.has(Constants.USER_ID)
+            && payload.has(Constants.STREAM)) {
+            String id = payload.get(Constants.MEETING_ID).getAsString();
+            String userid = payload.get(Constants.USER_ID).getAsString();
+            String stream = payload.get(Constants.STREAM).getAsString();
+            return new UserUnshareWebcamRequestMessage(id, userid, stream);
+          }
+        }
+      }
+    }
+    return null;
+
+  }
+}
diff --git a/bigbluebutton-client/branding/default/style/css/V2Theme.css b/bigbluebutton-client/branding/default/style/css/V2Theme.css
index 75c56dcae44ddf20a569d42859ac0f4370acf31b..bf64488ee2f431f9b85b7e10a655173cafafaf55 100644
--- a/bigbluebutton-client/branding/default/style/css/V2Theme.css
+++ b/bigbluebutton-client/branding/default/style/css/V2Theme.css
@@ -8,6 +8,7 @@
 @namespace layout "org.bigbluebutton.modules.layout.views.*";
 @namespace presentation "org.bigbluebutton.modules.present.ui.views.*";
 @namespace sharednotes "org.bigbluebutton.modules.sharednotes.views.components.*";
+@namespace chat "org.bigbluebutton.modules.chat.views.*";
 
 /*
 //------------------------------
@@ -38,8 +39,8 @@ global {
 	fontFamily     : "Source Sans Pro", Arial, sans-serif;
 	fontSize       : 13;
 	color          : #2A2D33;
-	selectionColor : #3B97D3;
-	focusColor     : #3B97D3;
+	selectionColor : #1070D7;
+	focusColor     : #1070D7;
 }
 
 .defaultShellStyle {
@@ -92,10 +93,10 @@ mx|Application {
 	borderAlphaDisabled : 0;
 
 	fillColorUp         : #EFF5FA;
-	borderColorOver     : #3797D3;
-	borderColorDown     : #3797D3;
+	borderColorOver     : #1070D7;
+	borderColorDown     : #1070D7;
 
-	borderThikness      : 5;
+	borderThickness     : 5;
 	cornerRadius        : 70;
 }
 
@@ -124,16 +125,10 @@ mx|Application {
 */
 
 mx|ApplicationControlBar {
-	cornerRadius      : 0;
-	dropShadowColor   : #ABABAB;
-	dropShadowEnabled : true;
-	fillAlphas        : 1, 1;
-	fillColors        : #FFFFFF, #FFFFFF;
-	backgroundColor   : #FFFFFF;
-	backgroundAlpha   : 1;
-	highlightAlphas   : 0, 0;
-	shadowDistance    : 1;
-	shadowDirection   : center;
+	cornerRadius    : 0;
+	fillAlphas      : 1, 1;
+	fillColors      : #FFFFFF, #FFFFFF;
+	highlightAlphas : 0, 0;
 }
 
 .toolbarSeparator {
@@ -169,25 +164,44 @@ mx|ApplicationControlBar {
 	icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Settings");
 }
 
-.webcamDefaultButtonStyle, .webcamOnButtonStyle, .webcamOffButtonStyle,
-.deskshareDefaultButtonStyle, .deskshareOnButtonStyle, .deskshareOffButtonStyle,
+.webcamDefaultButtonStyle, .webcamOnButtonStyle, .webcamOffButtonStyle, .webcamOverButtonStyle,
+.deskshareDefaultButtonStyle, .deskshareOverButtonStyle, .deskshareOnButtonStyle, .deskshareOffButtonStyle,
 .muteMeDefaultButtonStyle, .muteMeOnButtonStyle, .muteMeOffButtonStyle {
-	fillColorSelectedUp     : #3B97D3;
-	fillColorSelectedOver   : #2E8BB8;
-	fillColorSelectedDown   : #3B97D3;
-	borderColorSelectedUp   : #3B97D3;
-	borderColorSelectedOver : #2E8BB8;
-	borderColorSelectedDown : #3B97D3;
+	fillColorOver           : #FFFFFF;
+	borderColorOver         : #1070D7;
+	fillColorSelectedUp     : #1070D7;
+	fillColorSelectedOver   : #0A5EAC;
+	fillColorSelectedDown   : #1070D7;
+	borderColorSelectedUp   : #1070D7;
+	borderColorSelectedOver : #0A5EAC;
+	borderColorSelectedDown : #1070D7;
 }
 
-.voiceConfDefaultButtonStyle, .voiceConfActiveButtonStyle, .voiceConfInactiveButtonStyle {
+.voiceConfDefaultButtonStyle, .voiceConfOverButtonStyle, .voiceConfActiveButtonStyle, .voiceConfInactiveButtonStyle {
+	/* Normal state */
+	fillColorOver           : #FFFFFF;
+	borderColorOver         : #DE2721;
 	/* Selected state */
-	fillColorSelectedUp     : #FF6666;
-	fillColorSelectedOver   : #FF6666;
-	fillColorSelectedDown   : #FF6666;
-	borderColorSelectedUp   : #FF6666;
-	borderColorSelectedOver : #FF6666;
-	borderColorSelectedDown : #FF6666;
+	backgroundColorOver     : #FFFFFF;
+	borderColorOver         : #DE2721;
+	fillColorSelectedUp     : #DE2721;
+	fillColorSelectedOver   : #B4201B;
+	fillColorSelectedDown   : #DE2721;
+	borderColorSelectedUp   : #DE2721;
+	borderColorSelectedOver : #B4201B;
+	borderColorSelectedDown : #DE2721;
+}
+
+.webcamOnButtonStyle, .webcamOffButtonStyle {
+	fillColorUp     : #1070D7;
+	borderColorUp   : #1070D7;
+	fillColorOver   : #0A5EAC;
+	fillColorDown   : #1070D7;
+	borderColorOver : #0A5EAC;
+
+	iconColor       : #FFFFFF;
+	iconColorOver   : #FFFFFF;
+	iconColorDown   : #FFFFFF;
 }
 
 .voiceConfDefaultButtonStyle {
@@ -195,8 +209,13 @@ mx|ApplicationControlBar {
 	disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Audio_Disabled");
 }
 
+.voiceConfOverButtonStyle {
+	icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Audio_Red");
+}
+
 .voiceConfActiveButtonStyle {
-	icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Audio_On");
+	icon         : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Audio_On");
+	disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Audio_On_Disabled");
 }
 
 .voiceConfInactiveButtonStyle {
@@ -208,6 +227,10 @@ mx|ApplicationControlBar {
 	disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Webcam_Disabled");
 }
 
+.webcamOverButtonStyle {
+	icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Webcam_Blue");
+}
+
 .webcamOnButtonStyle {
 	icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Webcam_On");
 }
@@ -220,6 +243,10 @@ mx|ApplicationControlBar {
 	icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Deskshare");
 }
 
+.deskshareOverButtonStyle {
+	icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Deskshare_Blue");
+}
+
 .deskshareOnButtonStyle {
 	icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Deskshare_White");
 }
@@ -243,12 +270,13 @@ mx|ApplicationControlBar {
 }
 
 .muteMeDefaultButtonStyle {
-	icon         : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Microphone");
-	disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Microphone_Disabled");
+	glowFilterColor : #1070D7;
+	icon            : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Microphone");
+	disabledIcon    : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Microphone_Disabled");
 }
 
 .muteMeOnButtonStyle {
-	icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Microphone_On");
+	icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Microphone_White");
 }
 
 .muteMeOffButtonStyle {
@@ -256,30 +284,23 @@ mx|ApplicationControlBar {
 }
 
 .quickWindowLinkStyle {
-	/* FIXME */
 	paddingLeft       : 0;
 	paddingRight      : 0;
 	textDecoration    : underline;
-	rollOverColor     : #CCCCCC;
-	selectionColor    : #999999;
-	color             : #FFFFFF;
-	textRollOverColor : #504F3D;
-	textSelectedColor : #504F3D;
+	rollOverColor     : #1070D7;
+	selectionColor    : #0A5EAC;
+	color             : #4E5A66;
+	textRollOverColor : #FFFFFF;
+	textSelectedColor : #FFFFFF;
 }
 
 .helpLinkButtonStyle {
-	/* FIXME */
-	paddingLeft       : 4;
-	paddingRight      : 4;
-	paddingTop        : 2;
-	paddingBottom     : 2;
-	fontSize          : 16;
-	rollOverColor     : #CCCCCC;
-	selectionColor    : #999999;
-	color             : #FFFFFF;
-	textRollOverColor : #504F3D;
-	textSelectedColor : #504F3D;
-	fontWeight        : bold;
+	cornerRadius   : 2;
+	rollOverColor  : #1070D7;
+	selectionColor : #0A5EAC;
+	icon           : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Help");
+	overIcon       : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Help_White");
+	downIcon       : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Help_White");
 }
 
 /*
@@ -330,14 +351,14 @@ mx|Button {
 	paddingTop                  : 8;
 	paddingBottom               : 8;
 	cornerRadius                : 2;
-	color                       : #5E6D73;
-	textRollOverColor           : #5E6D73;
-	textSelectedColor           : #5E6D73;
+	color                       : #4E5A66;
+	textRollOverColor           : #4E5A66;
+	textSelectedColor           : #4E5A66;
 	fontSize                    : 14;
 	skin                        : ClassReference("org.bigbluebutton.skins.ButtonSkin");
 
 	/* Normal state */
-	fillColorUp                 : #F0F2F6;
+	fillColorUp                 : #FFFFFF;
 	fillColorOver               : #CDD4DB;
 	fillColorDown               : #ACB2B7;
 	fillColorDisabled           : #F0F2F6;
@@ -351,7 +372,7 @@ mx|Button {
 	borderAlphaDown             : 1;
 	borderAlphaDisabled         : 1;
 
-	borderThikness              : 1;
+	borderThickness             : 1;
 
 	/* Selected state */
 	fillColorSelectedUp         : #F0F2F6;
@@ -450,9 +471,9 @@ views|ClientStatusItemRenderer {
 	cornerRadius      : 20;
 	borderStyle       : none;
 	borderThickness   : 0;
-	fillColorUp       : #3B97D3;
-	fillColorOver     : #2E8BB8;
-	fillColorDown     : #3B97D3;
+	fillColorUp       : #1070D7;
+	fillColorOver     : #0A5EAC;
+	fillColorDown     : #1070D7;
 	fillColorDisabled : #F0F2F6;
 }
 
@@ -523,7 +544,7 @@ mx|ComboBox {
 
 	iconColor           : #5E6C73;
 
-	borderThikness      : 1;
+	borderThickness     : 1;
 
 	skin                : ClassReference("org.bigbluebutton.skins.ComboBoxSkin");
 }
@@ -558,7 +579,7 @@ mx|DataGrid {
 .deskshareWarningLabelStyle {
 	fontWeight : bold;
 	fontSize   : 18;
-	color      : #3B97D3;
+	color      : #1070D7;
 }
 
 .deskshareWarningBackgroundStyle {
@@ -707,6 +728,9 @@ flexlib|MDIWindow {
 	restoreBtnStyleName  : "mdiMaximizeButtonStyle";
 	minimizeBtnStyleName : "mdiMinimizeButtonStyle";
 
+	paddingLeft          : 0;
+	paddingRight         : 0;
+
 	showHeaderSeparator  : true;
 }
 
@@ -725,8 +749,10 @@ flexlib|MDIWindow {
 }
 
 .mdiWindowTitle {
-	color    : #2A2D33;
-	fontSize : 12;
+	color        : #2A2D33;
+	fontSize     : 12;
+	paddingLeft  : 12;
+	paddingRight : 12;
 }
 
 .mdiWindowNoFocus {
@@ -813,18 +839,21 @@ views|NetworkStatsWindow {
 
 mx|PopUpButton {
 	/* Normal state */
-	fillColorUp         : #F0F2F6;
+	fillColorUp         : #FFFFFF;
 	fillColorOver       : #CDD4DB;
 	fillColorDown       : #ACB2B7;
 	fillColorDisabled   : #F0F2F6;
 	borderColorUp       : #CDD4DB;
-	borderColorOver     : #CDD4DB;
-	borderColorDown     : #ACB2B7;
+	borderColorOver     : #1070D7;
+	borderColorDown     : #0A5EAC;
 	borderColorDisabled : #CDD4DB;
 
-	borderThikness      : 1;
+	/* Icon states */
+	iconColor           : #4E5A66;
+	iconColorOver       : #1070D7;
+	iconColorDown       : #4E5A66;
 
-	iconColor           : #5E6C73;
+	borderThickness     : 1;
 
 	skin                : ClassReference("org.bigbluebutton.skins.PopUpButtonSkin");
 }
@@ -919,7 +948,7 @@ presentation|UploadedPresentationRenderer {
 	tickOffset           : 2;
 	tickLength           : 5;
 	tickThickness        : 2;
-	tickColor            : #3B97D3;
+	tickColor            : #1070D7;
 	showTrackHighlight   : true;
 	invertThumbDirection : false;
 	borderColor          : #CDD4DB;
@@ -952,10 +981,6 @@ presentation|FileUploadWindow {
 	color : #2A2D33;
 }
 
-.presentationUploadCancelButtonStyle {
-	color : #2A2D33;
-}
-
 .presentationUploadShowButtonStyle {
 	color : #2A2D33;
 }
@@ -1000,7 +1025,7 @@ poll|PollChoicesModal {
 
 mx|ProgressBar {
 	color       : #8A9AA7;
-	barColor    : #3697D3;
+	barColor    : #1070D7;
 	trackColors : #FFFFFF, #FFFFFF;
 	borderColor : #CDD4DB;
 	barSkin     : ClassReference("org.bigbluebutton.skins.ProgressBarSkin");
@@ -1067,11 +1092,15 @@ sharednotes|SharedNotesRichTextEditor {
 */
 
 mx|TitleWindow {
-	borderColor          : #FFFFFF;
-	cornerRadius         : 4;
-	roundedBottomCorners : true;
-	dropShadowEnabled    : true;
-	shadowDistance       : 0;
+	closeButtonDisabledSkin : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Close_Button_Disabled");
+	closeButtonDownSkin     : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Close_Button_Down");
+	closeButtonOverSkin     : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Close_Button_Over");
+	closeButtonUpSkin       : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Close_Button_Up");
+	borderColor             : #FFFFFF;
+	cornerRadius            : 4;
+	roundedBottomCorners    : true;
+	dropShadowEnabled       : true;
+	shadowDistance          : 0;
 }
 
 /*
@@ -1082,7 +1111,7 @@ mx|TitleWindow {
 
 mx|ToolTip {
 	borderSkin      : ClassReference("org.bigbluebutton.skins.ToolTipSkin");
-	backgroundColor : #3B97D3;
+	backgroundColor : #1070D7;
 	color           : #FFFFFF;
 	fontSize        : 13;
 	backgroundAlpha : 0.9;
@@ -1090,7 +1119,7 @@ mx|ToolTip {
 }
 
 .errorTip {
-	borderColor : #FF6666;
+	borderColor : #DE2721;
 }
 
 /*
@@ -1124,16 +1153,17 @@ users|StatusItemRenderer {
 }
 
 users|MediaItemRenderer {
-	iconAudioMuted : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Audio_Muted");
-	iconAudio      : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Audio");
-	iconSound      : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Sound");
-	iconLock       : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Lock");
-	iconUnlock     : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Unlock");
-	iconSettings   : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Settings");
-	iconWebcam     : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Webcam");
-	iconDemote     : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Demote");
-	iconPromote    : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Promote");
-	iconEject      : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Eject");
+	iconAudioMuted  : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Audio_Muted");
+	iconAudio       : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Audio");
+	iconSound       : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Sound");
+	iconLock        : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Lock");
+	iconUnlock      : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Unlock");
+	iconSettings    : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Settings");
+	iconWebcam      : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Webcam");
+	iconDemote      : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Demote");
+	iconPromote     : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Promote");
+	iconEject       : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Eject");
+	glowFilterColor : #1070D7;
 }
 
 users|NameItemRenderer {
@@ -1181,7 +1211,7 @@ users|MoodMenu {
 	/* FIXME - start*/
 	iconMoodSpeakFaster : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Mood_Away");
 	iconMoodSpeakSlower : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Mood_Away");
-	iconMoodSpeakLouder : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Mood_Away");
+	iconMoodSpeakLouder : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Mood_Speak_Louder");
 	iconMoodSpeakSofter : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Mood_Away");
 	/* FIXME - end */
 	iconMoodBeRightBack : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_User_Mood_Away");
@@ -1200,13 +1230,13 @@ users|MoodMenu {
 videoconf|UserGraphicHolder {
 	iconPresenter      : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Video_Presenter");
 	iconModerator      : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Video_Moderator");
-	iconClose          : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Video_Moderator");
+	iconClose          : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Close_Video");
 	iconFullScreen     : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Fullscreen_White");
 	iconExitFullScreen : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Exit_Fullscreen_White");
 }
 
 .videoToolbarBackgroundTalkingStyle {
-	backgroundColor : #3B97D3;
+	backgroundColor : #1070D7;
 	backgroundAlpha : 0.5;
 }
 
diff --git a/bigbluebutton-client/branding/default/style/css/assets/swf/v2_skin.fla b/bigbluebutton-client/branding/default/style/css/assets/swf/v2_skin.fla
index 399f8632f24503deb1ee8b0d309153e9ca6bbf2d..033ca1db7c960307e522653da89003ab48148174 100644
Binary files a/bigbluebutton-client/branding/default/style/css/assets/swf/v2_skin.fla and b/bigbluebutton-client/branding/default/style/css/assets/swf/v2_skin.fla differ
diff --git a/bigbluebutton-client/branding/default/style/css/assets/swf/v2_skin.swf b/bigbluebutton-client/branding/default/style/css/assets/swf/v2_skin.swf
index 77f4092b0b6f33eca48709f372196b7ff55a2404..81fecfff53338e76e7208ef925dfa6c86b442f86 100644
Binary files a/bigbluebutton-client/branding/default/style/css/assets/swf/v2_skin.swf and b/bigbluebutton-client/branding/default/style/css/assets/swf/v2_skin.swf differ
diff --git a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ButtonSkin.as b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ButtonSkin.as
index 6144a55424efa98f45ffe1ab06fbd56d2d55d7e1..17869687a4fd46b750df112b26f0d5871aa91337 100644
--- a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ButtonSkin.as
+++ b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ButtonSkin.as
@@ -94,7 +94,7 @@ package org.bigbluebutton.skins {
 			var borderAlphaDown:uint = getStyle("borderAlphaDown");
 			var borderAlphaDisabled:uint = getStyle("borderAlphaDisabled");
 
-			var borderThikness:uint = getStyle("borderThikness");
+			var borderThickness:uint = getStyle("borderThickness");
 
 			var fillColorUp:uint = getStyle("fillColorUp");
 			var fillColorOver:uint = getStyle("fillColorOver");
@@ -114,7 +114,7 @@ package org.bigbluebutton.skins {
 
 			// Corner radius
 			var cr:Number = Math.max(0, cornerRadius);
-			var cr1:Number = Math.max(0, cornerRadius - borderThikness);
+			var cr1:Number = Math.max(0, cornerRadius - borderThickness);
 
 			graphics.clear();
 
@@ -160,7 +160,7 @@ package org.bigbluebutton.skins {
 					drawRoundRect(0, 0, w, h, cr, borderColorUp, borderAlphaUp);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorUp, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorUp, 1);
 					break;
 				}
 
@@ -169,7 +169,7 @@ package org.bigbluebutton.skins {
 					drawRoundRect(0, 0, w, h, cr, borderColorOver, borderAlphaOver);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorOver, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorOver, 1);
 					break;
 				}
 
@@ -178,7 +178,7 @@ package org.bigbluebutton.skins {
 					drawRoundRect(0, 0, w, h, cr, borderColorDown, borderAlphaDown);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorDown, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDown, 1);
 					break;
 				}
 
@@ -188,7 +188,7 @@ package org.bigbluebutton.skins {
 					drawRoundRect(0, 0, w, h, cr, borderColorDisabled, borderAlphaDisabled);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorDisabled, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDisabled, 1);
 					break;
 				}
 
diff --git a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ComboBoxSkin.as b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ComboBoxSkin.as
index 435cf4e0d3ee3415c97baa8673bcd1f42c4cd5dc..60cc05bffc9cc7cedf4c600bfd13ccce794c50ec 100644
--- a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ComboBoxSkin.as
+++ b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/ComboBoxSkin.as
@@ -73,7 +73,7 @@ package org.bigbluebutton.skins {
 			var borderColorDown:uint = getStyle("borderColorDown");
 			var borderColorDisabled:uint = getStyle("borderColorDisabled");
 
-			var borderThikness:uint = getStyle("borderThikness");
+			var borderThickness:uint = getStyle("borderThickness");
 
 			var fillColorUp:uint = getStyle("fillColorUp");
 			var fillColorOver:uint = getStyle("fillColorOver");
@@ -90,7 +90,7 @@ package org.bigbluebutton.skins {
 
 			var cornerRadius1:Number = Math.max(cornerRadius - 1, 0);
 			var cr:Object = {tl: 0, tr: cornerRadius, bl: 0, br: cornerRadius};
-			var cr1:Object = {tl: 0, tr: cornerRadius - borderThikness, bl: 0, br: cornerRadius - borderThikness};
+			var cr1:Object = {tl: 0, tr: cornerRadius - borderThickness, bl: 0, br: cornerRadius - borderThickness};
 
 			var arrowOnly:Boolean = true;
 
@@ -114,7 +114,7 @@ package org.bigbluebutton.skins {
 					drawRoundRect(0, 0, w, h, cr, borderColorUp, 1);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorUp, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorUp, 1);
 
 					if (!arrowOnly) {
 						// line
@@ -131,7 +131,7 @@ package org.bigbluebutton.skins {
 					drawRoundRect(0, 0, w, h, cr, borderColorOver, 1);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorOver, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorOver, 1);
 
 					if (!arrowOnly) {
 						// line
@@ -148,7 +148,7 @@ package org.bigbluebutton.skins {
 					drawRoundRect(0, 0, w, h, cr, borderColorDown, 1);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorDown, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDown, 1);
 
 					if (!arrowOnly) {
 						// line
@@ -165,7 +165,7 @@ package org.bigbluebutton.skins {
 					drawRoundRect(0, 0, w, h, cr, borderColorDisabled, 1);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorDisabled, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDisabled, 1);
 
 					if (!arrowOnly) {
 						// line
diff --git a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/PopUpButtonSkin.as b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/PopUpButtonSkin.as
index 0af5c6a741a791ce4ccf4627b5db0a719c9ea81f..20f6434a9b17992db92cb3c60f1ae6a2a11309b6 100644
--- a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/PopUpButtonSkin.as
+++ b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/PopUpButtonSkin.as
@@ -38,7 +38,7 @@
 
 package org.bigbluebutton.skins {
 	import flash.display.DisplayObject;
-
+	
 	import mx.core.IFlexDisplayObject;
 	import mx.core.IProgrammaticSkin;
 	import mx.core.UIComponent;
@@ -115,7 +115,7 @@ package org.bigbluebutton.skins {
 			var borderColorDown:uint = getStyle("borderColorDown");
 			var borderColorDisabled:uint = getStyle("borderColorDisabled");
 
-			var borderThikness:uint = getStyle("borderThikness");
+			var borderThickness:uint = getStyle("borderThickness");
 
 			var fillColorUp:uint = getStyle("fillColorUp");
 			var fillColorOver:uint = getStyle("fillColorOver");
@@ -124,6 +124,9 @@ package org.bigbluebutton.skins {
 
 			// User-defined styles.
 			var arrowColor:uint = getStyle("iconColor");
+			var arrowColorOver:uint = getStyle("iconColorOver");
+			var arrowColorDown:uint = getStyle("iconColorDown");
+			
 			var cornerRadius:Number = getStyle("cornerRadius");
 
 			var popUpIcon:IFlexDisplayObject = IFlexDisplayObject(getChildByName("popUpIcon"));
@@ -136,7 +139,7 @@ package org.bigbluebutton.skins {
 				DisplayObject(popUpIcon).visible = true;
 			}
 
-			var arrowButtonWidth:Number = Math.max(getStyle("arrowButtonWidth"), popUpIcon.width + 3 + borderThikness);
+			var arrowButtonWidth:Number = Math.max(getStyle("arrowButtonWidth"), popUpIcon.width + 3 + borderThickness);
 
 			var dividerPosX:Number = w - arrowButtonWidth;
 
@@ -144,7 +147,7 @@ package org.bigbluebutton.skins {
 
 			// Corner radius
 			var cr:Number = Math.max(0, cornerRadius);
-			var cr1:Number = Math.max(0, cornerRadius - borderThikness);
+			var cr1:Number = Math.max(0, cornerRadius - borderThickness);
 
 			graphics.clear();
 
@@ -154,41 +157,43 @@ package org.bigbluebutton.skins {
 					drawRoundRect(0, 0, w, h, cr, borderColorUp, 1);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorUp, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorUp, 1);
 
 					// Separator
-					drawRoundRect(dividerPosX, borderThikness, borderThikness, h - (borderThikness * 2), cr, borderColorUp, 1);
+					drawRoundRect(dividerPosX, borderThickness, borderThickness, h - (borderThickness * 2), cr, borderColorUp, 1);
 
 					break;
 				}
 				case "overSkin": // for hover on the main button (left) side
 				{
 					// button border/edge
-					drawRoundRect(0, 0, w, h, cr, borderColorUp, 1);
+					drawRoundRect(0, 0, w, h, cr, borderColorOver, 1);
 
-					drawRoundRect(dividerPosX, borderThikness, borderThikness, h - (borderThikness * 2), 0, borderColorOver, 1);
+					drawRoundRect(dividerPosX, borderThickness, borderThickness, h - (borderThickness * 2), 0, borderColorOver, 1);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorUp, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorUp, 1);
 
 					// left/main button fill
-					drawRoundRect(borderThikness, borderThikness, w - arrowButtonWidth - (borderThikness * 2), h - (borderThikness * 2), getRadius(cr1, true), fillColorOver, 1);
+					drawRoundRect(borderThickness, borderThickness, w - arrowButtonWidth - (borderThickness * 2), h - (borderThickness * 2), getRadius(cr1, true), fillColorOver, 1);
 
 					break;
 				}
 
 				case "popUpOverSkin": // for hover on the arrow-button (right) side
 				{
+					arrowColor = arrowColorOver;
+					
 					// button border/edge
-					drawRoundRect(0, 0, w, h, cr, borderColorUp, 1);
+					drawRoundRect(0, 0, w, h, cr, borderColorOver, 1);
 
-					drawRoundRect(dividerPosX, borderThikness, borderThikness, h - (borderThikness * 2), 0, borderColorOver, 1);
+					drawRoundRect(dividerPosX, borderThickness, borderThickness, h - (borderThickness * 2), 0, borderColorOver, 1);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), getRadius(cr1, true), fillColorUp, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), getRadius(cr1, true), fillColorUp, 1);
 
 					// right button fill
-					drawRoundRect(dividerPosX + borderThikness, borderThikness, arrowButtonWidth - (borderThikness * 2), h - (borderThikness * 2), getRadius(cr1, false), fillColorOver, 1);
+					drawRoundRect(dividerPosX + borderThickness, borderThickness, arrowButtonWidth - (borderThickness * 2), h - (borderThickness * 2), getRadius(cr1, false), fillColorOver, 1);
 
 					break;
 				}
@@ -196,31 +201,33 @@ package org.bigbluebutton.skins {
 				case "downSkin": // for press on the main button (left) side
 				{
 					// button border/ddge
-					drawRoundRect(0, 0, w, h, cr, borderColorUp, 1);
+					drawRoundRect(0, 0, w, h, cr, borderColorDown, 1);
 
-					drawRoundRect(dividerPosX, borderThikness, borderThikness, h - (borderThikness * 2), 0, borderColorDown, 1);
+					drawRoundRect(dividerPosX, borderThickness, borderThickness, h - (borderThickness * 2), 0, borderColorDown, 1);
 
 					// button fill                
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorUp, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorUp, 1);
 
 					// left/main button fill
-					drawRoundRect(borderThikness, borderThikness, w - arrowButtonWidth - (borderThikness * 2), h - (borderThikness * 2), getRadius(cr1, true), fillColorDown, 1);
+					drawRoundRect(borderThickness, borderThickness, w - arrowButtonWidth - (borderThickness * 2), h - (borderThickness * 2), getRadius(cr1, true), fillColorDown, 1);
 
 					break;
 				}
 
 				case "popUpDownSkin": // for press on the arrow-button (right) side
 				{
+					arrowColor = arrowColorDown;
+					
 					// button border/edge
-					drawRoundRect(0, 0, w, h, cr, borderColorUp, 1);
+					drawRoundRect(0, 0, w, h, cr, borderColorDown, 1);
 
-					drawRoundRect(dividerPosX, borderThikness, borderThikness, h - (borderThikness * 2), 0, fillColorDown, 1);
+					drawRoundRect(dividerPosX, borderThickness, borderThickness, h - (borderThickness * 2), 0, borderColorDown, 1);
 
 					// button fill                
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorUp, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorUp, 1);
 
 					// right button fill
-					drawRoundRect(dividerPosX + borderThikness, borderThikness, arrowButtonWidth - (borderThikness * 2), h - (borderThikness * 2), getRadius(cr1, false), fillColorDown, 1);
+					drawRoundRect(dividerPosX + borderThickness, borderThickness, arrowButtonWidth - (borderThickness * 2), h - (borderThickness * 2), getRadius(cr1, false), fillColorDown, 1);
 
 					break;
 				}
@@ -231,10 +238,10 @@ package org.bigbluebutton.skins {
 					// outer edge
 					drawRoundRect(0, 0, w, h, cornerRadius, fillColorDisabled, 1);
 
-					drawRoundRect(dividerPosX, borderThikness, borderThikness, h - (borderThikness * 2), 0, borderColorDisabled, 1);
+					drawRoundRect(dividerPosX, borderThickness, borderThickness, h - (borderThickness * 2), 0, borderColorDisabled, 1);
 
 					// button fill
-					drawRoundRect(borderThikness, borderThikness, w - (borderThikness * 2), h - (borderThikness * 2), cr1, fillColorDisabled, 1);
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDisabled, 1);
 
 					break;
 				}
diff --git a/bigbluebutton-client/locale/en_US/bbbResources.properties b/bigbluebutton-client/locale/en_US/bbbResources.properties
index 87a288a0cf5da88ed071f2e9ccd9f71f6cfb162b..f0bd19a1493c12bdfc2f0cfcc08ce27d30328f07 100755
--- a/bigbluebutton-client/locale/en_US/bbbResources.properties
+++ b/bigbluebutton-client/locale/en_US/bbbResources.properties
@@ -254,7 +254,6 @@ bbb.presentation.error.convert.notsupported = Error: The uploaded document is un
 bbb.presentation.error.convert.nbpage = Error: Failed to determine the number of pages in the uploaded document.
 bbb.presentation.error.convert.maxnbpagereach = Error: The uploaded document has too many pages.
 bbb.presentation.converted = Converted {0} of {1} slides.
-bbb.presentation.ok = OK
 bbb.presentation.slider = Presentation zoom level
 bbb.presentation.slideloader.starttext = Slide text start
 bbb.presentation.slideloader.endtext = Slide text end
@@ -518,6 +517,7 @@ bbb.notes.cmpColorPicker.toolTip = Text Color
 bbb.notes.saveBtn = Save
 bbb.notes.saveBtn.toolTip = Save Note
 bbb.sharedNotes.title = Shared notes
+bbb.sharedNotes.quickLink.label = Shared notes Window
 bbb.sharedNotes.name = Note name
 bbb.sharedNotes.save.toolTip = Save notes to file
 bbb.sharedNotes.save.complete = Notes were successfully saved
diff --git a/bigbluebutton-client/resources/config.xml.template b/bigbluebutton-client/resources/config.xml.template
index 24a7da81262991dcb7c691a239e60c634e344ea0..13d8767c76c18aad22aa552592e2c62ec7e35a9d 100755
--- a/bigbluebutton-client/resources/config.xml.template
+++ b/bigbluebutton-client/resources/config.xml.template
@@ -1,7 +1,6 @@
 <?xml version="1.0" ?>
 <config>
     <localeversion suppressWarning="false">0.9.0</localeversion>
-    <version>VERSION</version>
     <help url="http://HOST/help.html"/>
     <javaTest url="http://HOST/testjava.html"/>
     <porttest host="HOST" application="video/portTest" timeout="10000"/>    
@@ -14,7 +13,7 @@
     <browserVersions chrome="CHROME_VERSION" firefox="FIREFOX_VERSION" flash="FLASH_VERSION" java="1.7.0_51" />
     <layout showLogButton="false" defaultLayout="bbb.layout.name.defaultlayout"
             showToolbar="true" showFooter="true" showMeetingName="true" showHelpButton="true" 
-            showLogoutWindow="true" showLayoutTools="true" confirmLogout="true" showNetworkMonitor="true"
+            showLogoutWindow="true" showLayoutTools="true" confirmLogout="true" showNetworkMonitor="false"
             showRecordingNotification="true" logoutOnStopRecording="false"/>
     <meeting muteOnStart="false" />
     <breakoutRooms enabled="true" record="false" />
@@ -119,7 +118,7 @@
 		<module name="LayoutModule" url="http://HOST/client/LayoutModule.swf?v=VERSION"
 			uri="rtmp://HOST/bigbluebutton"
 			layoutConfig="http://HOST/client/conf/layout.xml"
-			enableEdit="true"
+			enableEdit="false"
 		/>
 
 		<module name="SharedNotesModule" url="http://HOST/client/SharedNotesModule.swf?v=VERSION"
diff --git a/bigbluebutton-client/resources/prod/logo.swf b/bigbluebutton-client/resources/prod/logo.swf
index 19ef9166c7dd8b9ac370a9e49798b49a04deb020..20137460bba09dc860919b34eddf55f5e68fddad 100644
Binary files a/bigbluebutton-client/resources/prod/logo.swf and b/bigbluebutton-client/resources/prod/logo.swf differ
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/events/ShortcutEvent.as b/bigbluebutton-client/src/org/bigbluebutton/main/events/ShortcutEvent.as
index e1861fcb516ff5c8966468338ccb05ee3497fbf7..c795de2182bea54f65656b5b1a332d7a34a27f63 100644
--- a/bigbluebutton-client/src/org/bigbluebutton/main/events/ShortcutEvent.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/events/ShortcutEvent.as
@@ -49,6 +49,8 @@ package org.bigbluebutton.main.events {
 		
 		public static const FOCUS_CAPTION_WINDOW:String = 'FOCUS_CAPTION_WINDOW';
 		
+		public static const FOCUS_SHARED_NOTES_WINDOW:String = 'FOCUS_SHARED_NOTES_WINDOW';
+		
 		public static const REMOTE_FOCUS_DESKTOP:String = 'REMOTE_FOCUS_DESKTOP';
 		public static const REMOTE_FOCUS_WEBCAM:String = 'REMOTE_FOCUS_WEBCAM';
 		// Remote focus microphone not necessary; audio options already hog focus
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/options/LayoutOptions.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/options/LayoutOptions.as
index 0d4cdabebba6488922df8edc1df40f1ddebacc53..858976ec3dda6ec16c25b2f8e51eb8de1aff09a7 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/options/LayoutOptions.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/options/LayoutOptions.as
@@ -52,7 +52,7 @@ package org.bigbluebutton.main.model.options {
 		public var logoutOnStopRecording:Boolean = false;
 
 		[Bindable]
-		public var showNetworkMonitor:Boolean = true;
+		public var showNetworkMonitor:Boolean = false;
 
 		public var defaultLayout:String = "Default";
 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
index efe5511dfcc2c7bedb0b76c6d3a74715f4e6935b..27fdaad4d96cebf21fc1dc35876833ab069ee2ac 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
@@ -85,68 +85,69 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 	</fx:Declarations>
 	<fx:Script>
 		<![CDATA[
-            import com.asfusion.mate.events.Dispatcher;
-            
-            import flash.events.Event;
-            import flash.events.FullScreenEvent;
-            import flash.events.IOErrorEvent;
-            import flash.events.TextEvent;
-            import flash.geom.Point;
-            import flash.net.navigateToURL;
-            
-            import mx.binding.utils.ChangeWatcher;
-            import mx.collections.ArrayCollection;
-            import mx.controls.Alert;
-            import mx.core.FlexGlobals;
-            import mx.core.IFlexDisplayObject;
-            import mx.core.UIComponent;
-            import mx.events.FlexEvent;
-            
-            import flexlib.mdi.effects.effectsLib.MDIVistaEffects;
-            
-            import org.as3commons.lang.StringUtils;
-            import org.as3commons.logging.api.ILogger;
-            import org.as3commons.logging.api.getClassLogger;
-            import org.bigbluebutton.common.IBbbModuleWindow;
-            import org.bigbluebutton.common.events.AddUIComponentToMainCanvas;
-            import org.bigbluebutton.common.events.CloseWindowEvent;
-            import org.bigbluebutton.common.events.OpenWindowEvent;
-            import org.bigbluebutton.common.events.ToolbarButtonEvent;
-            import org.bigbluebutton.core.BBB;
-            import org.bigbluebutton.core.Options;
-            import org.bigbluebutton.core.PopUpUtil;
-            import org.bigbluebutton.core.UsersUtil;
-            import org.bigbluebutton.core.events.LockControlEvent;
-            import org.bigbluebutton.core.events.NewGuestWaitingEvent;
-            import org.bigbluebutton.core.events.SwitchedLayoutEvent;
-            import org.bigbluebutton.core.vo.LockSettingsVO;
-            import org.bigbluebutton.main.events.AppVersionEvent;
-            import org.bigbluebutton.main.events.BBBEvent;
-            import org.bigbluebutton.main.events.BreakoutRoomEvent;
-            import org.bigbluebutton.main.events.ClientStatusEvent;
-            import org.bigbluebutton.main.events.ConfigLoadedEvent;
-            import org.bigbluebutton.main.events.ExitApplicationEvent;
-            import org.bigbluebutton.main.events.InvalidAuthTokenEvent;
-            import org.bigbluebutton.main.events.MeetingNotFoundEvent;
-            import org.bigbluebutton.main.events.ModuleLoadEvent;
-            import org.bigbluebutton.main.events.NetworkStatsEvent;
-            import org.bigbluebutton.main.events.ShortcutEvent;
-            import org.bigbluebutton.main.model.Guest;
-            import org.bigbluebutton.main.model.ImageLoader;
-            import org.bigbluebutton.main.model.options.BrandingOptions;
-            import org.bigbluebutton.main.model.options.BrowserVersionsOptions;
-            import org.bigbluebutton.main.model.options.LanguageOptions;
-            import org.bigbluebutton.main.model.options.LayoutOptions;
-            import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
-            import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent;
-            import org.bigbluebutton.modules.phone.events.FlashMicSettingsEvent;
-            import org.bigbluebutton.modules.phone.events.WebRTCCallEvent;
-            import org.bigbluebutton.modules.phone.events.WebRTCEchoTestEvent;
-            import org.bigbluebutton.modules.phone.events.WebRTCMediaEvent;
-            import org.bigbluebutton.modules.phone.models.PhoneOptions;
-            import org.bigbluebutton.modules.users.views.BreakoutRoomSettings;
-            import org.bigbluebutton.modules.videoconf.events.ShareCameraRequestEvent;
-            import org.bigbluebutton.util.i18n.ResourceUtil;
+			import com.asfusion.mate.events.Dispatcher;
+			
+			import flash.events.Event;
+			import flash.events.FullScreenEvent;
+			import flash.events.IOErrorEvent;
+			import flash.events.TextEvent;
+			import flash.geom.Point;
+			import flash.net.navigateToURL;
+			
+			import flexlib.mdi.effects.effectsLib.MDIVistaEffects;
+			
+			import mx.binding.utils.ChangeWatcher;
+			import mx.collections.ArrayCollection;
+			import mx.controls.Alert;
+			import mx.core.FlexGlobals;
+			import mx.core.IFlexDisplayObject;
+			import mx.core.UIComponent;
+			import mx.events.FlexEvent;
+			
+			import org.as3commons.lang.StringUtils;
+			import org.as3commons.logging.api.ILogger;
+			import org.as3commons.logging.api.getClassLogger;
+			import org.bigbluebutton.common.IBbbModuleWindow;
+			import org.bigbluebutton.common.events.AddUIComponentToMainCanvas;
+			import org.bigbluebutton.common.events.CloseWindowEvent;
+			import org.bigbluebutton.common.events.OpenWindowEvent;
+			import org.bigbluebutton.common.events.ToolbarButtonEvent;
+			import org.bigbluebutton.core.BBB;
+			import org.bigbluebutton.core.Options;
+			import org.bigbluebutton.core.PopUpUtil;
+			import org.bigbluebutton.core.UsersUtil;
+			import org.bigbluebutton.core.events.LockControlEvent;
+			import org.bigbluebutton.core.events.NewGuestWaitingEvent;
+			import org.bigbluebutton.core.events.SwitchedLayoutEvent;
+			import org.bigbluebutton.core.vo.LockSettingsVO;
+			import org.bigbluebutton.main.events.AppVersionEvent;
+			import org.bigbluebutton.main.events.BBBEvent;
+			import org.bigbluebutton.main.events.BreakoutRoomEvent;
+			import org.bigbluebutton.main.events.ClientStatusEvent;
+			import org.bigbluebutton.main.events.ConfigLoadedEvent;
+			import org.bigbluebutton.main.events.ExitApplicationEvent;
+			import org.bigbluebutton.main.events.InvalidAuthTokenEvent;
+			import org.bigbluebutton.main.events.MeetingNotFoundEvent;
+			import org.bigbluebutton.main.events.ModuleLoadEvent;
+			import org.bigbluebutton.main.events.NetworkStatsEvent;
+			import org.bigbluebutton.main.events.ShortcutEvent;
+			import org.bigbluebutton.main.model.Guest;
+			import org.bigbluebutton.main.model.ImageLoader;
+			import org.bigbluebutton.main.model.options.BrandingOptions;
+			import org.bigbluebutton.main.model.options.BrowserVersionsOptions;
+			import org.bigbluebutton.main.model.options.LanguageOptions;
+			import org.bigbluebutton.main.model.options.LayoutOptions;
+			import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
+			import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent;
+			import org.bigbluebutton.modules.phone.events.FlashMicSettingsEvent;
+			import org.bigbluebutton.modules.phone.events.WebRTCCallEvent;
+			import org.bigbluebutton.modules.phone.events.WebRTCEchoTestEvent;
+			import org.bigbluebutton.modules.phone.events.WebRTCMediaEvent;
+			import org.bigbluebutton.modules.phone.models.PhoneOptions;
+			import org.bigbluebutton.modules.users.model.UsersOptions;
+			import org.bigbluebutton.modules.users.views.BreakoutRoomSettings;
+			import org.bigbluebutton.modules.videoconf.events.ShareCameraRequestEvent;
+			import org.bigbluebutton.util.i18n.ResourceUtil;
 			
 			private static const LOGGER:ILogger = getClassLogger(MainApplicationShell);      
       
@@ -178,6 +179,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			
 			[Bindable] private var layoutOptions:LayoutOptions;
 			[Bindable] private var brandingOptions:BrandingOptions;
+			[Bindable] private var usersOptions:UsersOptions;
 			
 			[Bindable] private var showToolbarOpt:Boolean = true;
 			[Bindable] private var _showToolbar:Boolean = true;
@@ -215,7 +217,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			public function initOptions(e:Event):void {
 				brandingOptions = Options.getOptions(BrandingOptions) as BrandingOptions;
 				layoutOptions = Options.getOptions(LayoutOptions) as LayoutOptions;
-
+				usersOptions = Options.getOptions(UsersOptions) as UsersOptions;
+				
 				updateCopyrightText();
 				loadBackground();
 
@@ -495,7 +498,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 
 			private function refreshGuestView(evt:NewGuestWaitingEvent):void {
 				// do not show the guest window if the user isn't moderator or if he's waiting for acceptance
-				if (!UsersUtil.amIModerator() || UsersUtil.amIWaitingForAcceptance()) {
+				if (!UsersUtil.amIModerator() || UsersUtil.amIWaitingForAcceptance() && usersOptions.enableGuestUI) {
 					closeGuestWindow();
 					return;
 				}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
index 2cadd89925282afb55495d4dda3f9a2a200618ea..f1803961c2c506a162a079a6a43ae7e630893432 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
@@ -52,44 +52,44 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 	</fx:Declarations>
 	<fx:Script>
 		<![CDATA[
-      import com.asfusion.mate.events.Dispatcher;
-      
-      import mx.binding.utils.BindingUtils;
-      import mx.controls.Alert;
-      import mx.core.FlexGlobals;
-      import mx.core.IToolTip;
-      import mx.core.UIComponent;
-      import mx.events.CloseEvent;
-      import mx.events.ToolTipEvent;
-      import mx.managers.PopUpManager;
-      
-      import org.as3commons.lang.ArrayUtils;
-      import org.as3commons.lang.StringUtils;
-      import org.as3commons.logging.api.ILogger;
-      import org.as3commons.logging.api.getClassLogger;
-      import org.bigbluebutton.common.IBbbToolbarComponent;
-      import org.bigbluebutton.common.events.SettingsComponentEvent;
-      import org.bigbluebutton.common.events.ToolbarButtonEvent;
-      import org.bigbluebutton.core.BBB;
-      import org.bigbluebutton.core.Options;
-      import org.bigbluebutton.core.UsersUtil;
-      import org.bigbluebutton.core.model.Config;
-      import org.bigbluebutton.core.model.LiveMeeting;
-      import org.bigbluebutton.main.events.BBBEvent;
-      import org.bigbluebutton.main.events.ConfigLoadedEvent;
-      import org.bigbluebutton.main.events.LogoutEvent;
-      import org.bigbluebutton.main.events.NetworkStatsEvent;
-      import org.bigbluebutton.main.events.SettingsEvent;
-      import org.bigbluebutton.main.events.ShortcutEvent;
-      import org.bigbluebutton.main.events.SuccessfulLoginEvent;
-      import org.bigbluebutton.main.model.NetworkStatsData;
-      import org.bigbluebutton.main.model.options.BrandingOptions;
-      import org.bigbluebutton.main.model.options.LayoutOptions;
-      import org.bigbluebutton.main.model.options.ShortcutKeysOptions;
-      import org.bigbluebutton.main.model.users.events.ChangeMyRole;
-      import org.bigbluebutton.main.model.users.events.ConferenceCreatedEvent;
-      import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
-      import org.bigbluebutton.util.i18n.ResourceUtil;
+			import com.asfusion.mate.events.Dispatcher;
+			
+			import mx.binding.utils.BindingUtils;
+			import mx.controls.Alert;
+			import mx.core.FlexGlobals;
+			import mx.core.IToolTip;
+			import mx.core.UIComponent;
+			import mx.events.CloseEvent;
+			import mx.events.ToolTipEvent;
+			import mx.managers.PopUpManager;
+			
+			import org.as3commons.lang.StringUtils;
+			import org.as3commons.logging.api.ILogger;
+			import org.as3commons.logging.api.getClassLogger;
+			import org.bigbluebutton.common.IBbbToolbarComponent;
+			import org.bigbluebutton.common.events.SettingsComponentEvent;
+			import org.bigbluebutton.common.events.ToolbarButtonEvent;
+			import org.bigbluebutton.core.BBB;
+			import org.bigbluebutton.core.Options;
+			import org.bigbluebutton.core.UsersUtil;
+			import org.bigbluebutton.core.model.Config;
+			import org.bigbluebutton.core.model.LiveMeeting;
+			import org.bigbluebutton.main.events.BBBEvent;
+			import org.bigbluebutton.main.events.ConfigLoadedEvent;
+			import org.bigbluebutton.main.events.LogoutEvent;
+			import org.bigbluebutton.main.events.NetworkStatsEvent;
+			import org.bigbluebutton.main.events.SettingsEvent;
+			import org.bigbluebutton.main.events.ShortcutEvent;
+			import org.bigbluebutton.main.events.SuccessfulLoginEvent;
+			import org.bigbluebutton.main.model.NetworkStatsData;
+			import org.bigbluebutton.main.model.options.BrandingOptions;
+			import org.bigbluebutton.main.model.options.LayoutOptions;
+			import org.bigbluebutton.main.model.options.ShortcutKeysOptions;
+			import org.bigbluebutton.main.model.users.events.ChangeMyRole;
+			import org.bigbluebutton.main.model.users.events.ConferenceCreatedEvent;
+			import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
+			import org.bigbluebutton.modules.users.model.UsersOptions;
+			import org.bigbluebutton.util.i18n.ResourceUtil;
 
 			private static const LOGGER:ILogger = getClassLogger(MainToolbar);
 
@@ -104,6 +104,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			[Bindable] private var showRecordButton:Boolean = false;
 			[Bindable] public var toolbarOptions:LayoutOptions;
 			[Bindable] private var brandingOptions:BrandingOptions;
+			[Bindable] private var usersOptions:UsersOptions;
 
 			[Bindable] private var numButtons:int;
       
@@ -127,6 +128,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			private function init():void{
 				toolbarOptions = Options.getOptions(LayoutOptions) as LayoutOptions;
 				brandingOptions = Options.getOptions(BrandingOptions) as BrandingOptions;
+				usersOptions = Options.getOptions(UsersOptions) as UsersOptions;
+				
 				numButtons = 0;
                 
                 // Accessibility isn't active till a few second after the client starts to load so we need a delay
@@ -162,6 +165,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		  case "caption":
 			  dispatcher.dispatchEvent(new ShortcutEvent(ShortcutEvent.FOCUS_CAPTION_WINDOW));
 			  break;
+		  case "sharedNotes":
+			  dispatcher.dispatchEvent(new ShortcutEvent(ShortcutEvent.FOCUS_SHARED_NOTES_WINDOW));
+			  break;
          }
        }
 								
@@ -194,7 +200,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
       }
 
       private function refreshModeratorButtonsVisibility(e:*):void {
-          showGuestSettingsButton = UsersUtil.amIModerator();
+          showGuestSettingsButton = UsersUtil.amIModerator() && usersOptions.enableGuestUI;
 
           showRecordButton = UsersUtil.amIModerator();
       }
@@ -503,7 +509,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 	</fx:Declarations>
 
     
-    <mx:Image id="logo" right="20" maxHeight="30" ioError="hideLogo()" />
+    <mx:Image id="logo" right="20" maxHeight="35" ioError="hideLogo()" />
     <mx:HBox id="quickLinks" width="1" includeInLayout="false">
         <mx:LinkButton id="usersLinkBtn" click="onQuickLinkClicked('users')" label="{ResourceUtil.getInstance().getString('bbb.users.quickLink.label')}"
                        accessibilityDescription="{usersLinkBtn.label}" toolTip="{usersLinkBtn.label}"
@@ -519,7 +525,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
                        height="30" styleName="quickWindowLinkStyle" />
 		<mx:LinkButton id="captionLinkBtn" click="onQuickLinkClicked('caption')" label="{ResourceUtil.getInstance().getString('bbb.caption.quickLink.label')}" 
 					   accessibilityDescription="{captionLinkBtn.label}" toolTip="{captionLinkBtn.label}"
-					   height="20" styleName="quickWindowLinkStyle" />
+					   height="30" styleName="quickWindowLinkStyle" />
+		<mx:LinkButton id="sharedNotesLinkBtn" click="onQuickLinkClicked('sharedNotes')" label="{ResourceUtil.getInstance().getString('bbb.sharedNotes.quickLink.label')}" 
+					   accessibilityDescription="{sharedNotesLinkBtn.label}" toolTip="{sharedNotesLinkBtn.label}"
+					   height="30" styleName="quickWindowLinkStyle" />
     </mx:HBox>
 	<mx:VRule styleName="toolbarSeparator" height="10" />
 	<mx:Label id="meetingNameLbl" minWidth="1" styleName="meetingNameLabelStyle" />
@@ -544,11 +553,12 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			styleName="bandwidthButtonStyle"
 			toolTip="dummy text"
 			click="onNetStatsButtonClick()"
-			visible="{toolbarOptions.showNetworkMonitor}" />
+			visible="{toolbarOptions.showNetworkMonitor}"
+			includeInLayout="{toolbarOptions.showNetworkMonitor}"/>
 	<mx:Button id="shortcutKeysBtn" label="{ResourceUtil.getInstance().getString('bbb.mainToolbar.shortcutBtn')}" styleName="shortcutButtonStyle"
              click="onShortcutButtonClick()" height="30" 
              toolTip="{ResourceUtil.getInstance().getString('bbb.mainToolbar.shortcutBtn.toolTip')}"/>
-	<mx:LinkButton id="helpBtn" visible="{showHelpBtn}" includeInLayout="{showHelpBtn}" label="?" click="onHelpButtonClicked()" height="30" 
+	<mx:LinkButton id="helpBtn" visible="{showHelpBtn}" includeInLayout="{showHelpBtn}" click="onHelpButtonClicked()" height="30" 
                    styleName="helpLinkButtonStyle"
                    toolTip="{ResourceUtil.getInstance().getString('bbb.mainToolbar.helpBtn')}"
 				   accessibilityName="{ResourceUtil.getInstance().getString('bbb.micSettings.access.helpButton')}"/>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml
index 33f41659cb856fdc1a577aef53a75a8b1189589e..197f1f70629ac1111e4610cf10112f6eef78051f 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml
@@ -88,7 +88,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
       import org.bigbluebutton.main.events.UserJoinedEvent;
       import org.bigbluebutton.main.events.UserLeftEvent;
       import org.bigbluebutton.main.model.users.events.ChangeMyRole;
-      import org.bigbluebutton.modules.chat.ChatConstants;
       import org.bigbluebutton.modules.chat.ChatUtil;
       import org.bigbluebutton.modules.chat.events.ChatEvent;
       import org.bigbluebutton.modules.chat.events.ChatHistoryEvent;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/MuteMeButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/MuteMeButton.mxml
index 59ebf88f0bcb7c12be94b4272917a38123f8eb4e..55ac14ac646565ef0de4b1b4b5552d20a3ea764f 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/MuteMeButton.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/MuteMeButton.mxml
@@ -57,11 +57,10 @@ $Id: $
 	<fx:Script>
 		<![CDATA[
 			import flash.filters.BitmapFilterQuality;
+			import flash.filters.GlowFilter;
 			
 			import mx.core.mx_internal;
 			
-			import spark.filters.GlowFilter;
-			
 			import org.as3commons.logging.api.ILogger;
 			import org.as3commons.logging.api.getClassLogger;
 			import org.bigbluebutton.common.IBbbToolbarComponent;
@@ -97,7 +96,7 @@ $Id: $
 				//rest rolledOver when the data changes because onRollOut wont be called if the row moves
 				if (UsersUtil.isMe(e.message.userID)) {
 					if (e.message.talking) {
-						currentIcon.filters = [new GlowFilter(0x000000, 1, 6, 6, 2, BitmapFilterQuality.HIGH, false, false)];
+						currentIcon.filters = [new GlowFilter(getStyle("glowFilterColor"), 1, 6, 6, 2, BitmapFilterQuality.HIGH, false, false)];
 					} else {
 						currentIcon.filters = [];
 					}
@@ -168,7 +167,7 @@ $Id: $
 								toolTip = ResourceUtil.getInstance().getString("bbb.users.muteMeBtnTxt.muted");
 							} else {
 								selected = false;
-								styleName = "muteMeOnButtonStyle";
+								styleName = "muteMeDefaultButtonStyle";
 							}
 						}
 					}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/ToolbarButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/ToolbarButton.mxml
index a5eb5bcc6aa6a8ca82632bb54f4dafc744db6e6a..9ffd0f2faf377c262867a029d908e450b25003af 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/ToolbarButton.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/views/components/ToolbarButton.mxml
@@ -101,7 +101,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				if (_currentState == ACTIVE_STATE)
 					this.styleName = "voiceConfInactiveButtonStyle";
 				else
-					this.styleName = "voiceConfActiveButtonStyle";
+					this.styleName = "voiceConfOverButtonStyle";
 			}
 
 			private function mouseOutHandler(event:MouseEvent):void {
@@ -150,7 +150,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				}
 			}
 
-
       private function onUserJoinedConference():void {
         PhoneOptions.firstAudioJoin = false;
 
@@ -237,7 +236,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				this.enabled = true;
 				LOGGER.debug("onClosedAudioSelection enabled=[{0}] selected=[{1}]", [enabled, selected]);
 				_currentState = DEFAULT_STATE;
-        this.styleName = "voiceConfDefaultButtonStyle";
+        		this.styleName = "voiceConfDefaultButtonStyle";
 				this.toolTip = ResourceUtil.getInstance().getString('bbb.toolbar.phone.toolTip.start');
 				joinDefaultListenOnlyMode();
 			}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml
index 1c82c4c1e879a305fdefe5de49345cd5bac659e6..78efe27af21513188b40af9d4bc17ce251f23551 100644
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml
@@ -29,8 +29,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				verticalScrollPolicy="off"
 				horizontalScrollPolicy="off"
 				showCloseButton="true"
-                initialize="initData();">
-
+				close="globalDispatch.dispatchEvent(new UploadEvent(UploadEvent.CLOSE_UPLOAD_WINDOW))"
+                initialize="initData()"
+				creationComplete="onCreationComplete(event)">
+	
 	<fx:Declarations>
 		<mate:Dispatcher id="globalDispatch" />
 		<mate:Listener type="{UploadProgressEvent.UPLOAD_PROGRESS_UPDATE}" method="handleUploadProgressUpdate" />
@@ -52,6 +54,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
   <fx:Script>
     <![CDATA[
 		import mx.collections.ArrayCollection;
+		import mx.core.mx_internal;
+		import mx.events.FlexEvent;
 		import mx.utils.StringUtil;
 		
 		import org.as3commons.lang.StringUtils;
@@ -80,6 +84,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		import org.bigbluebutton.modules.present.model.PresentationModel;
 		import org.bigbluebutton.util.i18n.ResourceUtil;
 		
+		use namespace mx_internal;
       
 		private static const LOGGER:ILogger = getClassLogger(FileUploadWindow);      
         
@@ -96,15 +101,20 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
       override public function move(x:Number, y:Number):void{
         return;
       }
-      
-      private function initData():void {
-		  presentOptions = Options.getOptions(PresentOptions) as PresentOptions;
-        presentationNamesAC = PresentationModel.getInstance().getPresentations();
-        if (presentationNamesAC.length <= 0) {
-          selectFile();
-        }
-      }
-            
+
+		protected function onCreationComplete(event:FlexEvent):void
+		{
+			this.mx_internal::closeButton.toolTip = ResourceUtil.getInstance().getString('bbb.fileupload.okCancelBtn.toolTip');
+		}
+		
+			private function initData():void {
+				presentOptions = Options.getOptions(PresentOptions) as PresentOptions;
+				presentationNamesAC = PresentationModel.getInstance().getPresentations();
+				if (presentationNamesAC.length <= 0) {
+					selectFile();
+				}
+			}
+
       private function handleThumbnailsProgressEvent(event:CreatingThumbnailsEvent):void {	
         genThumbDots = ".";
 
@@ -155,11 +165,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
         fileFormatHintLbl.visible = false;
         fileFormatHintLbl.includeInLayout = false;
 		
-		    uploadedFilesList.enabled = false;
+	    uploadedFilesList.enabled = false;
 
         progressReportBox.visible = true;
         progressBar.visible = true;
-        okCancelBtn.visible = true;
         
         disableClosing();
         
@@ -265,19 +274,15 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
       }
 
       private function displayAlert(error:String, message:String = null):void {
-        var okLabel:String = ResourceUtil.getInstance().getString('bbb.presentation.ok');
         progressBar.setStyle("color", 0xFF0000);
         progressBar.label = error;
 		if (!StringUtils.isEmpty(message)) {
 		  progressBar.label += message;	
 		}
-		// FIXME : to be localised
-        okCancelBtn.label = "Ok";
       }
 
       private function enableControls():void {
-        okCancelBtn.visible = true;
-        okCancelBtn.enabled = true;
+        enableClosing();
         selectBtn.enabled = true;
         uploadBtn.enabled = true;
         lblFileName.enabled = true;			
@@ -291,19 +296,18 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
       }
 
       private function handleConversionCompleted(e:ConversionCompletedEvent):void{
-        okCancelBtn.label = ResourceUtil.getInstance().getString('bbb.presentation.ok');
         enableClosing();
         globalDispatch.dispatchEvent(new UploadEvent(UploadEvent.CLOSE_UPLOAD_WINDOW));
       }
 
-      private function disableClosing():void {
-        okCancelBtn.enabled = false;
-      }
-      
-      private function enableClosing():void {
-        okCancelBtn.enabled = true;
-      }
-		
+			private function disableClosing():void {
+				showCloseButton = false;
+			}
+
+			private function enableClosing():void {
+				showCloseButton = true;
+			}
+
 		private function handlePresentationRemoved(e:RemovePresentationEvent):void {
 			for(var i:int = 0; i < presentationNamesAC.length; i++) {
 				if(e.presentationName == presentationNamesAC.getItemAt(i).id) {
@@ -312,7 +316,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				}
 			}
 		}
-  ]]>
+		
+	]]>
 
   </fx:Script>
 
@@ -350,12 +355,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
                dragEnabled="false" dataProvider="{presentationNamesAC}">
       </mx:List>
     </mx:Canvas>
-    <mx:Canvas width="100%" height="100%">
-      <mx:Button id="okCancelBtn" label="{ResourceUtil.getInstance().getString('bbb.fileupload.okCancelBtn')}"
-                 styleName="presentationUploadCancelButtonStyle" right="5" bottom="15"
-                 click="globalDispatch.dispatchEvent(new UploadEvent(UploadEvent.CLOSE_UPLOAD_WINDOW))"
-                 toolTip="{ResourceUtil.getInstance().getString('bbb.fileupload.okCancelBtn.toolTip')}"/>
-    </mx:Canvas>	
   </mx:VBox>
 
 </mx:TitleWindow> 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/maps/WebRTCDeskshareEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/maps/WebRTCDeskshareEventMap.mxml
index 9827d6e33b8029a3495e6fa719c6bc9f61339a92..cbc3c9181d7676e318b99c49622bb550d5fe326a 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/maps/WebRTCDeskshareEventMap.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/maps/WebRTCDeskshareEventMap.mxml
@@ -45,7 +45,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			import org.bigbluebutton.modules.screenshare.events.WebRTCViewStreamEvent;
 			import org.bigbluebutton.modules.screenshare.events.WebRTCViewWindowEvent;
 			import org.bigbluebutton.modules.screenshare.managers.WebRTCDeskshareManager;
-			import org.bigbluebutton.modules.screenshare.services.red5.WebRTCConnectionEvent;
 		]]>
 	</fx:Script>
 
@@ -73,12 +72,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			<MethodInvoker generator="{WebRTCDeskshareManager}" method="handleRequestStopSharingEvent"/>
 		</EventHandlers>
 
-<!--
-		<EventHandlers type="{ShareStartRequestResponseEvent.SHARE_START_REQUEST_RESPONSE}">
-			<MethodInvoker generator="{WebRTCDeskshareManager}" method="handleShareStartRequestResponseEvent" arguments="{event}"/>
-		</EventHandlers>
--->
-
 		<EventHandlers type="{MadePresenterEvent.SWITCH_TO_PRESENTER_MODE}">
 			<MethodInvoker generator="{WebRTCDeskshareManager}" method="handleMadePresenterEvent" arguments="{event}"/>
 		</EventHandlers>
@@ -115,10 +108,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			<MethodInvoker generator="{WebRTCDeskshareManager}" method="handleRequestStopSharingEvent"/>
 		</EventHandlers>
 
-		<EventHandlers type="{WebRTCConnectionEvent.SUCCESS}">
-			<MethodInvoker generator="{WebRTCDeskshareManager}" method="handleConnectionSuccessEvent"/>
-		</EventHandlers>
-
 		<EventHandlers type="{StartedViewingEvent.STARTED_VIEWING_EVENT}">
 			<MethodInvoker generator="{WebRTCDeskshareManager}" method="handleStartedViewingEvent" arguments="{event.stream}"/>
 		</EventHandlers>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/WebRTCDeskshareService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/WebRTCDeskshareService.as
index a43556c12f16d73646212e351381e7f6258e7541..d1b6ece946aaf716fc8865bb3b9d579915032e40 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/WebRTCDeskshareService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/WebRTCDeskshareService.as
@@ -24,19 +24,12 @@ package org.bigbluebutton.modules.screenshare.services
 
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
-	import org.bigbluebutton.modules.screenshare.services.red5.WebRTCConnection;
 	import org.bigbluebutton.modules.screenshare.services.red5.Connection;
 
-	/**
-	 * The DeskShareProxy communicates with the Red5 deskShare server application
-	 * @author Snap
-	 *
-	 */
 	public class WebRTCDeskshareService
 	{
 		private static const LOGGER:ILogger = getClassLogger(ScreenshareService);
 
-		private var conn:WebRTCConnection;
 		private var red5conn:Connection;
 
 		private var module:ScreenshareModule;
@@ -65,18 +58,14 @@ package org.bigbluebutton.modules.screenshare.services
 			this.uri = uri;
 			this.room = room;
 			LOGGER.debug("Deskshare Service connecting to {0}", [uri]);
-			conn = new WebRTCConnection(room); //to red5 deskshare
-
-			conn.setURI(uri);
-			conn.connect();
 		}
 
 		public function getConnection():NetConnection{
-			return conn.getConnection();
+			return red5conn.getConnection();
 		}
 
 		public function disconnect():void{
-			conn.disconnect();
+			red5conn.disconnect();
 		}
 	}
 }
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/WebRTCConnection.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/WebRTCConnection.as
deleted file mode 100755
index a362e16fef74968067106e731f76f40dacf04104..0000000000000000000000000000000000000000
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/services/red5/WebRTCConnection.as
+++ /dev/null
@@ -1,330 +0,0 @@
-/**
-* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
-*
-* Copyright (c) 2015 BigBlueButton Inc. and by respective authors (see below).
-*
-* This program is free software; you can redistribute it and/or modify it under the
-* terms of the GNU Lesser General Public License as published by the Free Software
-* Foundation; either version 3.0 of the License, or (at your option) any later
-* version.
-*
-* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
-* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public License along
-* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
-*
-*/
-
-package org.bigbluebutton.modules.screenshare.services.red5
-{
-	import com.asfusion.mate.events.Dispatcher;
-
-	import flash.events.AsyncErrorEvent;
-	import flash.events.NetStatusEvent;
-	import flash.events.SecurityErrorEvent;
-	import flash.events.TimerEvent;
-	import flash.net.NetConnection;
-	import flash.net.ObjectEncoding;
-	import flash.net.Responder;
-	import flash.utils.Timer;
-
-	import mx.utils.ObjectUtil;
-
-	import org.as3commons.logging.api.ILogger;
-	import org.as3commons.logging.api.getClassLogger;
-  import org.bigbluebutton.core.BBB;
-	import org.bigbluebutton.core.UsersUtil;
-	import org.bigbluebutton.core.managers.ReconnectionManager;
-	import org.bigbluebutton.main.events.BBBEvent;
-	import org.bigbluebutton.modules.screenshare.events.WebRTCViewStreamEvent;
-	import org.bigbluebutton.modules.screenshare.services.red5.WebRTCConnectionEvent;
-
-	public class WebRTCConnection {
-	private static const LOGGER:ILogger = getClassLogger(Connection);
-
-		private var nc:NetConnection;
-		private var uri:String;
-		private var retryTimer:Timer = null;
-		private var retryCount:int = 0;
-		private const MAX_RETRIES:int = 5;
-		private var responder:Responder;
-		private var width:Number;
-		private var height:Number;
-		private var room:String;
-		private var logoutOnUserCommand:Boolean = false;
-		private var reconnecting:Boolean = false;
-		private var wasPresenterBeforeDisconnect:Boolean = false;
-
-		private var dispatcher:Dispatcher = new Dispatcher();
-
-		public function WebRTCConnection(room:String) {
-			this.room = room;
-
-			responder = new Responder(
-				function(result:Object):void {
-					if (result != null && (result.publishing as Boolean)){
-						width = result.width as Number;
-						height = result.height as Number;
-						LOGGER.debug("Desk Share stream is streaming [{0},{1}]", [width, height]);
-						var event:WebRTCViewStreamEvent = new WebRTCViewStreamEvent(WebRTCViewStreamEvent.START);
-						event.videoWidth = width;
-						event.videoHeight = height;
-						dispatcher.dispatchEvent(event); //TODO why?
-					} else {
-						LOGGER.debug("No screenshare stream being published");
-						var connEvent:WebRTCConnectionEvent = new WebRTCConnectionEvent();
-						connEvent.status = WebRTCConnectionEvent.NO_DESKSHARE_STREAM;
-						dispatcher.dispatchEvent(connEvent); //TODO why?
-					}
-				},
-				function(status:Object):void{
-					var checkFailedEvent:WebRTCConnectionEvent = new WebRTCConnectionEvent();
-					checkFailedEvent.status = WebRTCConnectionEvent.FAIL_CHECK_FOR_DESKSHARE_STREAM;
-					dispatcher.dispatchEvent(checkFailedEvent);
-					LOGGER.debug("Error while trying to call remote mathod on server");
-				}
-			);
-		}
-
-		public function connect(retry:Boolean = false):void {
-			nc = new NetConnection();
-			nc.proxyType = "best";
-			nc.objectEncoding = ObjectEncoding.AMF0;
-			nc.client = this;
-
-			nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, debugAsyncErrorHandler);
-			nc.addEventListener(NetStatusEvent.NET_STATUS, debugNetStatusHandler);
-			nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
-			nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
-
-			if (getURI().length == 0){
-				LOGGER.error("please provide a valid URI connection string. URI Connection String missing");
-				return;
-			} else if (nc.connected){
-				LOGGER.error("You are already connected to {0}", [getURI()]);
-				return;
-			}
-
-			LOGGER.debug("Trying to connect to [{0}] retry=[{1}]", [getURI(), retry]);
-			if (! (retryCount > 0)) {
-				var ce:WebRTCConnectionEvent = new WebRTCConnectionEvent();
-				ce.status = WebRTCConnectionEvent.CONNECTING;
-
-				dispatcher.dispatchEvent(ce);
-			}
-
-			nc.connect(getURI(), UsersUtil.getInternalMeetingID());
-		}
-
-		private function connectTimeoutHandler(e:TimerEvent):void {
-			LOGGER.debug("Connection attempt to [{0}] timedout. Retrying.", [getURI()]);
-			retryTimer.stop();
-			retryTimer = null;
-
-			nc.close();
-			nc = null;
-
-			var ce:WebRTCConnectionEvent = new WebRTCConnectionEvent();;
-
-			retryCount++;
-			if (retryCount < MAX_RETRIES) {
-				ce.status = WebRTCConnectionEvent.CONNECTING_RETRY;
-				ce.retryAttempts = retryCount;
-				dispatcher.dispatchEvent(ce);
-
-				connect(false);
-			} else {
-				ce.status = WebRTCConnectionEvent.CONNECTING_MAX_RETRY;
-				dispatcher.dispatchEvent(ce);
-			}
-		}
-
-		public function close():void{
-			nc.close();
-		}
-
-		public function setURI(p_URI:String):void{
-			uri = p_URI;
-		}
-
-		public function getURI():String{
-			return uri;
-		}
-
-		public function onBWCheck(... rest):Number {
-			return 0;
-		}
-
-		public function onBWDone(... rest):void {
-			var p_bw:Number;
-			if (rest.length > 0) p_bw = rest[0];
-			// your application should do something here
-			// when the bandwidth check is complete
-			LOGGER.debug("bandwidth = {0} Kbps.", [p_bw]);
-		}
-
-		private function netStatusHandler(event:NetStatusEvent):void {
-			LOGGER.debug("Connected to [" + getURI() + "]. [" + event.info.code + "]");
-
-			var logData:Object = {};
-			logData.type = "ConnectionStatusChanged";
-			logData.newStatus = event.info.code;
-			logData.connection = getURI();
-			LOGGER.info(JSON.stringify(logData));
-
-			if (retryTimer) {
-				retryCount = 0;
-				LOGGER.debug("Cancelling retry timer.");
-				retryTimer.stop();
-				retryTimer = null;
-			}
-
-			var ce:WebRTCConnectionEvent = new WebRTCConnectionEvent();
-
-			switch(event.info.code){
-				case "NetConnection.Connect.Failed":
-					if (reconnecting) {
-						var attemptFailedEvent:BBBEvent = new BBBEvent(BBBEvent.RECONNECT_CONNECTION_ATTEMPT_FAILED_EVENT);
-						attemptFailedEvent.payload.type = ReconnectionManager.DESKSHARE_CONNECTION;
-						dispatcher.dispatchEvent(attemptFailedEvent);
-					}
-					ce.status = WebRTCConnectionEvent.FAILED;
-
-					dispatcher.dispatchEvent(ce);
-				break;
-
-				case "NetConnection.Connect.Success":
-					ce.status = WebRTCConnectionEvent.SUCCESS;
-					if (reconnecting) {
-						reconnecting = false;
-						if (wasPresenterBeforeDisconnect) {
-							wasPresenterBeforeDisconnect = false;
-							// stopSharingDesktop(room, room) //TODO
-						}
-
-						var attemptSucceeded:BBBEvent = new BBBEvent(BBBEvent.RECONNECT_CONNECTION_ATTEMPT_SUCCEEDED_EVENT);
-						attemptSucceeded.payload.type = ReconnectionManager.DESKSHARE_CONNECTION;
-						dispatcher.dispatchEvent(attemptSucceeded);
-					}
-
-					// request desktop sharing info (as a late joiner)
-					LOGGER.debug("Sending [desktopSharing.requestDeskShareInfo] to server.");
-					var _nc:ConnectionManager = BBB.initConnectionManager();
-					_nc.sendMessage("desktopSharing.requestDeskShareInfo",
-						function(result:String):void { // On successful result
-							LOGGER.debug(result);
-						},
-						function(status:String):void { // status - On error occurred
-							LOGGER.error(status);
-						}
-					);
-
-					dispatcher.dispatchEvent(ce);
-				break;
-
-				case "NetConnection.Connect.Rejected":
-					ce.status = WebRTCConnectionEvent.REJECTED;
-					dispatcher.dispatchEvent(ce);
-				break;
-
-				case "NetConnection.Connect.Closed":
-					LOGGER.debug("Deskshare connection closed.");
-					ce.status = WebRTCConnectionEvent.CLOSED;
-					if (UsersUtil.amIPresenter()) {
-						// Let's keep our presenter status before disconnected. We can't
-						// tell the other user's to stop desktop sharing as our connection is broken. (ralam july 24, 2015)
-						wasPresenterBeforeDisconnect = true;
-
-					} else {
-						// stopViewing(); //TODO
-					}
-
-					if (!logoutOnUserCommand) {
-						reconnecting = true;
-
-						var disconnectedEvent:BBBEvent = new BBBEvent(BBBEvent.RECONNECT_DISCONNECTED_EVENT);
-						disconnectedEvent.payload.type = ReconnectionManager.DESKSHARE_CONNECTION;
-						disconnectedEvent.payload.callback = connect;
-						disconnectedEvent.payload.callbackParameters = [];
-						dispatcher.dispatchEvent(disconnectedEvent);
-					}
-				break;
-
-				case "NetConnection.Connect.InvalidApp":
-					ce.status = WebRTCConnectionEvent.INVALIDAPP;
-					dispatcher.dispatchEvent(ce);
-				break;
-
-				case "NetConnection.Connect.AppShutdown":
-					ce.status = WebRTCConnectionEvent.APPSHUTDOWN;
-					dispatcher.dispatchEvent(ce);
-				break;
-
-				case "NetConnection.Connect.NetworkChange":
-					// LOGGER.info("Detected network change. User might be on a wireless and
-					// temporarily dropped connection. Doing nothing. Just making a note.");
-					break;
-
-				default :
-					// I dispatch DISCONNECTED incase someone just simply wants to know if we're not connected'
-					// rather than having to subscribe to the events individually
-					ce.status = WebRTCConnectionEvent.DISCONNECTED;
-					dispatcher.dispatchEvent(ce);
-					break;
-			}
-		}
-
-		private function securityErrorHandler(event:SecurityErrorEvent):void{
-			var ce:WebRTCConnectionEvent = new WebRTCConnectionEvent();
-			ce.status = WebRTCConnectionEvent.SECURITYERROR;
-			dispatcher.dispatchEvent(ce);
-		}
-
-		/**
-		 * Check if anybody is publishing the stream for this room
-		 * This method is useful for clients which have joined a room where somebody is already publishing
-		 *
-		 */
-		private function checkIfStreamIsPublishing(room: String):void{
-			LOGGER.debug("checking if desk share stream is publishing");
-			var event:WebRTCConnectionEvent = new WebRTCConnectionEvent();
-			event.status = WebRTCConnectionEvent.CHECK_FOR_DESKSHARE_STREAM;
-			dispatcher.dispatchEvent(event); // TODO anton send to akka-bbb-apps
-
-			nc.call("screenshare.checkIfStreamIsPublishing", responder, room);
-		}
-
-		public function disconnect():void{
-			logoutOnUserCommand = true;
-			if (nc != null) nc.close();
-		}
-
-		public function connectionSuccessHandler():void{
-			LOGGER.debug("Successully connection to {0}", [uri]);
-
-			checkIfStreamIsPublishing(room);
-		}
-
-		private function debugNetStatusHandler(e:NetStatusEvent):void {
-		LOGGER.debug("netStatusHandler target={0} info={1}", [e.target, ObjectUtil.toString(e.info)]);
-		}
-
-		private function debugAsyncErrorHandler(e:AsyncErrorEvent):void {
-		LOGGER.debug("asyncErrorHandler target={0} info={1}", [e.target, e.text]);
-		}
-
-		public function getConnection():NetConnection{
-			return nc;
-		}
-
-		public function connectionFailedHandler(e:WebRTCConnectionEvent):void{
-			LOGGER.error("connection failed to {0} with message {1}", [uri, e.toString()]);
-		}
-
-		public function connectionRejectedHandler(e:WebRTCConnectionEvent):void{
-		LOGGER.error("connection rejected to {0} with message {1}", [uri, e.toString()]);
-		}
-	}
-}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ToolbarButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ToolbarButton.mxml
index 5fc6fbfd366d237436e7e4405757bb195e3c12d5..610692d8531d5a1ab9e30f02b5052cae1f772f47 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ToolbarButton.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ToolbarButton.mxml
@@ -105,7 +105,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
         if(_currentState == ON_STATE)
           styleName="deskshareOffButtonStyle"
         else
-          styleName="deskshareOnButtonStyle"
+          styleName="deskshareOverButtonStyle"
       }
 
       private function mouseOutHandler(event:MouseEvent):void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml
index 1884cb9e8a997dad08a6f6185163c14e883cfbb4..45c641e4a51d55905893cfdc1c88a60c8b6fe123 100644
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml
@@ -32,6 +32,7 @@
 		<mate:Listener type="{ReceivePatchEvent.RECEIVE_PATCH_EVENT}" method="receivePatch"/>
 		<mate:Listener type="{CurrentDocumentEvent}" method="gotCurrentDocument"/>
 		<mate:Listener type="{SharedNotesEvent.SYNC_NOTE_REPLY_EVENT}" method="handleSyncNote"/>
+		<mate:Listener type="{ShortcutEvent.FOCUS_SHARED_NOTES_WINDOW}" method="focusWindow" />
 	</fx:Declarations>
 
 	<fx:Script>
@@ -57,6 +58,7 @@
 			import org.bigbluebutton.common.Role;
 			import org.bigbluebutton.core.Options;
 			import org.bigbluebutton.core.UsersUtil;
+			import org.bigbluebutton.main.events.ShortcutEvent;
 			import org.bigbluebutton.main.views.MainCanvas;
 			import org.bigbluebutton.main.views.WellPositionedMenu;
 			import org.bigbluebutton.modules.sharednotes.SharedNotesOptions;
@@ -433,6 +435,12 @@
 			public function handleResizableStatus(value:Boolean):void {
 				this.resizable = value;
 			}
+			
+			private function focusWindow(e:ShortcutEvent):void {
+				if (this.visible) {
+					focusManager.setFocus(titleBarOverlay);
+				}
+			}
 
 		]]>
 	</fx:Script>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/model/UsersOptions.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/model/UsersOptions.as
index db9bc8ec71f950d706c53847a6bbf8f413847b13..cdfa54a4459669f95c145425107249e0a697a158 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/model/UsersOptions.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/model/UsersOptions.as
@@ -33,6 +33,9 @@ package org.bigbluebutton.modules.users.model {
 
 		[Bindable]
 		public var enableSettingsButton:Boolean = true;
+		
+		[Bindable]
+		public var enableGuestUI:Boolean = false;
 
 		public function UsersOptions() {
 			name = "UsersModule";
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml
index f8654f226bb00dd1d76034cb20cf8ec1900f1605..34a7b98d814832e4c4bb144cb954b287ea37bed5 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml
@@ -203,7 +203,7 @@
 							muteBtn.enabled = true;
 
 							if(data.talking && !rolledOver){
-								muteImg.filters = [new GlowFilter(0x000000, 1, 6, 6, 2, BitmapFilterQuality.HIGH, false, false)];
+								muteImg.filters = [new GlowFilter(getStyle("glowFilterColor"), 1, 6, 6, 2, BitmapFilterQuality.HIGH, false, false)];
 							}else{
 								muteImg.filters = [];
 							}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/ToolbarPopupButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/ToolbarPopupButton.mxml
index ec1c3964d2fc9b159490650e37c49fd6ac22f24f..bcfa0b19b9986c2e5dfa05bd93e524dc0d89089b 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/ToolbarPopupButton.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/views/ToolbarPopupButton.mxml
@@ -218,7 +218,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				if(_currentState == ON_STATE)
 					this.styleName = "webcamOffButtonStyle";
 				else
-					this.styleName = "webcamOnButtonStyle";
+					this.styleName = "webcamOverButtonStyle";
 				this.selected = false;
 			}
 
diff --git a/bigbluebutton-config/web/index.html b/bigbluebutton-config/web/index.html
index 9080f6c93cee5bfbf7bbfff195dff6bd5ba3add2..b60d622dc31def623855743a07faa3b94c3a5995 100644
--- a/bigbluebutton-config/web/index.html
+++ b/bigbluebutton-config/web/index.html
@@ -262,7 +262,7 @@
 	      <div class="row">
 	      	<div class="span twelve center">
 		        <p>Copyright &copy; 2017 BigBlueButton Inc.<br>
-		        <small>Version <a href="http://docs.bigbluebutton.org/">1.1.0</a></small>		        
+		        <small>Version <a href="http://docs.bigbluebutton.org/">2.0-dev</a></small>		        
 		        </p>
 	      	</div>
 	      </div>
diff --git a/bigbluebutton-html5/imports/api/1.1/audio/client/bridge/sip.js b/bigbluebutton-html5/imports/api/1.1/audio/client/bridge/sip.js
index ad3e42d9f47abb6fe9a93dddbc86909e61803389..c01d378aff7c1e2907e778b3e00d475382feca7c 100644
--- a/bigbluebutton-html5/imports/api/1.1/audio/client/bridge/sip.js
+++ b/bigbluebutton-html5/imports/api/1.1/audio/client/bridge/sip.js
@@ -13,18 +13,18 @@ export default class SIPBridge extends BaseAudioBridge {
     this.userData = userData;
   }
 
-  joinListenOnly() {
+  joinListenOnly(stunServers, turnServers) {
     makeCall('listenOnlyToggle', true);
-    this._joinVoiceCallSIP({ isListenOnly: true });
+    this._joinVoiceCallSIP({ isListenOnly: true, stunServers, turnServers });
   }
 
-  joinMicrophone() {
-    this._joinVoiceCallSIP({ isListenOnly: false });
+  joinMicrophone(stunServers, turnServers) {
+    this._joinVoiceCallSIP({ isListenOnly: false, stunServers, turnServers });
   }
 
   // Periodically check the status of the WebRTC call, when a call has been established attempt to
   // hangup, retry if a call is in progress, send the leave voice conference message to BBB
-  exitAudio(isListenOnly, afterExitCall = () => {}) {
+  exitAudio(isListenOnly, afterExitCall = () => { }) {
     // To be called when the hangup is confirmed
     const hangupCallback = function () {
       console.log(`Exited Voice Conference, listenOnly=${isListenOnly}`);
@@ -40,7 +40,7 @@ export default class SIPBridge extends BaseAudioBridge {
     triedHangup = false;
 
     // function to initiate call
-    const checkToHangupCall = ((context, afterExitCall = () => {}) => {
+    const checkToHangupCall = ((context, afterExitCall = () => { }) => {
       // if an attempt to hang up the call is made when the current session is not yet finished,
       // the request has no effect keep track in the session if we haven't tried a hangup
       if (window.getCallStatus() != null && !triedHangup) {
@@ -96,8 +96,8 @@ export default class SIPBridge extends BaseAudioBridge {
     };
 
     const stunsAndTurns = {
-      stun: this.userData.stuns,
-      turn: this.userData.turns,
+      stun: options.stunServers,
+      turn: options.turnServers,
     };
 
     callIntoConference(extension, (audio) => {
diff --git a/bigbluebutton-html5/imports/api/1.1/audio/client/manager/index.js b/bigbluebutton-html5/imports/api/1.1/audio/client/manager/index.js
index 8092a0931503676d1d658f988c937200984c602e..62033062abb93c795f872fbcb691a5d3521edd12 100644
--- a/bigbluebutton-html5/imports/api/1.1/audio/client/manager/index.js
+++ b/bigbluebutton-html5/imports/api/1.1/audio/client/manager/index.js
@@ -1,3 +1,4 @@
+import Auth from '/imports/ui/services/auth';
 import BaseAudioBridge from '../bridge/base';
 import VertoBridge from '../bridge/verto';
 import SIPBridge from '../bridge/sip';
@@ -24,12 +25,42 @@ export default class AudioManager {
   }
 
   joinAudio(listenOnly) {
-    if (listenOnly || this.microphoneLockEnforced) {
-      this.isListenOnly = true;
-      this.bridge.joinListenOnly();
-    } else {
-      this.bridge.joinMicrophone();
-    }
+    AudioManager.fetchServers().then(({ error, stunServers, turnServers }) => {
+      if (error) {
+        //We need to alert the user about this problem by some gui message.
+        console.error("Couldn't fetch the stuns/turns servers!");
+        return;
+      }
+
+      if (listenOnly || this.microphoneLockEnforced) {
+        this.isListenOnly = true;
+        this.bridge.joinListenOnly(stunServers, turnServers);
+      } else {
+        this.bridge.joinMicrophone(stunServers, turnServers);
+      }
+    });
+  }
+
+  // We use on the SIP an String Array, while in the server, it comes as
+  // an Array of objects, we need to map from Array<Object> to Array<String>
+  static mapToArray({ response, stunServers, turnServers }) {
+    const promise = new Promise((resolve) => {
+      if (response) {
+        resolve({ error: 404, stunServers: [], turnServers: [] });
+      }
+      resolve({
+        stunServers: stunServers.map(server => server.url),
+        turnServers: turnServers.map(server => server.url),
+      });
+    });
+    return promise;
   }
 
+  static fetchServers() {
+    const url = `/bigbluebutton/api/stuns?sessionToken=${Auth.sessionToken}`;
+
+    return fetch(url)
+      .then(response => response.json())
+      .then(json => AudioManager.mapToArray(json));
+  }
 }
diff --git a/bigbluebutton-html5/imports/api/2.0/users/server/handlers/presenterAssigned.js b/bigbluebutton-html5/imports/api/2.0/users/server/handlers/presenterAssigned.js
index 2c11d9f772cc7d2f27fd9a3e694b4e67fc1995b2..060e5cd20edcf3c37900743c43147b7d56df4e16 100644
--- a/bigbluebutton-html5/imports/api/2.0/users/server/handlers/presenterAssigned.js
+++ b/bigbluebutton-html5/imports/api/2.0/users/server/handlers/presenterAssigned.js
@@ -13,16 +13,17 @@ const unassignCurrentPresenter = (meetingId, presenterId) => {
     $set: {
       'user.presenter': false,
     },
+    $pop: {
+      'user.roles': 'presenter',
+    },
   };
 
-  const cb = (err, numChanged) => {
+  const cb = (err) => {
     if (err) {
       return Logger.error(`Unassigning current presenter from collection: ${err}`);
     }
 
-    if (numChanged) {
-      return Logger.info(`Unassign current presenter meeting=${meetingId}`);
-    }
+    return Logger.info(`Unassign current presenter meeting=${meetingId}`);
   };
 
   return Users.update(selector, modifier, cb);
@@ -42,17 +43,22 @@ export default function handlePresenterAssigned({ body }, meetingId) {
     $set: {
       'user.presenter': true,
     },
+    $push: {
+      'user.roles': 'presenter',
+    },
   };
 
-  const cb = (err, numChanged) => {
+  const cb = (err, numChange) => {
     if (err) {
       return Logger.error(`Assigning user as presenter: ${err}`);
     }
 
-    if (numChanged) {
+    if (numChange) {
       unassignCurrentPresenter(meetingId, presenterId);
       return Logger.info(`Assigned user as presenter id=${presenterId} meeting=${meetingId}`);
     }
+
+    return Logger.info(`User not assigned as presenter id=${presenterId} meeting=${meetingId}`);
   };
 
   return Users.update(selector, modifier, cb);
diff --git a/bigbluebutton-html5/imports/api/2.0/users/server/methods.js b/bigbluebutton-html5/imports/api/2.0/users/server/methods.js
index 53eab01a42d79a810bc566edd303ba6e0e557e60..e898b3ff4a886d6bd16364f2c4a2cf042f88aedd 100644
--- a/bigbluebutton-html5/imports/api/2.0/users/server/methods.js
+++ b/bigbluebutton-html5/imports/api/2.0/users/server/methods.js
@@ -3,11 +3,15 @@ import mapToAcl from '/imports/startup/mapToAcl';
 import userLogout from './methods/userLogout';
 import validateAuthToken from './methods/validateAuthToken';
 import setEmojiStatus from './methods/setEmojiStatus';
+import assignPresenter from './methods/assignPresenter';
+import listenOnlyToggle from './methods/listenOnlyToggle';
 
-Meteor.methods(mapToAcl(['methods.userLogout', 'methods.setEmojiStatus',
+Meteor.methods(mapToAcl(['methods.userLogout', 'methods.setEmojiStatus', 'methods.assignPresenter', 'methods.listenOnlyToggle',
 ], {
   userLogout,
   setEmojiStatus,
+  assignPresenter,
+  listenOnlyToggle,
 }));
 
 Meteor.methods({ validateAuthToken2x: validateAuthToken });
diff --git a/bigbluebutton-html5/imports/api/2.0/users/server/methods/assignPresenter.js b/bigbluebutton-html5/imports/api/2.0/users/server/methods/assignPresenter.js
new file mode 100755
index 0000000000000000000000000000000000000000..e8e38d50fb9d40fd490c883eb6302973b3373177
--- /dev/null
+++ b/bigbluebutton-html5/imports/api/2.0/users/server/methods/assignPresenter.js
@@ -0,0 +1,45 @@
+import { Meteor } from 'meteor/meteor';
+import { check } from 'meteor/check';
+import RedisPubSub from '/imports/startup/server/redis2x';
+import Logger from '/imports/startup/server/logger';
+import Users from '/imports/api/2.0/users';
+
+export default function assignPresenter(credentials, userId) {
+  const REDIS_CONFIG = Meteor.settings.redis;
+  const CHANNEL = REDIS_CONFIG.channels.toAkkaApps;
+  const EVENT_NAME = 'AssignPresenterReqMsg';
+
+  const { meetingId, requesterUserId } = credentials;
+
+  check(meetingId, String);
+  check(requesterUserId, String);
+  check(userId, String);
+
+  const User = Users.findOne({
+    meetingId,
+    userId,
+  });
+
+  if (!User) {
+    throw new Meteor.Error(
+      'user-not-found', 'You need a valid user to be able to set presenter');
+  }
+
+  const header = {
+    name: EVENT_NAME,
+    meetingId,
+    userId,
+  };
+
+  const payload = {
+    newPresenterId: userId,
+    newPresenterName: User.user.name,
+    assignedBy: requesterUserId,
+    requesterId: requesterUserId,
+  };
+
+  Logger.verbose(`User '${userId}' setted as presenter by '${
+    requesterUserId}' from meeting '${meetingId}'`);
+
+  return RedisPubSub.publish(CHANNEL, EVENT_NAME, meetingId, payload, header);
+}
diff --git a/bigbluebutton-html5/imports/api/2.0/users/server/methods/listenOnlyToggle.js b/bigbluebutton-html5/imports/api/2.0/users/server/methods/listenOnlyToggle.js
index b6d0bd3d54c3b5f56012039d2fb74346166a741b..f4d40b1760d9f36835ec2a24cffa1f3d42339f76 100755
--- a/bigbluebutton-html5/imports/api/2.0/users/server/methods/listenOnlyToggle.js
+++ b/bigbluebutton-html5/imports/api/2.0/users/server/methods/listenOnlyToggle.js
@@ -7,7 +7,7 @@ import Users from '/imports/api/2.0/users';
 
 export default function listenOnlyToggle(credentials, isJoining = true) {
   const REDIS_CONFIG = Meteor.settings.redis;
-  const CHANNEL = REDIS_CONFIG.channels.toBBBApps.meeting;
+  const CHANNEL = REDIS_CONFIG.channels.toAkkaApps;
 
   const { meetingId, requesterUserId } = credentials;
 
@@ -18,40 +18,36 @@ export default function listenOnlyToggle(credentials, isJoining = true) {
   let EVENT_NAME;
 
   if (isJoining) {
-    EVENT_NAME = 'user_connected_to_global_audio';
+    EVENT_NAME = 'UserConnectedToGlobalAudioMsg';
   } else {
-    EVENT_NAME = 'user_disconnected_from_global_audio';
+    EVENT_NAME = 'UserDisconnectedFromGlobalAudioMsg';
   }
 
-  const Meeting = Meetings.findOne({ meetingId });
-  if (!Meeting) {
-    throw new Meteor.Error(
-      'meeting-not-found', 'You need a valid meeting to be able to toggle audio');
-  }
-
-  check(Meeting.voiceConf, String);
-
   const User = Users.findOne({
-    meetingId,
     userId: requesterUserId,
   });
 
+  const Meeting = Meetings.findOne({ meetingId });
+
   if (!User) {
     throw new Meteor.Error(
       'user-not-found', 'You need a valid user to be able to toggle audio');
   }
 
-  check(User.user.name, String);
+  // check(User.user.name, String);
+
+  const header = {
+    name: EVENT_NAME,
+    voiceConf: Meeting.voiceProp.voiceConf,
+  };
 
   const payload = {
     userId: requesterUserId,
-    meeting_id: meetingId,
-    voice_conf: Meeting.voiceConf,
-    name: User.user.name,
+    name: User.name,
   };
 
   Logger.verbose(`User '${requesterUserId}' ${isJoining
     ? 'joined' : 'left'} global audio from meeting '${meetingId}'`);
 
-  return RedisPubSub.publish(CHANNEL, EVENT_NAME, payload);
+  return RedisPubSub.publish(CHANNEL, EVENT_NAME, meetingId, payload, header);
 }
diff --git a/bigbluebutton-html5/imports/api/2.0/users/server/modifiers/addUser.js b/bigbluebutton-html5/imports/api/2.0/users/server/modifiers/addUser.js
index 809d6e8ebc0bd4419f2f295c9151876861df7fa3..ca2d20fcf25d052533b5d54ebbdfb3203aa69a29 100644
--- a/bigbluebutton-html5/imports/api/2.0/users/server/modifiers/addUser.js
+++ b/bigbluebutton-html5/imports/api/2.0/users/server/modifiers/addUser.js
@@ -31,26 +31,16 @@ export default function addUser(meetingId, user) {
     user.role = ROLE_VIEWER;
   }
 
-  const userRoles = [];
-  userRoles.push('viewer');
-  userRoles.push(user.presenter ? 'presenter' : undefined);
-  userRoles.push(user.role === 'MODERATOR' ? 'moderator' : undefined);
+  let userRoles = [];
+
+  userRoles.push(
+    'viewer',
+    user.presenter ? 'presenter' : false,
+    user.role === 'MODERATOR' ? 'moderator' : false,
+  );
+
+  userRoles = userRoles.filter(Boolean);
 
-  /**
-   * {
-  "intId": "w_opaqxrriwvga",
-  "extId": "w_opaqxrriwvga",
-  "name": "html5",
-  "role": "VIEWER",
-  "guest": false,
-  "authed": false,
-  "waitingForAcceptance": false,
-  "emoji": "none",
-  "presenter": false,
-  "locked": false,
-  "avatar": "http://localhost/client/avatar.png"
-}
-   */
   const modifier = {
     $set: Object.assign(
       { meetingId },
@@ -74,9 +64,7 @@ export default function addUser(meetingId, user) {
       return Logger.info(`Added user id=${userId} meeting=${meetingId}`);
     }
 
-    if (numChanged) {
-      return Logger.info(`Upserted user id=${userId} meeting=${meetingId}`);
-    }
+    return Logger.info(`Upserted user id=${userId} meeting=${meetingId}`);
   };
 
   return Users.upsert(selector, modifier, cb);
diff --git a/bigbluebutton-html5/imports/api/acl/Acl.js b/bigbluebutton-html5/imports/api/acl/Acl.js
index c205b5adc3913da89854be2bc15700785021a6be..597d8365cbaf57c8682108c98f32846a75e6eec0 100644
--- a/bigbluebutton-html5/imports/api/acl/Acl.js
+++ b/bigbluebutton-html5/imports/api/acl/Acl.js
@@ -9,9 +9,6 @@ export class Acl {
   }
 
   can(permission, credentials) {
-
-    return true; // TODO !!!! REMOVE THIS
-
     check(permission, String);
     const permissions = this.getPermissions(credentials);
 
diff --git a/bigbluebutton-html5/imports/startup/client/auth.js b/bigbluebutton-html5/imports/startup/client/auth.js
index 68d10187d55cb6eaa0dffdddbb0689509a66e430..5d6617aa9677e7b9ccf1493d7fa5729d1ceedc43 100755
--- a/bigbluebutton-html5/imports/startup/client/auth.js
+++ b/bigbluebutton-html5/imports/startup/client/auth.js
@@ -21,7 +21,7 @@ export function joinRouteHandler(nextState, replace, callback) {
     .then((data) => {
       const { meetingID, internalUserID, authToken, logoutUrl } = data.response;
 
-      Auth.set(meetingID, internalUserID, authToken, logoutUrl);
+      Auth.set(meetingID, internalUserID, authToken, logoutUrl, sessionToken);
       replace({ pathname: '/' });
       callback();
     });
diff --git a/bigbluebutton-html5/imports/startup/client/base.jsx b/bigbluebutton-html5/imports/startup/client/base.jsx
index 096d407c46a158ecbd232cc497813e7f9f00df96..d4f6dec0b17e756c731fc19f36d04b901ba6771a 100644
--- a/bigbluebutton-html5/imports/startup/client/base.jsx
+++ b/bigbluebutton-html5/imports/startup/client/base.jsx
@@ -85,7 +85,7 @@ Base.defaultProps = defaultProps;
 
 const SUBSCRIPTIONS_NAME = [
   'users2x', 'users', 'chat', 'chat2x', 'cursor', 'cursor2x', 'deskshare', 'meetings', 'meetings2x',
-  'polls', 'polls2x',  'presentations', 'presentations2x', 'shapes', 'shapes2x', 'slides', 'slides2x', 'captions', 'captions2x', 'breakouts', 'breakouts2x',
+  'polls', 'polls2x', 'presentations', 'presentations2x', 'shapes', 'shapes2x', 'slides', 'slides2x', 'captions', 'captions2x', 'breakouts', 'breakouts2x',
 ];
 
 const BaseContainer = createContainer(({ params }) => {
diff --git a/bigbluebutton-html5/imports/ui/components/audio/service.js b/bigbluebutton-html5/imports/ui/components/audio/service.js
index e2fef659414f56ae2dafee9f87dbe955f8892f9d..7aa92057f2cf2fade4c3e633bda8136397cc8edc 100755
--- a/bigbluebutton-html5/imports/ui/components/audio/service.js
+++ b/bigbluebutton-html5/imports/ui/components/audio/service.js
@@ -2,25 +2,23 @@ import Users from '/imports/api/2.0/users';
 import Auth from '/imports/ui/services/auth';
 
 import AudioManager from '/imports/api/1.1/audio/client/manager';
+import Meetings from '/imports/api/2.0/meetings';
 
 let audioManager;
+
 const init = () => {
   const userId = Auth.userID;
   const User = Users.findOne({ userId });
-  const username = User.name;
+  const username = User.user.name;
+  const Meeting = Meetings.findOne({ meetingId: User.meetingId });
+  const voiceBridge = Meeting.voiceProp.voiceConf;
 
-  const turns = [];
-  const stuns = [];
-  // FIX ME
-  const voiceBridge = 'Meeting.voiceConf';
   // FIX ME
-  const microphoneLockEnforced = 'Meeting.roomLockSettings.disableMic';
+  const microphoneLockEnforced = false;
 
   const userData = {
     userId,
     username,
-    turns,
-    stuns,
     voiceBridge,
     microphoneLockEnforced,
   };
diff --git a/bigbluebutton-html5/imports/ui/services/auth/index.js b/bigbluebutton-html5/imports/ui/services/auth/index.js
index 2b63515fde11e05f706586cf0c31ae6a5cf9eaea..4b2c73f2f9c1d73815b792feaea7b66684da40f9 100644
--- a/bigbluebutton-html5/imports/ui/services/auth/index.js
+++ b/bigbluebutton-html5/imports/ui/services/auth/index.js
@@ -13,6 +13,7 @@ class Auth {
     this._meetingID = Storage.getItem('meetingID');
     this._userID = Storage.getItem('userID');
     this._authToken = Storage.getItem('authToken');
+    this._sessionToken = Storage.getItem('sessionToken');
     this._logoutURL = Storage.getItem('logoutURL');
     this._loggedIn = {
       value: false,
@@ -29,6 +30,15 @@ class Auth {
     Storage.setItem('meetingID', this._meetingID);
   }
 
+  set sessionToken(sessionToken) {
+    this._sessionToken = sessionToken;
+    Storage.setItem('sessionToken', this._sessionToken);
+  }
+
+  get sessionToken() {
+    return this._sessionToken;
+  }
+
   get userID() {
     return this._userID;
   }
@@ -72,14 +82,16 @@ class Auth {
       requesterUserId: this.userID,
       requesterToken: this.token,
       logoutURL: this.logoutURL,
+      sessionToken: this.sessionToken,
     };
   }
 
-  set(meetingId, requesterUserId, requesterToken, logoutURL) {
+  set(meetingId, requesterUserId, requesterToken, logoutURL, sessionToken) {
     this.meetingID = meetingId;
     this.userID = requesterUserId;
     this.token = requesterToken;
     this.logoutURL = logoutURL;
+    this.sessionToken = sessionToken;
   }
 
   clearCredentials(...args) {
@@ -88,6 +100,7 @@ class Auth {
     this.token = null;
     this.loggedIn = false;
     this.logoutURL = null;
+    this.sessionToken = null;
 
     return Promise.resolve(...args);
   }
diff --git a/bigbluebutton-html5/private/config/public/acl.yaml b/bigbluebutton-html5/private/config/public/acl.yaml
index 698feddba35e81bfa8309511193eb423516cb742..57c97d18b066538009a22ca97cf959a856fa39a5 100644
--- a/bigbluebutton-html5/private/config/public/acl.yaml
+++ b/bigbluebutton-html5/private/config/public/acl.yaml
@@ -4,6 +4,7 @@ acl:
       - 'users'
       - 'cursor'
       - 'deskshare'
+      - 'screenshare'
       - 'meetings'
       - 'polls'
       - 'chat'
@@ -20,6 +21,7 @@ acl:
       - 'sendChat'
   moderator:
     methods:
+      - 'assignPresenter'
       - 'kickUser'
       - 'muteUser'
       - 'unmuteUser'