diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala
index 2c6673797b8c578b457ad98c95702d3cbab817e3..ccbe0920841fad270ee0a8c0da704b6ee5d8c90d 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/MuteUserCmdMsgHdlr.scala
@@ -16,10 +16,12 @@ trait MuteUserCmdMsgHdlr {
     for {
       u <- VoiceUsers.findWithIntId(liveMeeting.voiceUsers, msg.body.userId)
     } yield {
-      log.info("Send mute user request. meetingId=" + props.meetingProp.intId + " userId=" + u.intId + " user=" + u)
-      val event = MsgBuilder.buildMuteUserInVoiceConfSysMsg(props.meetingProp.intId, props.voiceProp.voiceConf,
-        u.voiceUserId, !u.muted)
-      outGW.send(event)
+      if (u.muted != msg.body.mute) {
+        log.info("Send mute user request. meetingId=" + props.meetingProp.intId + " userId=" + u.intId + " user=" + u)
+        val event = MsgBuilder.buildMuteUserInVoiceConfSysMsg(props.meetingProp.intId, props.voiceProp.voiceConf,
+          u.voiceUserId, msg.body.mute)
+        outGW.send(event)
+      }
     }
   }
 }
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteAllExceptPresentersCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteAllExceptPresentersCmdMsgHdlr.scala
index ac5259e45c2a86627941de52cb0524a0f4f4f0fe..d4da845f8730776208cffdefa637d5e8b1e0de07 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteAllExceptPresentersCmdMsgHdlr.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteAllExceptPresentersCmdMsgHdlr.scala
@@ -11,28 +11,29 @@ trait MuteAllExceptPresentersCmdMsgHdlr {
   val outGW: OutMsgRouter
 
   def handleMuteAllExceptPresentersCmdMsg(msg: MuteAllExceptPresentersCmdMsg) {
-    if (MeetingStatus2x.isMeetingMuted(liveMeeting.status)) {
-      MeetingStatus2x.unmuteMeeting(liveMeeting.status)
-    } else {
-      MeetingStatus2x.muteMeeting(liveMeeting.status)
-    }
+    if (msg.body.mute != MeetingStatus2x.isMeetingMuted(liveMeeting.status)) {
+      if (msg.body.mute) {
+        MeetingStatus2x.muteMeeting(liveMeeting.status)
+      } else {
+        MeetingStatus2x.unmuteMeeting(liveMeeting.status)
+      }
 
-    val muted = MeetingStatus2x.isMeetingMuted(liveMeeting.status)
-    val event = build(props.meetingProp.intId, msg.body.mutedBy, muted, msg.body.mutedBy)
+      val muted = MeetingStatus2x.isMeetingMuted(liveMeeting.status)
+      val event = build(props.meetingProp.intId, msg.body.mutedBy, muted, msg.body.mutedBy)
 
-    outGW.send(event)
+      outGW.send(event)
 
-    // I think the correct flow would be to find those who are presenters and exclude them
-    // from the list of voice users. The remaining, mute.
-    VoiceUsers.findAll(liveMeeting.voiceUsers) foreach { vu =>
-      if (!vu.listenOnly) {
-        Users2x.findWithIntId(liveMeeting.users2x, vu.intId) match {
-          case Some(u) => if (!u.presenter) muteUserInVoiceConf(vu, muted)
-          case None    => muteUserInVoiceConf(vu, muted)
+      // I think the correct flow would be to find those who are presenters and exclude them
+      // from the list of voice users. The remaining, mute.
+      VoiceUsers.findAll(liveMeeting.voiceUsers) foreach { vu =>
+        if (!vu.listenOnly) {
+          Users2x.findWithIntId(liveMeeting.users2x, vu.intId) match {
+            case Some(u) => if (!u.presenter) muteUserInVoiceConf(vu, muted)
+            case None    => muteUserInVoiceConf(vu, muted)
+          }
         }
       }
     }
-
   }
 
   def usersWhoAreNotPresenter(): Vector[UserState] = {
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteMeetingCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteMeetingCmdMsgHdlr.scala
index 2329525967d7a86e0e876f50f371b5db6d96ce7b..1390ed84db7af006ed95d88e4ea25aaf5ed46566 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteMeetingCmdMsgHdlr.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/MuteMeetingCmdMsgHdlr.scala
@@ -37,20 +37,22 @@ trait MuteMeetingCmdMsgHdlr {
 
     }
 
-    if (MeetingStatus2x.isMeetingMuted(liveMeeting.status)) {
-      MeetingStatus2x.unmuteMeeting(liveMeeting.status)
-    } else {
-      MeetingStatus2x.muteMeeting(liveMeeting.status)
-    }
+    if (msg.body.mute != MeetingStatus2x.isMeetingMuted(liveMeeting.status)) {
+      if (msg.body.mute) {
+        MeetingStatus2x.muteMeeting(liveMeeting.status)
+      } else {
+        MeetingStatus2x.unmuteMeeting(liveMeeting.status)
+      }
 
-    val muted = MeetingStatus2x.isMeetingMuted(liveMeeting.status)
-    val meetingMutedEvent = build(props.meetingProp.intId, msg.body.mutedBy, muted, msg.body.mutedBy)
+      val muted = MeetingStatus2x.isMeetingMuted(liveMeeting.status)
+      val meetingMutedEvent = build(props.meetingProp.intId, msg.body.mutedBy, muted, msg.body.mutedBy)
 
-    outGW.send(meetingMutedEvent)
+      outGW.send(meetingMutedEvent)
 
-    VoiceUsers.findAll(liveMeeting.voiceUsers) foreach { vu =>
-      if (!vu.listenOnly) {
-        muteUserInVoiceConf(vu, muted)
+      VoiceUsers.findAll(liveMeeting.voiceUsers) foreach { vu =>
+        if (!vu.listenOnly) {
+          muteUserInVoiceConf(vu, muted)
+        }
       }
     }
   }
diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/VoiceConfMsgs.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/VoiceConfMsgs.scala
index d2de5ec711f8800e59dcc3ecd619b1f8ac6ae2ae..cdd11f2aa0105ccaf82a25fb09a432f06c0d42ec 100755
--- a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/VoiceConfMsgs.scala
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/VoiceConfMsgs.scala
@@ -112,7 +112,7 @@ case class EjectUserFromVoiceCmdMsgBody(userId: String, ejectedBy: String)
 object MuteAllExceptPresentersCmdMsg { val NAME = "MuteAllExceptPresentersCmdMsg"}
 case class MuteAllExceptPresentersCmdMsg(header: BbbClientMsgHeader,
                           body: MuteAllExceptPresentersCmdMsgBody) extends StandardMsg
-case class MuteAllExceptPresentersCmdMsgBody(mutedBy: String)
+case class MuteAllExceptPresentersCmdMsgBody(mutedBy: String, mute: Boolean)
 
 /**
   * Sent by client to mute all users except presenters in the voice conference.
@@ -133,7 +133,7 @@ case class IsMeetingMutedRespMsgBody(muted: Boolean)
 object MuteUserCmdMsg { val NAME = "MuteUserCmdMsg"}
 case class MuteUserCmdMsg(header: BbbClientMsgHeader,
                                     body: MuteUserCmdMsgBody) extends StandardMsg
-case class MuteUserCmdMsgBody(userId: String, mutedBy: String)
+case class MuteUserCmdMsgBody(userId: String, mutedBy: String, mute: Boolean)
 
 /**
   * Sent to FS to get the users in the voice conference.
@@ -165,7 +165,7 @@ case class GetUsersInVoiceConfSysMsgBody(voiceConf: String)
 object MuteMeetingCmdMsg { val NAME = "MuteMeetingCmdMsg" }
 case class MuteMeetingCmdMsg(header: BbbClientMsgHeader,
                                   body: MuteMeetingCmdMsgBody) extends StandardMsg
-case class MuteMeetingCmdMsgBody(mutedBy: String)
+case class MuteMeetingCmdMsgBody(mutedBy: String, mute: Boolean)
 
 /**
   * Send to all clients that meeting is muted.
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as
index 55191ff04ce17a9de8a0f001d598f4d5b2c76050..ca4de961b3082292063a24e82c17961f76d77195 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as
@@ -328,7 +328,7 @@ package org.bigbluebutton.modules.users.services
       var message:Object = {
         header: {name: "MuteMeetingCmdMsg", meetingId: UsersUtil.getInternalMeetingID(), 
           userId: UsersUtil.getMyUserID()},
-        body: {mutedBy: UsersUtil.getMyUserID()}
+        body: {mutedBy: UsersUtil.getMyUserID(), mute: mute}
       };
       
       var _nc:ConnectionManager = BBB.initConnectionManager();
@@ -349,7 +349,7 @@ package org.bigbluebutton.modules.users.services
       var message:Object = {
         header: {name: "MuteAllExceptPresentersCmdMsg", meetingId: UsersUtil.getInternalMeetingID(), 
           userId: UsersUtil.getMyUserID()},
-        body: {mutedBy: UsersUtil.getMyUserID()}
+        body: {mutedBy: UsersUtil.getMyUserID(), mute: mute}
       };
 
       var _nc:ConnectionManager = BBB.initConnectionManager();
@@ -370,7 +370,7 @@ package org.bigbluebutton.modules.users.services
       var message:Object = {
         header: {name: "MuteUserCmdMsg", meetingId: UsersUtil.getInternalMeetingID(), 
           userId: UsersUtil.getMyUserID()},
-        body: {userId: userid, mutedBy: UsersUtil.getMyUserID()}
+        body: {userId: userid, mutedBy: UsersUtil.getMyUserID(), mute: mute}
       };
 
       var _nc:ConnectionManager = BBB.initConnectionManager();