diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/LockSettingsUtil.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/LockSettingsUtil.scala
new file mode 100755
index 0000000000000000000000000000000000000000..47cef4d65df458beb8c82ede53719db98b109e0d
--- /dev/null
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/LockSettingsUtil.scala
@@ -0,0 +1,47 @@
+package org.bigbluebutton
+
+import org.bigbluebutton.common2.msgs.{ BbbCommonEnvCoreMsg, BbbCoreEnvelope, BbbCoreHeaderWithMeetingId, MessageTypes, MuteUserInVoiceConfSysMsg, MuteUserInVoiceConfSysMsgBody, Routing }
+import org.bigbluebutton.core.models.{ Roles, Users2x, VoiceUserState, VoiceUsers }
+import org.bigbluebutton.core.running.{ LiveMeeting, OutMsgRouter }
+import org.bigbluebutton.core2.{ MeetingStatus2x }
+
+object LockSettingsUtil {
+
+  def applyMutingOfUsers(mute: Boolean, liveMeeting: LiveMeeting, outGW: OutMsgRouter): Unit = {
+
+    def muteUserInVoiceConf(vu: VoiceUserState, mute: Boolean): Unit = {
+      val routing = Routing.addMsgToClientRouting(MessageTypes.BROADCAST_TO_MEETING, liveMeeting.props.meetingProp.intId, vu.intId)
+      val envelope = BbbCoreEnvelope(MuteUserInVoiceConfSysMsg.NAME, routing)
+      val header = BbbCoreHeaderWithMeetingId(MuteUserInVoiceConfSysMsg.NAME, liveMeeting.props.meetingProp.intId)
+
+      val body = MuteUserInVoiceConfSysMsgBody(liveMeeting.props.voiceProp.voiceConf, vu.voiceUserId, mute)
+      val event = MuteUserInVoiceConfSysMsg(header, body)
+      val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
+
+      outGW.send(msgEvent)
+    }
+
+    VoiceUsers.findAll(liveMeeting.voiceUsers) foreach { vu =>
+      Users2x.findWithIntId(liveMeeting.users2x, vu.intId).foreach { user =>
+        if (user.role == Roles.VIEWER_ROLE) {
+          if (mute) {
+            // Mute everyone. We also mute listenOnly users as sledgehammer to make sure
+            // audio can't be transmitted. (ralam dec 6, 2019)
+            muteUserInVoiceConf(vu, mute)
+          } else {
+            // Only unmute viewers and non-listenOnly users.
+            if (!vu.listenOnly) {
+              muteUserInVoiceConf(vu, mute)
+            }
+          }
+        }
+      }
+    }
+  }
+
+  def enforceLockSettingsForVoice(liveMeeting: LiveMeeting, outGW: OutMsgRouter): Unit = {
+    val permissions = MeetingStatus2x.getPermissions(liveMeeting.status)
+    applyMutingOfUsers(permissions.disableMic, liveMeeting, outGW)
+
+  }
+}
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/ChangeLockSettingsInMeetingCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/ChangeLockSettingsInMeetingCmdMsgHdlr.scala
index db446b8bf6e399c3f9c36334cbd31387b66d34db..df4a40a6e749ad2ec23ab888683e26449977fbf6 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/ChangeLockSettingsInMeetingCmdMsgHdlr.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/ChangeLockSettingsInMeetingCmdMsgHdlr.scala
@@ -1,5 +1,6 @@
 package org.bigbluebutton.core.apps.users
 
+import org.bigbluebutton.LockSettingsUtil
 import org.bigbluebutton.common2.msgs._
 import org.bigbluebutton.core.apps.{ PermissionCheck, RightsManagementTrait }
 import org.bigbluebutton.core.running.OutMsgRouter
@@ -36,6 +37,8 @@ trait ChangeLockSettingsInMeetingCmdMsgHdlr extends RightsManagementTrait {
 
         MeetingStatus2x.setPermissions(liveMeeting.status, settings)
 
+        LockSettingsUtil.enforceLockSettingsForVoice(liveMeeting, outGW)
+
         val routing = Routing.addMsgToClientRouting(
           MessageTypes.BROADCAST_TO_MEETING,
           props.meetingProp.intId,