diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/SetPresenterInPodReqMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/SetPresenterInPodReqMsgHdlr.scala
index 9d4b54930d7747300bacc4108cb2f4edd0a5aeeb..0e3b63ee45b296945d419ff09b32aa8b70072f16 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/SetPresenterInPodReqMsgHdlr.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/SetPresenterInPodReqMsgHdlr.scala
@@ -17,7 +17,7 @@ trait SetPresenterInPodReqMsgHdlr {
 
     if (applyPermissionCheck && !PermissionCheck.isAllowed(PermissionCheck.MOD_LEVEL, PermissionCheck.VIEWER_LEVEL, liveMeeting.users2x, msg.header.userId)) {
       val meetingId = liveMeeting.props.meetingProp.intId
-      val reason = "No permission to set presentation page."
+      val reason = "No permission to set presenter in presentation."
       PermissionCheck.ejectUserForFailedPermission(meetingId, msg.header.userId, reason, bus.outGW)
       state
     } else {
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/AddUserToPresenterGroupCmdMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/AddUserToPresenterGroupCmdMsgHdlr.scala
index 8d664ebc520bd1e3b130b6b2034a7cf12e885939..c73a32f7f251c4b8bc59ff7a513b496ed6354e4c 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/AddUserToPresenterGroupCmdMsgHdlr.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/AddUserToPresenterGroupCmdMsgHdlr.scala
@@ -13,17 +13,6 @@ trait AddUserToPresenterGroupCmdMsgHdlr {
 
   def handleAddUserToPresenterGroupCmdMsg(msg: AddUserToPresenterGroupCmdMsg) {
 
-    def broadcastAddUserToPresenterGroup(meetingId: String, userId: String, requesterId: String): Unit = {
-      val routing = Routing.addMsgToClientRouting(MessageTypes.BROADCAST_TO_MEETING, meetingId, userId)
-      val envelope = BbbCoreEnvelope(UserAddedToPresenterGroupEvtMsg.NAME, routing)
-      val header = BbbClientMsgHeader(UserAddedToPresenterGroupEvtMsg.NAME, meetingId, userId)
-      val body = UserAddedToPresenterGroupEvtMsgBody(userId, requesterId)
-      val event = UserAddedToPresenterGroupEvtMsg(header, body)
-      val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
-
-      outGW.send(msgEvent)
-    }
-
     if (applyPermissionCheck && !PermissionCheck.isAllowed(PermissionCheck.MOD_LEVEL, PermissionCheck.VIEWER_LEVEL, liveMeeting.users2x, msg.header.userId)) {
       val meetingId = liveMeeting.props.meetingProp.intId
       val reason = "No permission to add user to presenter group."
@@ -36,8 +25,7 @@ trait AddUserToPresenterGroupCmdMsgHdlr {
         requester <- Users2x.findWithIntId(liveMeeting.users2x, requesterId)
       } yield {
         if (requester.role == Roles.MODERATOR_ROLE) {
-          Users2x.addUserToPresenterGroup(liveMeeting.users2x, userId)
-          broadcastAddUserToPresenterGroup(liveMeeting.props.meetingProp.intId, userId, requesterId)
+          UsersApp.addUserToPresenterGroup(liveMeeting, outGW, userId, requesterId)
         }
       }
     }
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala
index a0f414b3edc317a6111cf6d1ffbd8815691fc9b0..99bf9aebf8800dcb885c8f447a2cb970fa701354 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala
@@ -2,9 +2,35 @@ package org.bigbluebutton.core.apps.users
 
 import akka.actor.ActorContext
 import akka.event.Logging
+import org.bigbluebutton.common2.msgs._
 import org.bigbluebutton.core.bus.InternalEventBus
+import org.bigbluebutton.core.models.{ Roles, Users2x }
 import org.bigbluebutton.core.running.{ LiveMeeting, OutMsgRouter }
 
+object UsersApp {
+  def broadcastAddUserToPresenterGroup(meetingId: String, userId: String, requesterId: String,
+                                       outGW: OutMsgRouter): Unit = {
+    val routing = Routing.addMsgToClientRouting(MessageTypes.BROADCAST_TO_MEETING, meetingId, userId)
+    val envelope = BbbCoreEnvelope(UserAddedToPresenterGroupEvtMsg.NAME, routing)
+    val header = BbbClientMsgHeader(UserAddedToPresenterGroupEvtMsg.NAME, meetingId, userId)
+    val body = UserAddedToPresenterGroupEvtMsgBody(userId, requesterId)
+    val event = UserAddedToPresenterGroupEvtMsg(header, body)
+    val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
+
+    outGW.send(msgEvent)
+  }
+
+  def addUserToPresenterGroup(liveMeeting: LiveMeeting, outGW: OutMsgRouter,
+                              userId: String, requesterId: String): Unit = {
+    Users2x.addUserToPresenterGroup(liveMeeting.users2x, userId)
+    UsersApp.broadcastAddUserToPresenterGroup(
+      liveMeeting.props.meetingProp.intId,
+      userId, requesterId, outGW
+    )
+  }
+
+}
+
 class UsersApp(
   val liveMeeting: LiveMeeting,
   val outGW:       OutMsgRouter,
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/HandlerHelpers.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/HandlerHelpers.scala
index 328f529965fc31f96a16ffc3cc6e86218aa5a20c..3a5bf819779b0f1982e8477242dfd4525aa9f591 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/HandlerHelpers.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/HandlerHelpers.scala
@@ -3,6 +3,7 @@ package org.bigbluebutton.core.running
 import org.bigbluebutton.SystemConfiguration
 import org.bigbluebutton.common2.msgs._
 import org.bigbluebutton.core.api.{ BreakoutRoomEndedInternalMsg, DestroyMeetingInternalMsg, EndBreakoutRoomInternalMsg }
+import org.bigbluebutton.core.apps.users.UsersApp
 import org.bigbluebutton.core.bus.{ BigBlueButtonEvent, InternalEventBus }
 import org.bigbluebutton.core.domain.MeetingState2x
 import org.bigbluebutton.core.models._
@@ -54,6 +55,11 @@ trait HandlerHelpers extends SystemConfiguration {
         if (!Users2x.hasPresenter(liveMeeting.users2x)) {
           automaticallyAssignPresenter(outGW, liveMeeting)
         }
+
+        if (newUser.role == Roles.MODERATOR_ROLE) {
+          UsersApp.addUserToPresenterGroup(liveMeeting, outGW, newUser.intId, newUser.intId)
+        }
+
         state.update(state.expiryTracker.setUserHasJoined())
       case None =>
         state