diff --git a/bigbluebutton-client/branding/default/style/css/V2Theme.css b/bigbluebutton-client/branding/default/style/css/V2Theme.css
index f9ef18c420143e19231789c9570b46be4d4d9f89..41fe87c6d38f8da597e390999d0f49dd63da7a3a 100755
--- a/bigbluebutton-client/branding/default/style/css/V2Theme.css
+++ b/bigbluebutton-client/branding/default/style/css/V2Theme.css
@@ -143,7 +143,7 @@ phonecomponents|MuteMeButton {
 
 .toolbarMainBox {
 	backgroundColor : #FFFFFF;
-	paddingTop      : 6;
+	paddingTop      : 0;
 	paddingBottom   : 6;
 }
 
@@ -156,7 +156,7 @@ phonecomponents|MuteMeButton {
 }
 
 .topBoxStyle {
-	paddingTop    : 0;
+	paddingTop    : 6;
 	paddingBottom : 0;
 	paddingLeft   : 8;
 	paddingRight  : 8;
@@ -429,7 +429,7 @@ mx|Button {
 	borderAlphaUp               : 1;
 	borderAlphaOver             : 1;
 	borderAlphaDown             : 1;
-	borderAlphaDisabled         : 1;
+	borderAlphaDisabled         : 0.25;
 
 	borderThickness             : 1;
 
@@ -546,6 +546,10 @@ views|BrowserPermissionHelper {
 //------------------------------
 */
 
+views|ClientStatusWindow {
+	horizontalAlign : right;
+}
+
 views|ClientStatusItemRenderer {
 	iconSuccess : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Success");
 	iconWarning : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Warning");
@@ -636,7 +640,7 @@ chat|AddChatTabBox {
 }
 
 .chatOptionsLabel {
-	fontSize : 14;
+	fontSize   : 14;
 }
 
 .chatMessageListStyle {
@@ -911,6 +915,7 @@ views|LockSettings {
 */
 
 views|MainApplicationShell {
+	borderStyle   : none;
 	paddingBottom : 0;
 	verticalGap   : 0;
 }
@@ -1063,6 +1068,35 @@ views|NetworkStatsWindow {
 	iconRefresh : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Refresh");
 }
 
+/*
+//------------------------------
+//  NumericStepper
+//------------------------------
+*/
+
+mx|NumericStepper {
+	/* Normal state */
+	fillColorUp         : #FFFFFF;
+	fillColorOver       : #CDD4DB;
+	fillColorDown       : #ACB2B7;
+	fillColorDisabled   : #F0F2F6;
+	borderColorUp       : #CDD4DB;
+	borderColorOver     : #1070D7;
+	borderColorDown     : #0A5EAC;
+	borderColorDisabled : #CDD4DB;
+
+	/* Icon states */
+	iconColor           : #4E5A66;
+	iconColorOver       : #1070D7;
+	iconColorDown       : #4E5A66;
+
+	borderThickness     : 1;
+
+	/* Skins */
+	downArrowSkin       : ClassReference("org.bigbluebutton.skins.NumericStepperDownSkin");
+	upArrowSkin         : ClassReference("org.bigbluebutton.skins.NumericStepperUpSkin");
+}
+
 /*
 //------------------------------
 //  PopUpButton
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 17869687a4fd46b750df112b26f0d5871aa91337..2449dea7b3006977b5b045564e4639a1ba51e657 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
@@ -22,24 +22,6 @@ package org.bigbluebutton.skins {
 
 	public class ButtonSkin extends Border {
 
-		//--------------------------------------------------------------------------
-		//
-		//  Constructor
-		//
-		//--------------------------------------------------------------------------
-
-		/**
-		 *  Constructor.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion Flash 9
-		 *  @playerversion AIR 1.1
-		 *  @productversion Flex 3
-		 */
-		public function ButtonSkin() {
-			super();
-		}
-
 		//--------------------------------------------------------------------------
 		//
 		//  Overridden properties
diff --git a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperDownSkin.as b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperDownSkin.as
new file mode 100644
index 0000000000000000000000000000000000000000..6b0456bb1a53f86c1e8c5d9441cfeb33efef07a5
--- /dev/null
+++ b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperDownSkin.as
@@ -0,0 +1,166 @@
+/**
+ * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+ *
+ * Copyright (c) 2017 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/>.
+ *
+ */
+
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.bigbluebutton.skins {
+	import flash.display.Graphics;
+
+	import mx.skins.Border;
+
+	public class NumericStepperDownSkin extends Border {
+
+		//--------------------------------------------------------------------------
+		//
+		//  Overridden properties
+		//
+		//--------------------------------------------------------------------------
+
+		//----------------------------------
+		//  measuredWidth
+		//----------------------------------
+
+		/**
+		 *  @private
+		 */
+		override public function get measuredWidth():Number {
+			return 19;
+		}
+
+		//----------------------------------
+		//  measuredHeight
+		//----------------------------------
+
+		/**
+		 *  @private
+		 */
+		override public function get measuredHeight():Number {
+			return 11;
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Overridden methods
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  @private
+		 */
+		override protected function updateDisplayList(w:Number, h:Number):void {
+			super.updateDisplayList(w, h);
+
+			var borderColorUp:uint = getStyle("borderColorUp");
+			var borderColorOver:uint = getStyle("borderColorOver");
+			var borderColorDown:uint = getStyle("borderColorDown");
+			var borderColorDisabled:uint = getStyle("borderColorDisabled");
+
+			var borderThickness:uint = getStyle("borderThickness");
+
+			var fillColorUp:uint = getStyle("fillColorUp");
+			var fillColorOver:uint = getStyle("fillColorOver");
+			var fillColorDown:uint = getStyle("fillColorDown");
+			var fillColorDisabled:uint = getStyle("fillColorDisabled");
+
+			// User-defined styles.
+			var arrowColor:uint = getStyle("iconColor");
+			var arrowColorOver:uint = getStyle("iconColorOver");
+			var arrowColorDown:uint = getStyle("iconColorDown");
+
+			var cornerRadius:Number = getStyle("cornerRadius");
+
+			var cr:Object = {tl: 0, tr: 0, bl: 0, br: cornerRadius};
+			var cr1:Object = {tl: 0, tr: 0, bl: 0, br: Math.max(cornerRadius - 1, 0)};
+
+			// Draw the background and border.
+			var g:Graphics = graphics;
+
+			g.clear();
+
+			switch (name) {
+				case "downArrowUpSkin":  {
+					// border
+					drawRoundRect(0, 0, w, h, cr, borderColorUp, 1, null, null, null, {x: 1, y: 0, w: w - 2, h: h - 1, r: cr1});
+
+					// button fill
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorUp, 1);
+
+					break;
+				}
+
+				case "downArrowOverSkin":  {
+					// border
+					drawRoundRect(0, 0, w, h, cr, borderColorOver, 1, null, null, null, {x: 1, y: 0, w: w - 2, h: h - 1, r: cr1});
+
+					// button fill
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorOver, 1, null);
+
+					break;
+				}
+
+				case "downArrowDownSkin":  {
+					// border
+					drawRoundRect(0, 0, w, h, cr, borderColorDown, 1);
+
+					// button fill
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDown, 1);
+
+					break;
+				}
+
+				case "downArrowDisabledSkin":  {
+					// border
+					drawRoundRect(0, 0, w, h, cr, borderColorDisabled, 0.5, null, null, null, {x: 1, y: 0, w: w - 2, h: h - 1, r: cr1});
+
+					// button fill
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDisabled, 0.5, null);
+
+					arrowColor = getStyle("disabledIconColor");
+					break;
+				}
+			}
+
+			// Draw the arrow.
+			g.beginFill(arrowColor);
+			g.moveTo(w / 2, h / 2 + 1.5);
+			g.lineTo(w / 2 - 3.5, h / 2 - 2.5);
+			g.lineTo(w / 2 + 3.5, h / 2 - 2.5);
+			g.lineTo(w / 2, h / 2 + 1.5);
+			g.endFill();
+		}
+	}
+}
+
diff --git a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperUpSkin.as b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperUpSkin.as
new file mode 100644
index 0000000000000000000000000000000000000000..26f2938c3ddd4f7ecd68032017dafff338647ccd
--- /dev/null
+++ b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/NumericStepperUpSkin.as
@@ -0,0 +1,165 @@
+/**
+ * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+ *
+ * Copyright (c) 2017 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/>.
+ *
+ */
+
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.bigbluebutton.skins {
+	import flash.display.Graphics;
+
+	import mx.skins.Border;
+
+	public class NumericStepperUpSkin extends Border {
+
+		//--------------------------------------------------------------------------
+		//
+		//  Overridden properties
+		//
+		//--------------------------------------------------------------------------
+
+		//----------------------------------
+		//  measuredWidth
+		//----------------------------------
+
+		/**
+		 *  @private
+		 */
+		override public function get measuredWidth():Number {
+			return 19;
+		}
+
+		//----------------------------------
+		//  measuredHeight
+		//----------------------------------
+
+		/**
+		 *  @private
+		 */
+		override public function get measuredHeight():Number {
+			return 11;
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Overridden methods
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  @private
+		 */
+		override protected function updateDisplayList(w:Number, h:Number):void {
+			super.updateDisplayList(w, h);
+
+			var borderColorUp:uint = getStyle("borderColorUp");
+			var borderColorOver:uint = getStyle("borderColorOver");
+			var borderColorDown:uint = getStyle("borderColorDown");
+			var borderColorDisabled:uint = getStyle("borderColorDisabled");
+
+			var borderThickness:uint = getStyle("borderThickness");
+
+			var fillColorUp:uint = getStyle("fillColorUp");
+			var fillColorOver:uint = getStyle("fillColorOver");
+			var fillColorDown:uint = getStyle("fillColorDown");
+			var fillColorDisabled:uint = getStyle("fillColorDisabled");
+
+			// User-defined styles.
+			var arrowColor:uint = getStyle("iconColor");
+			var arrowColorOver:uint = getStyle("iconColorOver");
+			var arrowColorDown:uint = getStyle("iconColorDown");
+
+			var cornerRadius:Number = getStyle("cornerRadius");
+
+			var cr:Object = {tl: 0, tr: cornerRadius, bl: 0, br: 0};
+			var cr1:Object = {tl: 0, tr: Math.max(cornerRadius - 1, 0), bl: 0, br: 0};
+
+			// Draw the background and border.
+			var g:Graphics = graphics;
+
+			g.clear();
+
+			switch (name) {
+				case "upArrowUpSkin":  {
+					// border
+					drawRoundRect(0, 0, w, h, cr, borderColorUp, 1, null, null, null, {x: 1, y: 1, w: w - 2, h: h - 2, r: cr1});
+
+					// button fill
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorUp, 1);
+
+					break;
+				}
+
+				case "upArrowOverSkin":  {
+					// border
+					drawRoundRect(0, 0, w, h, cr, borderColorOver, 1, null, null, null, {x: 1, y: 1, w: w - 2, h: h - 2, r: cr1});
+
+					// button fill
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorOver, 1, null);
+
+					break;
+				}
+
+				case "upArrowDownSkin":  {
+					// border
+					drawRoundRect(0, 0, w, h, cr, borderColorDown, 1);
+
+					// button fill
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDown, 1);
+
+					break;
+				}
+
+				case "upArrowDisabledSkin":  {
+					// border
+					drawRoundRect(0, 0, w, h, cr, borderColorDisabled, 0.5, null, null, null, {x: 1, y: 1, w: w - 2, h: h - 2, r: cr1});
+
+					// button fill
+					drawRoundRect(borderThickness, borderThickness, w - (borderThickness * 2), h - (borderThickness * 2), cr1, fillColorDisabled, 0.5, null);
+
+					arrowColor = getStyle("disabledIconColor");
+					break;
+				}
+			}
+
+			// Draw the arrow.
+			g.beginFill(arrowColor);
+			g.moveTo(w / 2, h / 2 - 2.5);
+			g.lineTo(w / 2 - 3.5, h / 2 + 1.5);
+			g.lineTo(w / 2 + 3.5, h / 2 + 1.5);
+			g.lineTo(w / 2, h / 2 - 2.5);
+			g.endFill();
+		}
+	}
+}
diff --git a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/TabSkin.as b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/TabSkin.as
index d98beece30ff2ee0009cc90d7515e9c27ec1c870..4393939c032e2245e73f4ad1b068fabe20752483 100644
--- a/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/TabSkin.as
+++ b/bigbluebutton-client/branding/default/style/css/org/bigbluebutton/skins/TabSkin.as
@@ -40,7 +40,7 @@ package org.bigbluebutton.skins {
 	import flash.display.DisplayObjectContainer;
 	import flash.utils.describeType;
 	import flash.utils.getQualifiedClassName;
-	
+
 	import mx.core.EdgeMetrics;
 	import mx.core.UIComponent;
 	import mx.skins.Border;
@@ -48,17 +48,6 @@ package org.bigbluebutton.skins {
 
 	public class TabSkin extends Border {
 
-		//--------------------------------------------------------------------------
-		//
-		//  Class variables
-		//
-		//--------------------------------------------------------------------------
-
-		/**
-		 *  @private
-		 */
-		private static var cache:Object = {};
-
 		//--------------------------------------------------------------------------
 		//
 		//  Overridden properties
diff --git a/bigbluebutton-client/locale/en_US/bbbResources.properties b/bigbluebutton-client/locale/en_US/bbbResources.properties
index 9c5f4dcafa3e831a303720b9b27d0d14c4fdeb4c..ff717853fc9230d4be7d3d8e556f2497e85b66ff 100755
--- a/bigbluebutton-client/locale/en_US/bbbResources.properties
+++ b/bigbluebutton-client/locale/en_US/bbbResources.properties
@@ -246,7 +246,7 @@ bbb.presentation.fitToWidth.toolTip = Fit Presentation To Width
 bbb.presentation.fitToPage.toolTip = Fit Presentation To Page
 bbb.presentation.uploadPresBtn.toolTip = Upload Presentation
 bbb.presentation.downloadPresBtn.toolTip = Download Presentations
-bbb.presentation.poll.response = Response to poll
+bbb.presentation.poll.response = Respond to poll
 bbb.presentation.backBtn.toolTip = Previous slide
 bbb.presentation.btnSlideNum.accessibilityName = Slide {0} of {1}
 bbb.presentation.btnSlideNum.toolTip = Select a slide
@@ -449,6 +449,7 @@ bbb.toolbar.deskshare.toolTip.stop = Stop Sharing Your Screen
 bbb.toolbar.sharednotes.toolTip = Open Shared Notes
 bbb.toolbar.video.toolTip.start = Share Your Webcam
 bbb.toolbar.video.toolTip.stop = Stop Sharing Your Webcam
+bbb.layout.addButton.label = Add
 bbb.layout.addButton.toolTip = Add the custom layout to the list
 bbb.layout.overwriteLayoutName.title = Overwrite layout
 bbb.layout.overwriteLayoutName.text = Name already in use. Do you want to overwrite?
@@ -462,6 +463,8 @@ bbb.layout.combo.custom = * Custom layout
 bbb.layout.combo.customName = Custom layout
 bbb.layout.combo.remote = Remote
 bbb.layout.window.name = Layout name
+bbb.layout.window.close.tooltip = Close
+bbb.layout.window.close.accessibilityName = Close add new layout window
 bbb.layout.save.complete = Layouts were successfully saved
 bbb.layout.save.ioerror = Layouts were not saved. Try saving again.
 bbb.layout.load.complete = Layouts were successfully loaded
diff --git a/bigbluebutton-client/src/org/bigbluebutton/common/IKeyboardClose.as b/bigbluebutton-client/src/org/bigbluebutton/common/IKeyboardClose.as
new file mode 100644
index 0000000000000000000000000000000000000000..56fc919a237772830753b559600bdd6ae7607ef0
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/common/IKeyboardClose.as
@@ -0,0 +1,26 @@
+/**
+ * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+ *
+ * Copyright (c) 2017 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.common {
+
+	/**
+	 * Add it to popup classes to add the Keyboard.ESCAPE close behaviour
+	 */
+	public interface IKeyboardClose {
+	}
+}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/PopUpUtil.as b/bigbluebutton-client/src/org/bigbluebutton/core/PopUpUtil.as
index d500bd937b60d2e196c7ac84e265230a9745d580..af268ec346ac0700cafc828d1b0ae9c56fa964de 100644
--- a/bigbluebutton-client/src/org/bigbluebutton/core/PopUpUtil.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/PopUpUtil.as
@@ -17,76 +17,90 @@
  *
  */
 package org.bigbluebutton.core {
-    import flash.display.DisplayObject;
-    import flash.utils.Dictionary;
-    import flash.utils.getQualifiedClassName;
+	import flash.display.DisplayObject;
+	import flash.events.KeyboardEvent;
+	import flash.ui.Keyboard;
+	import flash.utils.Dictionary;
+	import flash.utils.getQualifiedClassName;
 
-    import mx.core.FlexGlobals;
-    import mx.core.IChildList;
-    import mx.core.IFlexDisplayObject;
-    import mx.core.IUIComponent;
-    import mx.managers.PopUpManager;
-    import mx.managers.SystemManager;
+	import mx.core.FlexGlobals;
+	import mx.core.IChildList;
+	import mx.core.IFlexDisplayObject;
+	import mx.core.IUIComponent;
+	import mx.managers.PopUpManager;
+	import mx.managers.SystemManager;
 
-    import org.as3commons.logging.api.ILogger;
-    import org.as3commons.logging.api.getClassLogger;
+	import org.as3commons.logging.api.ILogger;
+	import org.as3commons.logging.api.getClassLogger;
+	import org.bigbluebutton.common.IKeyboardClose;
 
-    public final class PopUpUtil {
+	public final class PopUpUtil {
 
-        private static const LOGGER:ILogger = getClassLogger(PopUpUtil);
+		private static const LOGGER:ILogger = getClassLogger(PopUpUtil);
 
-        private static var popUpDict:Dictionary = new Dictionary(true);
+		private static var popUpDict:Dictionary = new Dictionary(true);
 
-        public static function createNonModelPopUp(parent:DisplayObject, className:Class, center:Boolean = true):IFlexDisplayObject {
-            if (!checkPopUpExists(className)) {
-                return addPopUpToStage(parent, className, false, center);
-            }
-            return null;
-        }
+		public static function createNonModalPopUp(parent:DisplayObject, className:Class, center:Boolean = true):IFlexDisplayObject {
+			if (!checkPopUpExists(className)) {
+				return addPopUpToStage(parent, className, false, center);
+			}
+			return null;
+		}
 
-        public static function createModalPopUp(parent:DisplayObject, className:Class, center:Boolean = true):IFlexDisplayObject {
-            if (!checkPopUpExists(className)) {
-                return addPopUpToStage(parent, className, true, center);
-            }
-            return null;
-        }
+		public static function createModalPopUp(parent:DisplayObject, className:Class, center:Boolean = true):IFlexDisplayObject {
+			if (!checkPopUpExists(className)) {
+				return addPopUpToStage(parent, className, true, center);
+			}
+			return null;
+		}
 
-        public static function removePopUp(classOrInstance:*):void {
-            var fqcn:String = getQualifiedClassName(classOrInstance);
-            if (popUpDict[fqcn] != undefined) {
-                PopUpManager.removePopUp(popUpDict[fqcn])
-                delete popUpDict[fqcn];
-                LOGGER.debug("Removed PopUp with type [{0}]", [fqcn]);
-            }
-        }
+		public static function removePopUp(classOrInstance:*):void {
+			var fqcn:String = getQualifiedClassName(classOrInstance);
+			if (popUpDict[fqcn] != undefined) {
+				PopUpManager.removePopUp(popUpDict[fqcn])
+				delete popUpDict[fqcn];
+				LOGGER.debug("Removed PopUp with type [{0}]", [fqcn]);
+			}
+		}
 
-        private static function checkPopUpExists(className:Class):Boolean {
-            LOGGER.debug("Checking if [{0}] exists as a PopUp", [className]);
-            var systemManager:SystemManager = FlexGlobals.topLevelApplication.systemManager;
+		private static function checkPopUpExists(className:Class):Boolean {
+			LOGGER.debug("Checking if [{0}] exists as a PopUp", [className]);
+			var systemManager:SystemManager = FlexGlobals.topLevelApplication.systemManager;
 
-            var childList:IChildList = systemManager.rawChildren;
-            for (var i:int = childList.numChildren - 1; i >= 0; i--) {
-                var childObject:IUIComponent = childList.getChildAt(i) as IUIComponent;
-                // PopUp already exists
-                if (childObject is className && childObject.isPopUp) {
-                    LOGGER.debug("PopUp with type [{0}] found", [className]);
-                    return true;
-                }
-            }
-            LOGGER.debug("No PopUp with type [{0}] not found", [className]);
-            return false;
-        }
+			var childList:IChildList = systemManager.rawChildren;
+			for (var i:int = childList.numChildren - 1; i >= 0; i--) {
+				var childObject:IUIComponent = childList.getChildAt(i) as IUIComponent;
+				// PopUp already exists
+				if (childObject is className && childObject.isPopUp) {
+					LOGGER.debug("PopUp with type [{0}] found", [className]);
+					return true;
+				}
+			}
+			LOGGER.debug("No PopUp with type [{0}] not found", [className]);
+			return false;
+		}
 
-        private static function addPopUpToStage(parent:DisplayObject, className:Class, modal:Boolean = false, center:Boolean = true):IFlexDisplayObject {
-            var popUp:IFlexDisplayObject = PopUpManager.createPopUp(parent, className, modal);
-            if (center) {
-                PopUpManager.centerPopUp(popUp)
-            }
-            popUpDict[getQualifiedClassName(className)] = popUp;
+		private static function addPopUpToStage(parent:DisplayObject, className:Class, modal:Boolean = false, center:Boolean = true):IFlexDisplayObject {
+			var popUp:IFlexDisplayObject = PopUpManager.createPopUp(parent, className, modal);
+			if (center) {
+				PopUpManager.centerPopUp(popUp)
+			}
+			popUpDict[getQualifiedClassName(className)] = popUp;
 
-            LOGGER.debug("Created PopUp with type [{0}]", [className]);
+			if (popUp is IKeyboardClose) {
+				popUp.addEventListener(KeyboardEvent.KEY_DOWN, escapeKeyDownHandler);
+			}
 
-            return popUp;
-        }
-    }
+			LOGGER.debug("Created PopUp with type [{0}]", [className]);
+
+			return popUp;
+		}
+
+		private static function escapeKeyDownHandler(event:KeyboardEvent):void {
+			if (event.charCode == Keyboard.ESCAPE) {
+				event.currentTarget.removeEventListener(KeyboardEvent.KEY_DOWN, escapeKeyDownHandler);
+				removePopUp(event.currentTarget);
+			}
+		}
+	}
 }
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml
index efe6d4e6b27c7f5d498f976a2a125f8d2058d969..96342523040b0e904a5674908f3b2cc516ce2b47 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml
@@ -23,9 +23,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				xmlns:fx="http://ns.adobe.com/mxml/2009"
 				xmlns:mate="http://mate.asfusion.com/"
 				xmlns:common="org.bigbluebutton.common.*"
+				implements="org.bigbluebutton.common.IKeyboardClose"
+				show="this.setFocus()"
 				initialize="init()"
 				layout="absolute"
-				close="onCancelClicked()"
 				verticalScrollPolicy="off"
 				horizontalScrollPolicy="off"
 				showCloseButton="false">
@@ -103,7 +104,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			}
 			
 			private function onCancelClicked():void {
-				LOGGER.debug("AudioSelectionWindow - Cancel clicked");
+				LOGGER.debug("AudioSelectionWindow - Close clicked");
 				var dispatcher:Dispatcher = new Dispatcher();
 				dispatcher.dispatchEvent(new AudioSelectionWindowEvent(AudioSelectionWindowEvent.CLOSED_AUDIO_SELECTION));
 				
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/BBBSettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/BBBSettings.mxml
index ef9fc85597cad67749505ce61f05ce6a43d2827e..84c386eac9eba1eb47d02d8ab10920f04eb4ba2b 100644
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/BBBSettings.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/BBBSettings.mxml
@@ -3,6 +3,8 @@
 		xmlns:fx="http://ns.adobe.com/mxml/2009"
 		xmlns:common="org.bigbluebutton.common.*" 
 		xmlns:mate="http://mate.asfusion.com/"
+		implements="org.bigbluebutton.common.IKeyboardClose"
+		show="this.setFocus()"
 		layout="vertical"
 		horizontalAlign="center"
 		showCloseButton="false"
@@ -14,6 +16,7 @@
 			import mx.core.UIComponent;
 			import mx.managers.PopUpManager;
 			
+			import org.bigbluebutton.common.IKeyboardClose;
 			import org.bigbluebutton.main.events.BBBEvent;
 			import org.bigbluebutton.util.i18n.ResourceUtil;
 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml
index 3aaea09d0cbe9c5c11aeee9bdf09c2b05d72ea24..5391b2262dcc46be17f37c4d96868eee1e9ed47c 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml
@@ -25,7 +25,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
                 layout="absolute"
                 verticalScrollPolicy="off" horizontalScrollPolicy="off"
                 width="630" height="450" creationComplete="onCreationComplete()" styleName="cameraDisplaySettingsWindowStyle" 
-                showCloseButton="false" close="onCancelClicked()" keyDown="handleKeyDown(event)">
+                showCloseButton="false" keyDown="handleKeyDown(event)">
   <fx:Script>
     <![CDATA[
 		import com.asfusion.mate.events.Dispatcher;
@@ -34,7 +34,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		
 		import mx.collections.ArrayCollection;
 		import mx.collections.ArrayList;
-		import mx.events.CloseEvent;
 		
 		import org.bigbluebutton.common.Media;
 		import org.bigbluebutton.core.BBB;
@@ -188,8 +187,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		
 		private function handleKeyDown(event:KeyboardEvent):void {
 			if (event.charCode == Keyboard.ESCAPE) {
-				disableCamera();
-				this.dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
+				onCancelClicked();
 			}
 		}
 		
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/ClientStatusWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/ClientStatusWindow.mxml
index f58613d45a7d53a9ed1de0f8a9bf43299a87f7c7..4904357c7ec4831dd8593436d9677eabcb2cf7e6 100644
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/ClientStatusWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/ClientStatusWindow.mxml
@@ -23,12 +23,14 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				xmlns:fx="http://ns.adobe.com/mxml/2009"
 				xmlns:chat="org.bigbluebutton.modules.chat.views.*"
 				width="500" height="400"
+				implements="org.bigbluebutton.common.IKeyboardClose"
+				show="this.setFocus()"
 				horizontalScrollPolicy="off"
 				title="{ResourceUtil.getInstance().getString('bbb.clientstatus.title')}"
-				horizontalAlign="center"
 				creationComplete="onCreationComplete();">
 	<fx:Script>
 		<![CDATA[
+			import org.bigbluebutton.common.IKeyboardClose;
 			import org.bigbluebutton.core.PopUpUtil;
 			import org.bigbluebutton.util.i18n.ResourceUtil;
 			
@@ -45,6 +47,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			}
 		]]>
 	</fx:Script>
-	<chat:AdvancedList id="messageList" width="100%" dragEnabled="false" variableRowHeight="true" wordWrap="true" alternatingItemColors="[#EFEFEF, #FEFEFE]" itemRenderer="org.bigbluebutton.main.views.ClientStatusItemRenderer"/>
+	<chat:AdvancedList id="messageList" width="100%" height="100%" dragEnabled="false" variableRowHeight="true" wordWrap="true" itemRenderer="org.bigbluebutton.main.views.ClientStatusItemRenderer"/>
 	<mx:Button id="closeBtn" label="{ResourceUtil.getInstance().getString('bbb.clientstatus.close')}" click="handleCloseButtonClick();" />
 </mx:TitleWindow>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml
index f9b180daa6514a71a2a836310ac903babb6ab473..c5fab8fe03f26bd63ce141e2f284558bc648ecf8 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml
@@ -25,8 +25,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				width="600" height="390"
 				verticalScrollPolicy="off"
 				creationComplete="onCreationComplete()" 
-				showCloseButton="false" 
-				close="onCancelClicked()" 
+				showCloseButton="false"
 				keyDown="handleKeyDown(event)">
 
 	<fx:Declarations>
@@ -44,7 +43,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			import flash.ui.Keyboard;
 			
 			import mx.controls.sliderClasses.Slider;
-			import mx.events.CloseEvent;
 			import mx.events.SliderEvent;
 			
 			import org.as3commons.logging.api.ILogger;
@@ -184,7 +182,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			// Added by Chad to enable closing the window without clicking the X
 			private function handleKeyDown(event:KeyboardEvent):void {
 				if (event.charCode == Keyboard.ESCAPE) {
-					this.dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
+					onCancelClicked();
 				}
 			}
 								
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml
index 21262cec7d80b38a20cdd703782b10e852d7d63b..21601df606c3966582ae7d7fe52facfb264d3fce 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/GuestWindow.mxml
@@ -128,7 +128,6 @@ $Id: $
             public function closeWindow():void {
                 this.visible = false;
                 PopUpManager.removePopUp(this);
-                //dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
             }
             
         ]]>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/LockSettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/LockSettings.mxml
index cba5732e212519d275465df4cc0a217e15491978..82da5cbe347b1d786a9beebd310ba7221e93c9d4 100644
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/LockSettings.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/LockSettings.mxml
@@ -21,15 +21,14 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx" 
 				xmlns:fx="http://ns.adobe.com/mxml/2009"
 				xmlns:mate="http://mate.asfusion.com/" 
+				implements="org.bigbluebutton.common.IKeyboardClose"
+				show="this.setFocus()"
 				xmlns:common="org.bigbluebutton.common.*"
 				minWidth="340" showCloseButton="false" 
-				close="onCancelClicked()" 
 				keyDown="handleKeyDown(event)">
 	
 	<fx:Script>
 		<![CDATA[
-			import mx.events.CloseEvent;
-			
 			import org.bigbluebutton.core.PopUpUtil;
 			import org.bigbluebutton.core.events.LockControlEvent;
 			import org.bigbluebutton.core.vo.LockSettingsVO;
@@ -49,7 +48,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			
 			private function handleKeyDown(event:KeyboardEvent):void {
 				if (event.charCode == Keyboard.ESCAPE) {
-					this.dispatchEvent(new CloseEvent(CloseEvent.CLOSE));
+					onCancelClicked();
 				}
 			}
 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/LogoutWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/LogoutWindow.mxml
index 1d7dfdbee6996145fda94d36b0a60e2830c676f0..7fbcafb862f8ca76e7c293db655370d10d20caa7 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/LogoutWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/LogoutWindow.mxml
@@ -22,6 +22,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx"
 		  xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:mate="http://mate.asfusion.com/"
+		  implements="org.bigbluebutton.common.IKeyboardClose"
 		  verticalScrollPolicy="off"
           horizontalScrollPolicy="off"
           horizontalAlign="center"
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
index f868abcf1af476c8cb523ddb8346c90bac90f4cc..b4af325d646e1db8de59c2fb4bd05a5c0f69306a 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
@@ -606,7 +606,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
             }
 
             private function wrongLocaleVersion():void {
-                var localeWindow:OldLocaleWarnWindow = PopUpUtil.createNonModelPopUp(mdiCanvas, OldLocaleWarnWindow, false) as OldLocaleWarnWindow;
+                var localeWindow:OldLocaleWarnWindow = PopUpUtil.createNonModalPopUp(mdiCanvas, OldLocaleWarnWindow, false) as OldLocaleWarnWindow;
                 if (localeWindow) {
                     var point1:Point = new Point();
                     // Calculate position of TitleWindow in Application's coordinates. 
@@ -671,7 +671,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
             }
 			
 			private function showbrowserPermissionHelper() : void {
-				var browserPermissionHelper : BrowserPermissionHelper = PopUpUtil.createNonModelPopUp(mdiCanvas, BrowserPermissionHelper, false) as BrowserPermissionHelper;
+				var browserPermissionHelper : BrowserPermissionHelper = PopUpUtil.createNonModalPopUp(mdiCanvas, BrowserPermissionHelper, false) as BrowserPermissionHelper;
 				if (browserPermissionHelper) {
 					browserPermissionHelper.currentState = "chromeCam";
 					browserPermissionHelper.x = 20;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
index f939574e9649e32d20de1b5da79741da5641a9ca..4c89be6da6d21a1ec2a0dab11ad0df8436ef0e06 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
@@ -75,6 +75,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			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.TimerUtil;
 			import org.bigbluebutton.core.UsersUtil;
 			import org.bigbluebutton.core.events.MeetingTimeRemainingEvent;
@@ -300,14 +301,11 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			
 			private function confirmLogout():void {
 				if (toolbarOptions.confirmLogout) {
-					var logoutWindow:LogoutWindow;
-					logoutWindow = LogoutWindow(PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, LogoutWindow, true));
+					var logoutWindow:LogoutWindow = PopUpUtil.createModalPopUp(FlexGlobals.topLevelApplication as DisplayObject, LogoutWindow, true) as LogoutWindow;
 
 					var newX:Number = this.width - logoutWindow.width - 5;
 					var newY:Number = btnLogout.y + btnLogout.height + 5;
 
-					PopUpManager.centerPopUp(logoutWindow);
-
 					logoutWindow.x = newX;
 					logoutWindow.y = newY;
 				} else {
@@ -517,8 +515,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			}
 
 			private function onSettingsButtonClick():void {
-				settingsPopup = BBBSettings(PopUpManager.createPopUp(this.parent, BBBSettings, true));
+				settingsPopup = PopUpUtil.createModalPopUp(this.parent, BBBSettings, true) as BBBSettings;
 				settingsPopup.pushComponents(settingsComponents);
+				PopUpManager.centerPopUp(settingsPopup);
 			}
 
 			private function refreshRole(e:ChangeMyRole):void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml
index 87f69ff8a22bba353570f058119c8a8bbf408a83..2e31a4454a1a2f797926061f4603f674905f85b6 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml
@@ -24,8 +24,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				xmlns:common="org.bigbluebutton.common.*"
 				width="600" height="380"
 				creationComplete="onCreationComplete()"
-				showCloseButton="false"
-				close="onCancelClicked()">
+				showCloseButton="false">
 	
 	<fx:Declarations>
 		<mate:Listener type="{WebRTCEchoTestStartedEvent.WEBRTC_ECHO_TEST_STARTED}" method="handleWebRTCEchoTestStartedEvent" />
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml
index 7887fc9f9e9208dac8349da3567caefee201f741..70155be04396be5833ed5606a65963b35a2c3003 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/AddChatTabBox.mxml
@@ -199,7 +199,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		<common:TabIndexer id="tabIndexer" startIndex="1" tabIndices="{[usersList, cmbFontSize, chatNoiseCheckBox, saveBtn, copyBtn, clearBtn]}"/>
 	</fx:Declarations>
     
-    <mx:Label id="lblSelect" styleName="chatOptionsLabel"
+    <common:AdvancedLabel id="lblSelect" styleName="chatOptionsLabel" width="100%"
 			  text="{ResourceUtil.getInstance().getString('bbb.chat.privateChatSelect')}" 
 			  visible="{chatOptions.privateEnabled}" includeInLayout="{chatOptions.privateEnabled}"/>
     <mx:List id="usersList" height="50%" width="100%" dataProvider="{users}" dragEnabled="false" 
@@ -210,7 +210,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
              keyDown="onUserListKeyDown(event)"
              toolTip="{ResourceUtil.getInstance().getString('bbb.chat.usersList.toolTip')}"
              accessibilityName="{ResourceUtil.getInstance().getString('bbb.chat.usersList.accessibilityName')}"/>
-    <mx:Label styleName="chatOptionsLabel" text="{ResourceUtil.getInstance().getString('bbb.chat.chatOptions')}" />
+    <mx:Label styleName="chatOptionsLabel" width="100%" fontWeight="bold" text="{ResourceUtil.getInstance().getString('bbb.chat.chatOptions')}" />
     <mx:HBox width="100%">
         <mx:Label styleName="chatOptionsLabel" text="{ResourceUtil.getInstance().getString('bbb.chat.fontSize')}" width="100%"/>
         <mx:ComboBox width="60" id="cmbFontSize" dataProvider="{fontSizes}" change="changeFontSize()" 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/managers/LayoutManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/managers/LayoutManager.as
index 1cc0824e14012f022f9d6ea54964c9a51be4948b..8789bd413f8f2be157101797fdc91088fa810d0b 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/managers/LayoutManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/managers/LayoutManager.as
@@ -33,7 +33,6 @@ package org.bigbluebutton.modules.layout.managers
   import mx.events.CloseEvent;
   import mx.events.EffectEvent;
   import mx.events.ResizeEvent;
-  import mx.managers.PopUpManager;
   
   import flexlib.mdi.containers.MDICanvas;
   import flexlib.mdi.containers.MDIWindow;
@@ -43,6 +42,7 @@ package org.bigbluebutton.modules.layout.managers
   import org.as3commons.logging.api.getClassLogger;
   import org.bigbluebutton.common.CustomMdiWindow;
   import org.bigbluebutton.core.Options;
+  import org.bigbluebutton.core.PopUpUtil;
   import org.bigbluebutton.core.UsersUtil;
   import org.bigbluebutton.core.events.SwitchedLayoutEvent;
   import org.bigbluebutton.core.model.LiveMeeting;
@@ -130,9 +130,8 @@ package org.bigbluebutton.modules.layout.managers
 		public function alertSaveCurrentLayoutFile(e:CloseEvent):void {
 				// Check to see if the YES button was pressed.
 				if (e.detail==Alert.YES) {
-					var layoutNameWindow:CustomLayoutNameWindow = PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, CustomLayoutNameWindow, true) as CustomLayoutNameWindow;
+					var layoutNameWindow:CustomLayoutNameWindow = PopUpUtil.createModalPopUp(FlexGlobals.topLevelApplication as DisplayObject, CustomLayoutNameWindow, true) as CustomLayoutNameWindow;
 					layoutNameWindow.savingForFileDownload = true;
-					PopUpManager.centerPopUp(layoutNameWindow);
 				} else if (e.detail==Alert.NO){
 					saveLayoutsWindow();
 				}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml
index 8379e718a56b126b79eec8b8248fa383700bd320..94a959779e4f7ca7d1b649817e04fec1db06c40b 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml
@@ -34,9 +34,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			import flash.events.Event;
 			
 			import mx.core.FlexGlobals;
-			import mx.core.IFlexDisplayObject;
-			import mx.managers.PopUpManager;
 			
+			import org.bigbluebutton.core.PopUpUtil;
 			import org.bigbluebutton.core.UsersUtil;
 			import org.bigbluebutton.util.i18n.ResourceUtil;
 
@@ -46,8 +45,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			}
 			
 			private function onClick(e:Event):void {
-				var layoutNameWindow:IFlexDisplayObject = PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, CustomLayoutNameWindow, true);
-				PopUpManager.centerPopUp(layoutNameWindow);
+				PopUpUtil.createModalPopUp(FlexGlobals.topLevelApplication as DisplayObject, CustomLayoutNameWindow, true);
 			}
 			
 			public function refreshRole(amIModerator:Boolean):void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/CustomLayoutNameWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/CustomLayoutNameWindow.mxml
index 0a76cea90ca0fd8806c1a47e165005325eee0815..fb9c77872605c83fadc7b9947fa86721ac9d0878 100644
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/CustomLayoutNameWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/CustomLayoutNameWindow.mxml
@@ -22,14 +22,15 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx"
 		  xmlns:fx="http://ns.adobe.com/mxml/2009"
           xmlns:mate="http://mate.asfusion.com/"
+		  xmlns:common="org.bigbluebutton.common.*"
+		  implements="org.bigbluebutton.common.IKeyboardClose"
           verticalScrollPolicy="off"
           horizontalScrollPolicy="off"
           horizontalAlign="center"
-          showCloseButton="true"
-          close="onCancelClicked()"
+		  layout="absolute"
+		  showCloseButton="false"
           creationComplete="onCreationComplete()"
-          width="250"
-          title="{ResourceUtil.getInstance().getString('bbb.layout.window.name')}">
+          width="280">
 
 	<fx:Declarations>
 	  <mate:Listener type="{LayoutNameInUseEvent.LAYOUT_NAME_IN_USE_EVENT}" method="handleLayoutNameInUse"/>
@@ -37,13 +38,17 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 
   <fx:Script>
     <![CDATA[
-      import com.asfusion.mate.events.Dispatcher;
-      
-      import mx.managers.PopUpManager;
-      
-      import org.bigbluebutton.modules.layout.events.LayoutEvent;
-      import org.bigbluebutton.modules.layout.events.LayoutNameInUseEvent;
-      import org.bigbluebutton.util.i18n.ResourceUtil;
+		import com.asfusion.mate.events.Dispatcher;
+		
+		import mx.managers.PopUpManager;
+		
+		import org.as3commons.logging.api.ILogger;
+		import org.as3commons.logging.api.getClassLogger;
+		import org.bigbluebutton.modules.layout.events.LayoutEvent;
+		import org.bigbluebutton.modules.layout.events.LayoutNameInUseEvent;
+		import org.bigbluebutton.util.i18n.ResourceUtil;
+		
+		private static const LOGGER:ILogger = getClassLogger(CustomLayoutNameWindow);      
 
       public var savingForFileDownload:Boolean = false;
 
@@ -65,7 +70,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
             savingForFileDownload = false;
           }
         } else {
-          trace("The name is already in use, waiting for overwrite command or rename");
+          LOGGER.debug("The name is already in use, waiting for overwrite command or rename");
         }
       }
 
@@ -79,8 +84,23 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
     ]]>
   </fx:Script>
 
-  <mx:HBox width="100%" height="100%" horizontalAlign="center" verticalAlign="middle">
-      <mx:TextInput id="textInput" maxChars="140" width="100%" text="{ResourceUtil.getInstance().getString('bbb.layout.combo.customName')}" enter="addButton_clickHandler()"/>
-      <mx:Button id="addButton" click="addButton_clickHandler()" enabled="{textInput.text.length > 0}" styleName="addLayoutButtonStyle" toolTip="{ResourceUtil.getInstance().getString('bbb.layout.addButton.toolTip')}"/>
-  </mx:HBox>
+  <mx:VBox width="100%"
+		   height="100%"
+		   paddingTop="5"
+		   horizontalAlign="center">
+	  <common:AdvancedLabel text="{ResourceUtil.getInstance().getString('bbb.layout.window.name')}"
+							styleName="titleWindowStyle"
+							width="180" />
+	  <mx:TextInput id="textInput" height="26" maxChars="140" width="100%"
+					text="{ResourceUtil.getInstance().getString('bbb.layout.combo.customName')}"
+					enter="addButton_clickHandler()" />
+	  <mx:Button id="addButton" height="30" width="100%" click="addButton_clickHandler()" enabled="{textInput.text.length > 0}" styleName="mainActionButton"
+				 label="{ResourceUtil.getInstance().getString('bbb.layout.addButton.label')}" toolTip="{ResourceUtil.getInstance().getString('bbb.layout.addButton.toolTip')}" />
+  </mx:VBox>
+
+  <mx:Button id="closeButton" click="onCancelClicked()" styleName="titleWindowCloseButton"
+		     toolTip="{ResourceUtil.getInstance().getString('bbb.layout.window.close.tooltip')}"
+			 top="15" right="10"
+			 accessibilityName="{ResourceUtil.getInstance().getString('bbb.layout.window.accessibilityName')}" />
+
 </mx:TitleWindow>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/polling/views/PollChoicesModal.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/polling/views/PollChoicesModal.mxml
index 816fc93020d6a6336ae25863ee02e9d24d29510e..7ebd65c0be60d25b577b86f4546f85644171a7b6 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/polling/views/PollChoicesModal.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/polling/views/PollChoicesModal.mxml
@@ -21,15 +21,17 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 <mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009" 
 				xmlns:s="library://ns.adobe.com/flex/spark" 
 				xmlns:mx="library://ns.adobe.com/flex/mx"
+				xmlns:common="org.bigbluebutton.common.*"
 				width="350" layout="vertical"
-				close="onCloseClicked()"
-				show="{focusManager.setFocus(choiceFirst)}" xmlns:common="org.bigbluebutton.common.*">
+				implements="org.bigbluebutton.common.IKeyboardClose"
+				show="focusManager.setFocus(choiceFirst)">
 	<fx:Script>
 		<![CDATA[
 			import com.asfusion.mate.events.Dispatcher;
 			
 			import org.as3commons.lang.ArrayUtils;
 			import org.as3commons.lang.StringUtils;
+			import org.bigbluebutton.common.IKeyboardClose;
 			import org.bigbluebutton.core.PopUpUtil;
 			import org.bigbluebutton.modules.polling.events.StartCustomPollEvent;
 			import org.bigbluebutton.modules.present.ui.views.PresentationWindow;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileDownloadWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileDownloadWindow.mxml
index 4544f32ad88d72bc1dd32e69f68c23477f72b914..8d41b611f7588dfd3135ae0a3916c9b605f55975 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileDownloadWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileDownloadWindow.mxml
@@ -24,9 +24,11 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				xmlns:fx="http://ns.adobe.com/mxml/2009"
 				xmlns:mate="http://mate.asfusion.com/"
 				xmlns:common="org.bigbluebutton.common.*"
+				implements="org.bigbluebutton.common.IKeyboardClose"
 				layout="absolute"
 				width="580"
 				height="410"
+				creationComplete="creationCompleteHandler(event)"
 				close="onCancelClicked()"
 				initialize="initData();" >
 
@@ -37,6 +39,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 	<fx:Script>
 		<![CDATA[
 			import mx.collections.ArrayCollection;
+			import mx.events.FlexEvent;
 			
 			import org.bigbluebutton.modules.present.events.DownloadEvent;
 			import org.bigbluebutton.modules.present.model.PresentationModel;
@@ -44,6 +47,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 
 			[Bindable]
 			private var downloadablePresentations:ArrayCollection;
+			
+			protected function creationCompleteHandler(event:FlexEvent):void {
+				closeButton.setFocus()
+			}
 
 			override public function move(x:Number, y:Number):void {
 				return;
@@ -56,6 +63,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			private function onCancelClicked():void {
 				globalDispatch.dispatchEvent(new DownloadEvent(DownloadEvent.CLOSE_DOWNLOAD_WINDOW));
 			}
+			
 		]]>
 
 	</fx:Script>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesNameWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesNameWindow.mxml
index a116d2546140e111a6b5271c8e517f4b8cbea842..432a3b1bb33a7b921464a4c4c12f7d412e8bb76a 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesNameWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesNameWindow.mxml
@@ -23,21 +23,22 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 <mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx"
 				xmlns:fx="http://ns.adobe.com/mxml/2009"
 				xmlns:mate="http://mate.asfusion.com/"
+				implements="org.bigbluebutton.common.IKeyboardClose"
 				verticalScrollPolicy="off"
 				horizontalScrollPolicy="off"
 				horizontalAlign="center"
-				close="onCancelClicked()"
 				layout="absolute"
 				creationComplete="onCreationComplete()"
 				keyUp="keyUpHandler(event)"
-				width="240" xmlns:common="org.bigbluebutton.common.*">
+				width="280" xmlns:common="org.bigbluebutton.common.*">
 
 	<fx:Script>
 		<![CDATA[
 			import com.asfusion.mate.events.Dispatcher;
-
+			
 			import mx.managers.PopUpManager;
-
+			
+			import org.bigbluebutton.common.IKeyboardClose;
 			import org.bigbluebutton.core.model.LiveMeeting;
 			import org.bigbluebutton.modules.sharednotes.events.SharedNotesEvent;
 			import org.bigbluebutton.util.i18n.ResourceUtil;
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 0e5c1ac1653df60c5bf692417b8c2654bb8ce167..6de89f5dfa3b487e31892350cefd8567866a33f4 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/views/SharedNotesWindow.mxml
@@ -50,11 +50,9 @@
 			import mx.controls.Alert;
 			import mx.controls.Menu;
 			import mx.core.FlexGlobals;
-			import mx.core.IFlexDisplayObject;
 			import mx.events.CloseEvent;
 			import mx.events.FlexEvent;
 			import mx.events.MenuEvent;
-			import mx.managers.PopUpManager;
 			
 			import flashx.textLayout.formats.Direction;
 			
@@ -66,6 +64,7 @@
 			import org.bigbluebutton.common.Role;
 			import org.bigbluebutton.common.events.LocaleChangeEvent;
 			import org.bigbluebutton.core.Options;
+			import org.bigbluebutton.core.PopUpUtil;
 			import org.bigbluebutton.core.UsersUtil;
 			import org.bigbluebutton.core.model.LiveMeeting;
 			import org.bigbluebutton.main.events.ShortcutEvent;
@@ -479,8 +478,7 @@
 			}
 
 			protected function newNoteHandler():void {
-				var noteNameWindow:IFlexDisplayObject = PopUpManager.createPopUp(FlexGlobals.topLevelApplication as DisplayObject, SharedNotesNameWindow, true);
-				PopUpManager.centerPopUp(noteNameWindow);
+				PopUpUtil.createModalPopUp(FlexGlobals.topLevelApplication as DisplayObject, SharedNotesNameWindow, true);
 			}
 
 			protected function btnUndo_clickHandler(event:MouseEvent = null):void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml
index 0062d520004bf22948b8c1aee5c5377920bab3a4..e3c45162dfada46ff5a4941ea3bb88d1fec161e4 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml
@@ -25,8 +25,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
                 xmlns:mx="library://ns.adobe.com/flex/mx"
                 xmlns:mate="http://mate.asfusion.com/"
                 xmlns:common="org.bigbluebutton.common.*"
+				implements="org.bigbluebutton.common.IKeyboardClose"
+				show="this.setFocus()"
                 width="630"
-                close="onCloseClicked()"
                 visible="false"
                 showCloseButton="false">
     
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/JoinBreakoutRoomWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/JoinBreakoutRoomWindow.mxml
index 8cbb7d6d08bf5332f1d525cf98f4221c71500e61..1e68d2f5e3bd5beec31b22a6ca4dc0f9168200ed 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/JoinBreakoutRoomWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/JoinBreakoutRoomWindow.mxml
@@ -23,6 +23,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 <mx:TitleWindow xmlns:fx="http://ns.adobe.com/mxml/2009"
 				xmlns:s="library://ns.adobe.com/flex/spark"
 				xmlns:mx="library://ns.adobe.com/flex/mx"
+				implements="org.bigbluebutton.common.IKeyboardClose"
+				show="this.setFocus()"
 				close="onCloseClick()"
 				layout="absolute"
 				width="600" xmlns:common="org.bigbluebutton.common.*">
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml
index 5dc475203f55b2e4389def224672708225658f5c..1992f62e615156a607c9cc234f34714f0e71cea9 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml
@@ -375,7 +375,7 @@ $Id: $
       }
       
       private function openEmojiStatusMenu():void {
-        var moodMenu:MoodMenu = PopUpUtil.createNonModelPopUp(DisplayObject(FlexGlobals.topLevelApplication), MoodMenu, false) as MoodMenu;
+        var moodMenu:MoodMenu = PopUpUtil.createNonModalPopUp(DisplayObject(FlexGlobals.topLevelApplication), MoodMenu, false) as MoodMenu;
         moodMenu.btn = emojiStatusBtn;
         moodMenu.show();
       }