diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationUploadTokenReqMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationUploadTokenReqMsgHdlr.scala
index 4dda9418cd4d6504fcf1967c3667e6189f6ac72b..210554fa0ae388bccb0c7b8186fc8e433f1fbf7e 100644
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationUploadTokenReqMsgHdlr.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationUploadTokenReqMsgHdlr.scala
@@ -1,51 +1,18 @@
 package org.bigbluebutton.core.apps.presentation
 
 import org.bigbluebutton.common2.msgs._
+import org.bigbluebutton.core.apps.presentationpod.PresentationPodsApp
 import org.bigbluebutton.core.bus.MessageBus
+import org.bigbluebutton.core.domain.MeetingState2x
+import org.bigbluebutton.core.models.Users2x
 import org.bigbluebutton.core.running.LiveMeeting
-import org.bigbluebutton.core.util.RandomStringGenerator
 
 trait PresentationUploadTokenReqMsgHdlr {
   this: PresentationApp2x =>
 
-  def handle(
-    msg:         PresentationUploadTokenReqMsg,
-    liveMeeting: LiveMeeting, bus: MessageBus
-  ): Unit = {
+  def handle(msg: PresentationUploadTokenReqMsg, state: MeetingState2x,
+             liveMeeting: LiveMeeting, bus: MessageBus): Unit = {
 
-    // TODO move these in Pods
-    def generateToken(podId: String, userId: String): String = {
-      "LALA-" + RandomStringGenerator.randomAlphanumericString(8) + podId + "-" + userId
-    }
-
-    def userIsAllowedToUploadInPod(podId: String, userId: String): Boolean = {
-      true
-    }
-
-    def handlePresentationUploadTokenReqMsg(msg: PresentationUploadTokenReqMsg): Unit = {
-      log.info("handlePresentationUploadTokenReqMsg" + liveMeeting.props.meetingProp.intId +
-        " userId=" + msg.header.userId + " filename=" + msg.body.filename)
-
-      /* for {
-        // pod <- findPodWithId(msg.body.podId)
-        token <- generateToken(msg.body.podId, msg.header.userId)
-      } yield {
-        broadcastEvent(msg, token)
-      } */
-
-      if (userIsAllowedToUploadInPod(msg.body.podId, msg.header.userId)) {
-        val token = generateToken(msg.body.podId, msg.header.userId)
-        broadcastPresentationUploadTokenPassResp(msg, token)
-        broadcastPresentationUploadTokenSysPubMsg(msg, token)
-      } else {
-        broadcastPresentationUploadTokenFailResp(msg)
-      }
-
-    }
-
-    handlePresentationUploadTokenReqMsg(msg)
-
-    // helpers
     def broadcastPresentationUploadTokenPassResp(msg: PresentationUploadTokenReqMsg, token: String): Unit = {
       // send back to client
       val routing = Routing.addMsgToClientRouting(MessageTypes.DIRECT, liveMeeting.props.meetingProp.intId, msg.header.userId)
@@ -82,6 +49,29 @@ trait PresentationUploadTokenReqMsgHdlr {
 
       bus.outGW.send(msgEvent)
     }
+
+    def userIsAllowedToUploadInPod(podId: String, userId: String): Boolean = {
+      if (Users2x.userIsInPresenterGroup(liveMeeting.users2x, userId)) {
+        for {
+          pod <- PresentationPodsApp.getPresentationPod(state, podId)
+        } yield {
+          return pod.currentPresenter == userId
+        }
+      }
+
+      false
+    }
+
+    log.info("handlePresentationUploadTokenReqMsg" + liveMeeting.props.meetingProp.intId +
+      " userId=" + msg.header.userId + " filename=" + msg.body.filename)
+
+    if (userIsAllowedToUploadInPod(msg.body.podId, msg.header.userId)) {
+      val token = PresentationPodsApp.generateToken(msg.body.podId, msg.header.userId)
+      broadcastPresentationUploadTokenPassResp(msg, token)
+      broadcastPresentationUploadTokenSysPubMsg(msg, token)
+    } else {
+      broadcastPresentationUploadTokenFailResp(msg)
+    }
   }
 
 }
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationPodsApp.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationPodsApp.scala
index 309de533df5c8b4c2f0b6d25cd97d97c0a26950d..868e8c1e4d5be697c5b36098ff2628ff7fd43bf7 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationPodsApp.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/apps/presentationpod/PresentationPodsApp.scala
@@ -3,6 +3,7 @@ package org.bigbluebutton.core.apps.presentationpod
 import org.bigbluebutton.common2.domain._
 import org.bigbluebutton.core.domain._
 import org.bigbluebutton.core.models._
+import org.bigbluebutton.core.util.RandomStringGenerator
 
 object PresentationPodsApp {
 
@@ -75,5 +76,9 @@ object PresentationPodsApp {
       defPod.copy(ownerId = newOwnerId)
     }
   }
+
+  def generateToken(podId: String, userId: String): String = {
+    "LALA-" + RandomStringGenerator.randomAlphanumericString(8) + podId + "-" + userId
+  }
 }
 
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala
index 0c0933acb21b440af35b3601c0ef887eb73aa0de..c39d434ac0e3caa31196240ae13d706d9ef97a2f 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala
@@ -289,7 +289,7 @@ class MeetingActor(
 
       // Presentation
       case m: ResizeAndMovePagePubMsg => presentationApp2x.handle(m, liveMeeting, msgBus)
-      case m: PresentationUploadTokenReqMsg => presentationApp2x.handle(m, liveMeeting, msgBus)
+      case m: PresentationUploadTokenReqMsg => presentationApp2x.handle(m, state, liveMeeting, msgBus) // passing state but not modifying it
       case m: PreuploadedPresentationsSysPubMsg => presentationApp2x.handle(m, liveMeeting, msgBus)
       case m: PresentationConversionUpdateSysPubMsg => presentationApp2x.handle(m, liveMeeting, msgBus)
       case m: PresentationPageCountErrorSysPubMsg => presentationApp2x.handle(m, liveMeeting, msgBus)