diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala
index 44ecc08fdce31b2d8a4b169758d94327c833d63e..9ee83dfc08914b29b50f006028ac9e988e7bbb37 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala
@@ -74,6 +74,7 @@ class BigBlueButtonActor(
       case m: RegisterUserReqMsg          => handleRegisterUserReqMsg(m)
       case m: EjectDuplicateUserReqMsg    => handleEjectDuplicateUserReqMsg(m)
       case m: GetAllMeetingsReqMsg        => handleGetAllMeetingsReqMsg(m)
+      case m: GetRunningMeetingsReqMsg    => handleGetRunningMeetingsReqMsg(m)
       case m: CheckAlivePingSysMsg        => handleCheckAlivePingSysMsg(m)
       case m: ValidateConnAuthTokenSysMsg => handleValidateConnAuthTokenSysMsg(m)
       case _                              => log.warning("Cannot handle " + msg.envelope.name)
@@ -141,7 +142,20 @@ class BigBlueButtonActor(
       // do nothing
 
     }
+  }
+
+  private def handleGetRunningMeetingsReqMsg(msg: GetRunningMeetingsReqMsg): Unit = {
+    val liveMeetings = RunningMeetings.meetings(meetings)
+    val meetingIds = liveMeetings.map(m => m.props.meetingProp.intId)
+
+    val routing = collection.immutable.HashMap("sender" -> "bbb-apps-akka")
+    val envelope = BbbCoreEnvelope(GetRunningMeetingsRespMsg.NAME, routing)
+    val header = BbbCoreBaseHeader(GetRunningMeetingsRespMsg.NAME)
 
+    val body = GetRunningMeetingsRespMsgBody(meetingIds)
+    val event = GetRunningMeetingsRespMsg(header, body)
+    val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
+    outGW.send(msgEvent)
   }
 
   private def handleGetAllMeetingsReqMsg(msg: GetAllMeetingsReqMsg): Unit = {
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 b6e32aab55b961116fe513bdb0aad2fd5b7d68c3..95afd7b51f299ecab5164b6c2b164a2043b72cc6 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
@@ -221,6 +221,7 @@ class MeetingActor(
 
     case m: EjectDuplicateUserReqMsg          => usersApp.handleEjectDuplicateUserReqMsg(m)
     case m: GetAllMeetingsReqMsg              => handleGetAllMeetingsReqMsg(m)
+    case m: GetRunningMeetingStateReqMsg      => handleGetRunningMeetingStateReqMsg(m)
     case m: ValidateConnAuthTokenSysMsg       => handleValidateConnAuthTokenSysMsg(m)
 
     // Meeting
@@ -493,7 +494,11 @@ class MeetingActor(
     }
   }
 
-  def handleGetAllMeetingsReqMsg(msg: GetAllMeetingsReqMsg): Unit = {
+  def handleGetRunningMeetingStateReqMsg(msg: GetRunningMeetingStateReqMsg): Unit = {
+    processGetRunningMeetingStateReqMsg()
+  }
+
+  def processGetRunningMeetingStateReqMsg(): Unit = {
     // sync all meetings
     handleSyncGetMeetingInfoRespMsg(liveMeeting.props)
 
@@ -513,7 +518,10 @@ class MeetingActor(
     handleSyncGetLockSettingsMsg(state, liveMeeting, msgBus)
 
     // TODO send all screen sharing info
+  }
 
+  def handleGetAllMeetingsReqMsg(msg: GetAllMeetingsReqMsg): Unit = {
+    processGetRunningMeetingStateReqMsg()
   }
 
   def handlePresenterChange(msg: AssignPresenterReqMsg, state: MeetingState2x): MeetingState2x = {
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala
index c7b4b094865e1b0edd11770f392ee1f58556d7ce..1db1c5ddb839c1d105326aa2dcd4fab6b0bdfe1c 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/AnalyticsActor.scala
@@ -31,6 +31,8 @@ class AnalyticsActor extends Actor with ActorLogging {
 
     msg.core match {
       case m: GetAllMeetingsReqMsg                           => logMessage(msg)
+      case m: GetRunningMeetingsRespMsg                      => logMessage(msg)
+      case m: GetRunningMeetingsReqMsg                       => logMessage(msg)
 
       case m: RegisterUserReqMsg                             => logMessage(msg)
       case m: RegisteredUserJoinTimeoutMsg                   => logMessage(msg)
diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SystemMsgs.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SystemMsgs.scala
index 677c475b91c530bb8d157c38c31a38017be28070..0337441ffd7fb3a8c4087e58d2fa2a32af061837 100755
--- a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SystemMsgs.scala
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SystemMsgs.scala
@@ -37,6 +37,27 @@ case class GetAllMeetingsReqMsg(
 ) extends BbbCoreMsg
 case class GetAllMeetingsReqMsgBody(requesterId: String)
 
+object GetRunningMeetingsReqMsg { val NAME = "GetRunningMeetingsReqMsg" }
+case class GetRunningMeetingsReqMsg(
+    header: BbbCoreBaseHeader,
+    body:   GetRunningMeetingsReqMsgBody
+) extends BbbCoreMsg
+case class GetRunningMeetingsReqMsgBody(requesterId: String)
+
+object GetRunningMeetingsRespMsg { val NAME = "GetRunningMeetingsRespMsg" }
+case class GetRunningMeetingsRespMsg(
+    header: BbbCoreBaseHeader,
+    body:   GetRunningMeetingsRespMsgBody
+) extends BbbCoreMsg
+case class GetRunningMeetingsRespMsgBody(meetings: Vector[String])
+
+object GetRunningMeetingStateReqMsg { val NAME = "GetRunningMeetingStateReqMsg" }
+case class GetRunningMeetingStateReqMsg(
+    header: BbbCoreBaseHeader,
+    body:   GetRunningMeetingStateReqMsgBody
+) extends BbbCoreMsg
+case class GetRunningMeetingStateReqMsgBody(meetingId: String)
+
 object PubSubPingSysReqMsg { val NAME = "PubSubPingSysReqMsg" }
 case class PubSubPingSysReqMsg(
     header: BbbCoreBaseHeader,