diff --git a/bigbluebutton-client/locale/en_US/bbbResources.properties b/bigbluebutton-client/locale/en_US/bbbResources.properties
index 1af4cb0dbcf15e0486820814189151dcbee8f418..49b12c06c9182920b02db801181b848aaa17715c 100755
--- a/bigbluebutton-client/locale/en_US/bbbResources.properties
+++ b/bigbluebutton-client/locale/en_US/bbbResources.properties
@@ -57,6 +57,7 @@ bbb.participants.maximizeRestoreBtn.accessibilityName = Maximize the Participant
 bbb.participants.settings.buttonTooltip = Settings
 bbb.participants.settings.audioSettings = Audio Settings
 bbb.participants.settings.muteAll = Mute All
+bbb.participants.settings.muteAllExcept = Mute All Except Presenter
 bbb.participants.settings.unmuteAll = Unmute All
 bbb.participants.settings.lowerAllHands = Lower All Hands
 bbb.participants.pushToTalk.toolTip = Click to talk
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as
index 40250e5efbd0ddd212dec106fa76ed00c2369782..a45e5a47d779661d725876c7344261203193610e 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as
@@ -84,7 +84,7 @@ package org.bigbluebutton.main.model.users
 		[Bindable] public var room:String = "";
 		[Bindable] public var authToken:String = "";
 		[Bindable] public var selected:Boolean = false;
-		[Bindable] public var voiceUserid:Number;
+		[Bindable] public var voiceUserid:Number = 0;
 		
 		private var _voiceMuted:Boolean = false;
 		[Bindable]
@@ -219,7 +219,7 @@ package org.bigbluebutton.main.model.users
 			n.authToken = user.authToken;
 			n.me = user.me;
 			n.userID = user.userID;
-      n.externUserID = user.externUserID;
+			n.externUserID = user.externUserID;
 			n.name = user.name;
 			n.hasStream = user.hasStream;
 			n.streamName = user.streamName;
@@ -227,6 +227,15 @@ package org.bigbluebutton.main.model.users
 			n.raiseHand = user.raiseHand;
 			n.role = user.role;	
 			n.room = user.room;
+			n.customdata = user.customdata;
+			n.media = user.media;
+			n.phoneUser = user.phoneUser;
+			n.talking = user.talking;
+			n.userStatus = user.userStatus;
+			n.voiceJoined = user.voiceJoined;
+			n.voiceLocked = user.voiceLocked;
+			n.voiceMuted = user.voiceMuted;
+			n.voiceUserid = user.voiceUserid;
 			
 			return n;		
 		}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as
index 6ebfca5cb4d44e8fd6e97a215a639a2ee9940d38..7294f13c145471023e511caec1240ace7abe99bf 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as
@@ -53,11 +53,11 @@ package org.bigbluebutton.main.model.users {
 		
 		// Custom sort function for the users ArrayCollection. Need to put dial-in users at the very bottom.
 		private function sortFunction(a:Object, b:Object, array:Array = null):int {
-			if (a.presenter)
+			/*if (a.presenter)
 				return -1;
 			else if (b.presenter)
-				return 1;
-			else if (a.role == Role.MODERATOR && b.role == Role.MODERATOR) {
+				return 1;*/
+			if (a.role == Role.MODERATOR && b.role == Role.MODERATOR) {
 				// do nothing go to the end and check names
 			} else if (a.role == Role.MODERATOR)
 				return -1;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as
index a41eaac43e2eded57a9a511f72c7b26e16a95263..a9449e32ec57a3d4545d30b9492e8adb154bde25 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as
@@ -93,7 +93,7 @@ package org.bigbluebutton.modules.chat.services
         msg.chatType = ChatConstants.PUBLIC_CHAT;
         msg.fromUserID = SPACE;
         msg.fromUsername = SPACE;
-        msg.fromColor = "0";
+        msg.fromColor = "86187";
         msg.fromLang = "en";
         msg.fromTime = new Date().getTime();
         msg.fromTimezoneOffset = new Date().getTimezoneOffset();
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 4e588d30beb9840570c81acb636791583b494012..40c359840cb2199312f0a02b0d04334a16830cfd 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml
@@ -58,7 +58,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
   	<mate:Listener type="{ShortcutEvent.FOCUS_CHAT_INPUT}" method="focusChatInput" />
   	<mate:Listener type="{UserLeftEvent.LEFT}" method="handleUserLeftEvent"/>
   	<mate:Listener type="{ShortcutEvent.FOCUS_CHAT_BOX}" method="focusChatBox" />
-  	<mate:Listener type="{ShortcutEvent.CHANGE_FONT_COLOUR}" method="focusColourPicker" />
+  	<!--mate:Listener type="{ShortcutEvent.CHANGE_FONT_COLOUR}" method="focusColourPicker" /-->
   	<mate:Listener type="{ShortcutEvent.SEND_MESSAGE}" method="remoteSendMessage" />
   	
   	<mate:Listener type="{ShortcutEvent.CHAT_DEBUG}" method="chatDebugInfo" />
@@ -182,9 +182,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				focusManager.setFocus(chatMessagesList);
 			}
 			
-			private function focusColourPicker(e:ShortcutEvent):void{
+			/*private function focusColourPicker(e:ShortcutEvent):void{
 				focusManager.setFocus(cmpColorPicker);
-			}
+			}*/
 			
 			private function remoteSendMessage(e:ShortcutEvent):void{
 				sendMessages();
@@ -522,9 +522,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
         cm.chatType = ChatConstants.PUBLIC_CHAT;
         cm.fromUserID = UsersUtil.getMyUserID();
         cm.fromUsername = UsersUtil.getMyUsername();
-        cm.fromColor = cmpColorPicker.selectedColor.toString();
+        cm.fromColor = "0" //default the message colour to black now cmpColorPicker.selectedColor.toString();
         cm.fromLang = ChatUtil.getUserLang();
-
         // Get the current UTC time and the timezone for this sender.
         // The receiver will have to convert this to local time.
         var now:Date = new Date();
@@ -543,7 +542,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
         cm.chatType = ChatConstants.PRIVATE_CHAT;
         cm.fromUserID = UsersUtil.getMyUserID();
         cm.fromUsername = UsersUtil.getMyUsername();
-        cm.fromColor = cmpColorPicker.selectedColor.toString();
+        cm.fromColor = "0" //default the message colour to black now cmpColorPicker.selectedColor.toString();
         cm.fromLang = ChatUtil.getUserLang();
         
         // Get the current UTC time and the timezone for this sender.
@@ -598,7 +597,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
   
   <mx:HBox id="chatCtrlBar" width="100%" height="50" styleName="chatControlBarStyle" verticalScrollPolicy="off"
            paddingLeft="5" paddingRight="5">		
-    <mx:TextArea id="txtMsgArea" width="100%"  color="{cmpColorPicker.selectedColor}" 
+    <mx:TextArea id="txtMsgArea" width="100%"
                  styleName="chatControlBarTextMsgStyle" 
                  toolTip="{ResourceUtil.getInstance().getString('bbb.accessibility.chat.chatwindow.input')}"
                  tabIndex="{baseIndex+1}"/>
@@ -609,10 +608,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
                  click="sendMessages()"
                  tabIndex="{baseIndex+2}"
                  accessibilityName="{ResourceUtil.getInstance().getString('bbb.chat.sendBtn.name')}"/>  
-      <mx:ColorPicker id="cmpColorPicker" showTextField="false" 
+      <!--mx:ColorPicker id="cmpColorPicker" showTextField="false" 
                  toolTip="{ResourceUtil.getInstance().getString('bbb.chat.cmpColorPicker.toolTip')}" 
                  selectedColor="0x000000" dataProvider="{colorPickerColours}" swatchPanelStyleName="chatColorPickerStyle"
-                 tabIndex="{baseIndex+3}"/>
+                 tabIndex="{baseIndex+3}"/-->
     </mx:VBox>
   </mx:HBox>	
 </mx:VBox>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ListenersSOService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ListenersSOService.as
index e437ec53ba8d1180dfad6ce50333cc5e9260f7c8..8be57b7bfe9d5f0a959a42325fd5f94b1457964c 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ListenersSOService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ListenersSOService.as
@@ -255,6 +255,28 @@ package org.bigbluebutton.modules.participants.business
 			}
 		}
 		
+		public function lockMuteUser(userid:Number, lock:Boolean):void {
+			var nc:NetConnection = _module.connection;
+			nc.call(
+				"voice.lockMuteUser",// Remote function name
+				new Responder(
+					// participants - On successful result
+					function(result:Object):void { 
+						LogUtil.debug("Successfully lock mute/unmute: " + userid); 	
+					},	
+					// status - On error occurred
+					function(status:Object):void { 
+						LogUtil.error("Error occurred:"); 
+						for (var x:Object in status) { 
+							LogUtil.error(x + " : " + status[x]); 
+						} 
+					}
+				),//new Responder
+				userid,
+				lock
+			); //_netConnection.call		
+		}
+		
 		public function muteUnmuteUser(userid:Number, mute:Boolean):void {
 			var nc:NetConnection = _module.connection;
 			nc.call(
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ParticipantsProxy.as b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ParticipantsProxy.as
index 76eb5ce82301c5f8c1f8446e2fc5576aa21fe9c2..d456bdc95bf408a8015202b59883a7e85879b44b 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ParticipantsProxy.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/business/ParticipantsProxy.as
@@ -22,6 +22,7 @@ package org.bigbluebutton.modules.participants.business
 	
 	import mx.collections.ArrayCollection;
 	
+	import org.bigbluebutton.common.Role;
 	import org.bigbluebutton.core.UsersUtil;
 	import org.bigbluebutton.core.managers.UserManager;
 	import org.bigbluebutton.main.model.users.BBBUser;
@@ -88,6 +89,20 @@ package org.bigbluebutton.modules.participants.business
 		public function unmuteAllUsers(command:VoiceConfEvent):void{
 			_listenersService.muteAllUsers(false);
 		}
+		
+		public function muteAlmostAllUsers(command:VoiceConfEvent):void
+		{	
+			//find the presenter and lock them
+			var pres:BBBUser = UserManager.getInstance().getConference().getPresenter();
+			if (pres)
+				_listenersService.lockMuteUser(int(pres.voiceUserid), true);
+			
+			_listenersService.muteAllUsers(true);
+			
+			//unlock the presenter
+			if (pres)
+				_listenersService.lockMuteUser(int(pres.voiceUserid), false);
+		}
 
     public function kickUser(event:KickUserEvent):void {
       var user:BBBUser = UsersUtil.getUser(event.userid);
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/events/VoiceConfEvent.as b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/events/VoiceConfEvent.as
index 415f418ad00b18b79eeda55e0edbab56304f0020..9b822b0a7ff359d55973f61d726b999587003344 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/events/VoiceConfEvent.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/events/VoiceConfEvent.as
@@ -25,6 +25,8 @@ package org.bigbluebutton.modules.participants.events
 		public static const MUTE_ALL:String = "VOICECONF_MUTE_ALL";
 		public static const UNMUTE_ALL:String = "VOICECONF_UNMUTE_ALL";
 		
+		public static const MUTE_ALMOST_ALL:String = "VOICECONF_MUTE_ALMOST_ALL";
+		
 		public static const MUTE_USER:String = "VOICECONF_MUTE_USER";
 		public static const UNMUTE_USER:String = "VOICECONF_UNMUTE_USER";
 		
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/maps/ParticipantsEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/maps/ParticipantsEventMap.mxml
index 09ec1c97936a31de2c32f0ab5eadb76daee45dcf..c87ef68d63d3d2c6e199b6209ce18fe580cf4f17 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/maps/ParticipantsEventMap.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/maps/ParticipantsEventMap.mxml
@@ -70,4 +70,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		<MethodInvoker generator="{ParticipantsProxy}" method="unmuteAllUsers" arguments="{event}" />
 	</EventHandlers>
 	
+	<EventHandlers type="{VoiceConfEvent.MUTE_ALMOST_ALL}" >
+		<MethodInvoker generator="{ParticipantsProxy}" method="muteAlmostAllUsers" arguments="{event}" />
+	</EventHandlers>
+	
 </EventMap>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/MediaItemRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/MediaItemRenderer.mxml
index 4c8de9dae46c4a076a0e2c666fc7d8eb01c1b2d9..5793ef130efc69976b87968e7760df8f98ba45b1 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/MediaItemRenderer.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/MediaItemRenderer.mxml
@@ -104,7 +104,7 @@
 			}
 		]]>
 	</mx:Script>
-	
+	<mx:Image id="showLock" visible="{data.voiceLocked}" source="{images.lock_close}" width="20" height="20" />
 	<mx:Image id="talkingIcon" visible="{data.talking}" source="{images.sound_new}" width="20" height="20" 
 				toolTip="{ResourceUtil.getInstance().getString('bbb.participants.participantsGrid.mediaItemRenderer.talking')}" />
 	<mx:Button id="webcamBtn" visible="{data.hasStream}" click="viewCamera()" icon="{images.webcam_new}"
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/ParticipantsWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/ParticipantsWindow.mxml
index 37f2ec430deb3c79923125f1d5efba505e4e5116..44186c19ef2980bf41ee9cc544fd8dfc735f1287 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/ParticipantsWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/participants/views/ParticipantsWindow.mxml
@@ -175,12 +175,13 @@
 				var myMenuData:Array = [{label: ResourceUtil.getInstance().getString('bbb.participants.settings.audioSettings'), icon: images.audio}];
 				
 				if (amIModerator) {
-					myMenuData[1] = {type: "separator"};
-					if (!roomMuted)
-						myMenuData[2] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.muteAll'), icon: images.audio_muted};
-					else
-						myMenuData[2] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.unmuteAll'), icon: images.audio};
-					myMenuData[3] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.lowerAllHands'), icon: images.hand_new};
+					myMenuData[1] = {type: "separator"};
+					myMenuData[2] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.lowerAllHands'), icon: images.hand_new};
+					if (!roomMuted) {
+						myMenuData[3] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.muteAll'), icon: images.audio_muted};
+						myMenuData[4] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.muteAllExcept'), icon: images.audio_muted};
+					} else
+						myMenuData[3] = {label: ResourceUtil.getInstance().getString('bbb.participants.settings.unmuteAll'), icon: images.audio};
 				}
 				
 				// make sure the previous menu is closed before opening a new one
@@ -203,11 +204,13 @@
 					showAudioSettings();
 					break;
 				case 2:
-					muteAll();
+					lowerHands();
 					break;
 				case 3:
-					lowerHands();
+					muteAll();
 					break;
+				case 4:
+					muteAlmostAll();
 				}
 			}
 			
@@ -233,6 +236,16 @@
 				}
 			}
 			
+			private function muteAlmostAll():void {
+				if (amIModerator) {
+					if (!roomMuted) {
+						var muteCommand:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_ALMOST_ALL);
+						dispatchEvent(muteCommand);
+						roomMuted = true;
+					}
+				}
+			}
+			
 			private function lowerHands():void {
 				for (var i:int = 0; i < participants.length; i++) {
 					var p:BBBUser = participants.getItemAt(i) as BBBUser;
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 f6d7f4d881c1680263db2811890ddf0c6af3b4f6..000622641a0a178699e6a3b20d5bca569ea77b1d 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml
@@ -271,15 +271,14 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
       <mx:Spacer height="5"/>
       <mx:Label id="fileLbl" text="{ResourceUtil.getInstance().getString('bbb.fileupload.fileLbl')}" styleName="presentationUploadChooseFileLabelStyle"/>
       <mx:Spacer width="100%"/>
-      <mx:Button label="{ResourceUtil.getInstance().getString('bbb.fileupload.selectBtn.label')}" id="selectBtn" 
-                 toolTip="{ResourceUtil.getInstance().getString('bbb.fileupload.selectBtn.toolTip')}" 
-                 click="selectFile()" styleName="presentationUploadChooseFileButtonStyle"/>
-      <mx:Spacer width="5"/>
     </mx:HBox>
     <mx:Spacer height="5"/>
     <mx:HBox width="100%"> 
       <mx:Spacer width="5"/>
       <mx:TextInput id="fileTxtInput" width="328" editable="false"/>
+		<mx:Button label="{ResourceUtil.getInstance().getString('bbb.fileupload.selectBtn.label')}" id="selectBtn" 
+				   toolTip="{ResourceUtil.getInstance().getString('bbb.fileupload.selectBtn.toolTip')}" 
+				   click="selectFile()" styleName="presentationUploadChooseFileButtonStyle"/>
       <mx:Button id="uploadBtn" label="{ResourceUtil.getInstance().getString('bbb.fileupload.uploadBtn')}" 
                  toolTip="{ResourceUtil.getInstance().getString('bbb.fileupload.uploadBtn.toolTip')}"  click="startUpload()"
                  enabled="false" icon="{bulletGoIcon}"/>