From fc4028d6de546d2788ad2c122086767fec55ed2f Mon Sep 17 00:00:00 2001
From: Ghazi Triki <ghazi.triki@riadvice.tn>
Date: Fri, 9 Nov 2018 20:08:20 +0100
Subject: [PATCH] Redis refactoring : remove duplicate classes, factorisation
 and build configuration update.

---
 akka-bbb-apps/build.sbt                       |   2 +
 .../main/scala/org/bigbluebutton/Boot.scala   |  19 +--
 .../bigbluebutton/SystemConfiguration.scala   |  23 +---
 .../bigbluebutton/core/MessageSender.scala    |  10 --
 .../senders/ReceivedJsonMsgHandlerActor.scala |   4 +-
 .../core2/FromAkkaAppsMsgSenderActor.scala    |   4 +-
 ...ala => AkkaAppsRedisSubscriberActor.scala} |  41 +++----
 .../redis/KeepAliveRedisPublisher.scala       |  16 ---
 .../endpoint/redis/RedisPublisher.scala       |  21 ----
 .../endpoint/redis/RedisRecorderActor.scala   |   4 +-
 .../ReceivedJsonMsgHandlerTraitTests.scala    |   2 +-
 akka-bbb-fsesl/build.sbt                      | 110 +++++-------------
 akka-bbb-fsesl/project/Build.scala            |   0
 akka-bbb-fsesl/project/Dependencies.scala     |  76 ++++++++++++
 akka-bbb-fsesl/project/build.properties       |   2 +-
 akka-bbb-fsesl/project/plugins.sbt            |   8 +-
 .../main/scala/org/bigbluebutton/Boot.scala   |   8 +-
 .../bigbluebutton/SystemConfiguration.scala   |  12 +-
 ....scala => FSESLRedisSubscriberActor.scala} |  37 +++---
 .../endpoint/redis/RedisPublisher.scala       |  20 ----
 .../freeswitch/VoiceConferenceService.scala   |   4 +-
 bbb-apps-common/build.sbt                     |   1 -
 .../client/ClientGWApplication.scala          |  10 +-
 .../client/MsgToRedisActor.scala              |  11 +-
 .../client/SystemConfiguration.scala          |   9 +-
 .../client/bus/JsonMsgFromAkkaAppsBus.scala   |  32 -----
 .../client/bus/MsgFromAkkaAppsEventBus.scala  |  31 -----
 .../redis/KeepAliveRedisPublisher.scala       |  17 ---
 .../client/endpoint/redis/MessageSender.scala |   8 --
 ...ala => Red5AppsRedisSubscriberActor.scala} |  26 ++---
 .../endpoint/redis/RedisPublisher.scala       |  24 ----
 bbb-common-message/build.sbt                  |   2 -
 bbb-common-message/project/Dependencies.scala |  17 ++-
 .../common2/redis/RedisStorageService.java    |   1 -
 .../common2}/bus/IncomingJsonMessageBus.scala |   2 +-
 .../common2}/bus/JsonMsgFromAkkaAppsBus.scala |   6 +-
 .../bus/MsgFromAkkaAppsEventBus.scala         |   4 +-
 .../common2}/bus/OldMessageEventBus.scala     |   5 +-
 .../common2}/redis/MessageSender.scala        |   2 +-
 .../redis/RedisAppSubscriberActor.scala       |  18 +++
 .../common2/redis/RedisConfiguration.scala    |  24 ++++
 .../common2}/redis/RedisPublisher.scala       |   8 +-
 .../common2/redis/RedisSubscriber.scala       |   6 +
 bbb-common-web/build.sbt                      |   2 -
 bbb-common-web/project/Dependencies.scala     |   5 +-
 .../bigbluebutton/api2/BbbWebApiGWApp.scala   |  12 +-
 .../api2/SystemConfiguration.scala            |  11 +-
 .../api2/bus/MessageSenderActor.scala         |   2 +-
 .../bus/OldMessageJsonReceiverActor.scala     |   3 +-
 .../api2/bus/ReceivedJsonMsgHdlrActor.scala   |   1 +
 .../redis/RedisDataStorageActor.scala         |  11 +-
 ...or.scala => WebRedisSubscriberActor.scala} |  35 +++---
 .../api/util/ParamsUtilTest.scala             |  44 ++++---
 .../org/bigbluebutton/api/util/UnitSpec.scala |  15 ++-
 bbb-fsesl-client/build.sbt                    |  24 ++--
 .../app/screenshare/SystemConfiguration.scala |  12 +-
 .../redis/IncomingJsonMessageBus.scala        |  31 -----
 ... => ScreenshareRedisSubscriberActor.scala} |   0
 bigbluebutton-apps/build.gradle               |   1 -
 .../main/webapp/WEB-INF/bbb-redis-pool.xml    |   6 -
 60 files changed, 360 insertions(+), 542 deletions(-)
 delete mode 100755 akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSender.scala
 rename akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/{AppsRedisSubscriberActor.scala => AkkaAppsRedisSubscriberActor.scala} (68%)
 delete mode 100755 akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/KeepAliveRedisPublisher.scala
 delete mode 100755 akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala
 delete mode 100755 akka-bbb-fsesl/project/Build.scala
 create mode 100644 akka-bbb-fsesl/project/Dependencies.scala
 rename akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/{AppsRedisSubscriberActor.scala => FSESLRedisSubscriberActor.scala} (68%)
 delete mode 100755 akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala
 delete mode 100755 bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/JsonMsgFromAkkaAppsBus.scala
 delete mode 100755 bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/MsgFromAkkaAppsEventBus.scala
 delete mode 100755 bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/KeepAliveRedisPublisher.scala
 delete mode 100755 bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/MessageSender.scala
 rename bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/{AppsRedisSubscriberActor.scala => Red5AppsRedisSubscriberActor.scala} (67%)
 delete mode 100755 bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/RedisPublisher.scala
 rename {akka-bbb-apps/src/main/scala/org/bigbluebutton/core => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/bus/IncomingJsonMessageBus.scala (94%)
 mode change 100755 => 100644
 rename {bbb-common-web/src/main/scala/org/bigbluebutton/api2 => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/bus/JsonMsgFromAkkaAppsBus.scala (88%)
 mode change 100755 => 100644
 rename {bbb-common-web/src/main/scala/org/bigbluebutton/api2 => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/bus/MsgFromAkkaAppsEventBus.scala (91%)
 mode change 100755 => 100644
 rename {bbb-common-web/src/main/scala/org/bigbluebutton/api2 => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/bus/OldMessageEventBus.scala (86%)
 rename {bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/redis/MessageSender.scala (71%)
 create mode 100644 bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisAppSubscriberActor.scala
 create mode 100644 bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisConfiguration.scala
 rename {bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint => bbb-common-message/src/main/scala/org/bigbluebutton/common2}/redis/RedisPublisher.scala (57%)
 create mode 100644 bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisSubscriber.scala
 rename bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/{AppsRedisSubscriberActor.scala => WebRedisSubscriberActor.scala} (60%)
 delete mode 100755 bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/IncomingJsonMessageBus.scala
 rename bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/{AppsRedisSubscriberActor.scala => ScreenshareRedisSubscriberActor.scala} (100%)

diff --git a/akka-bbb-apps/build.sbt b/akka-bbb-apps/build.sbt
index 892a77e541..1a4da064d3 100755
--- a/akka-bbb-apps/build.sbt
+++ b/akka-bbb-apps/build.sbt
@@ -75,3 +75,5 @@ daemonGroup in Linux := group
 
 mappings in(Universal, packageBin) += file("src/main/resources/application.conf") -> "conf/application.conf"
 mappings in(Universal, packageBin) += file("src/main/resources/logback.xml") -> "conf/logback.xml"
+
+debianPackageDependencies in Debian ++= Seq("java8-runtime-headless", "bash")
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala
index 74a852b9a5..8df3465637 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/Boot.scala
@@ -1,12 +1,18 @@
 package org.bigbluebutton
 
-import akka.event.Logging
-import akka.actor.ActorSystem
-import org.bigbluebutton.endpoint.redis.{ AppsRedisSubscriberActor, KeepAliveRedisPublisher, RedisPublisher, RedisRecorderActor }
+import org.bigbluebutton.common2.redis.RedisPublisher
 import org.bigbluebutton.core._
 import org.bigbluebutton.core.bus._
 import org.bigbluebutton.core.pubsub.senders.ReceivedJsonMsgHandlerActor
-import org.bigbluebutton.core2.{ AnalyticsActor, FromAkkaAppsMsgSenderActor }
+import org.bigbluebutton.core2.AnalyticsActor
+import org.bigbluebutton.core2.FromAkkaAppsMsgSenderActor
+import org.bigbluebutton.endpoint.redis.AppsRedisSubscriberActor
+import org.bigbluebutton.endpoint.redis.RedisRecorderActor
+
+import akka.actor.ActorSystem
+import akka.event.Logging
+import org.bigbluebutton.common2.redis.MessageSender
+import org.bigbluebutton.common2.bus.IncomingJsonMessageBus
 
 object Boot extends App with SystemConfiguration {
 
@@ -22,7 +28,7 @@ object Boot extends App with SystemConfiguration {
 
   val outGW = new OutMessageGatewayImp(outBus2)
 
-  val redisPublisher = new RedisPublisher(system)
+  val redisPublisher = new RedisPublisher(system, "BbbAppsAkkaPub")
   val msgSender = new MessageSender(redisPublisher)
 
   val redisRecorderActor = system.actorOf(RedisRecorderActor.props(system), "redisRecorderActor")
@@ -47,7 +53,4 @@ object Boot extends App with SystemConfiguration {
   incomingJsonMessageBus.subscribe(redisMessageHandlerActor, toAkkaAppsJsonChannel)
 
   val redisSubscriberActor = system.actorOf(AppsRedisSubscriberActor.props(incomingJsonMessageBus), "redis-subscriber")
-
-  val keepAliveRedisPublisher = new KeepAliveRedisPublisher(system, redisPublisher)
-
 }
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala
index d2986d262a..743a4894c4 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/SystemConfiguration.scala
@@ -1,15 +1,10 @@
 package org.bigbluebutton
 
-import com.typesafe.config.ConfigFactory
 import scala.util.Try
 
-trait SystemConfiguration {
+import org.bigbluebutton.common2.redis.RedisConfiguration
 
-  val config = ConfigFactory.load()
-
-  lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1")
-  lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379)
-  lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("")
+trait SystemConfiguration extends RedisConfiguration {
 
   lazy val bbbWebHost = Try(config.getString("services.bbbWebHost")).getOrElse("localhost")
   lazy val bbbWebPort = Try(config.getInt("services.bbbWebPort")).getOrElse(8888)
@@ -31,8 +26,6 @@ trait SystemConfiguration {
   lazy val outBbbMsgMsgChannel = Try(config.getString("eventBus.outBbbMsgMsgChannel")).getOrElse("OutBbbMsgChannel")
   lazy val recordServiceMessageChannel = Try(config.getString("eventBus.recordServiceMessageChannel")).getOrElse("RecordServiceMessageChannel")
 
-  lazy val toAkkaAppsRedisChannel = Try(config.getString("redis.toAkkaAppsRedisChannel")).getOrElse("to-akka-apps-redis-channel")
-  lazy val fromAkkaAppsRedisChannel = Try(config.getString("redis.fromAkkaAppsRedisChannel")).getOrElse("from-akka-apps-redis-channel")
   lazy val toHTML5RedisChannel = Try(config.getString("redis.toHTML5RedisChannel")).getOrElse("to-html5-redis-channel")
   lazy val fromAkkaAppsChannel = Try(config.getString("eventBus.fromAkkaAppsChannel")).getOrElse("from-akka-apps-channel")
   lazy val toAkkaAppsChannel = Try(config.getString("eventBus.toAkkaAppsChannel")).getOrElse("to-akka-apps-channel")
@@ -41,21 +34,9 @@ trait SystemConfiguration {
   lazy val toAkkaAppsJsonChannel = Try(config.getString("eventBus.toAkkaAppsChannel")).getOrElse("to-akka-apps-json-channel")
   lazy val fromAkkaAppsJsonChannel = Try(config.getString("eventBus.fromAkkaAppsChannel")).getOrElse("from-akka-apps-json-channel")
 
-  lazy val toVoiceConfRedisChannel = Try(config.getString("redis.toVoiceConfRedisChannel")).getOrElse("to-voice-conf-redis-channel")
-  lazy val fromVoiceConfRedisChannel = Try(config.getString("redis.fromVoiceConfRedisChannel")).getOrElse("from-voice-conf-redis-channel")
-
-  lazy val fromAkkaAppsWbRedisChannel = Try(config.getString("redis.fromAkkaAppsWbRedisChannel")).getOrElse("from-akka-apps-wb-redis-channel")
-  lazy val fromAkkaAppsChatRedisChannel = Try(config.getString("redis.fromAkkaAppsChatRedisChannel")).getOrElse("from-akka-apps-chat-redis-channel")
-  lazy val fromAkkaAppsPresRedisChannel = Try(config.getString("redis.fromAkkaAppsPresRedisChannel")).getOrElse("from-akka-apps-pres-redis-channel")
-
   lazy val maxNumberOfNotes = Try(config.getInt("sharedNotes.maxNumberOfNotes")).getOrElse(3)
   lazy val maxNumberOfUndos = Try(config.getInt("sharedNotes.maxNumberOfUndos")).getOrElse(30)
 
-  lazy val httpInterface = Try(config.getString("http.interface")).getOrElse("")
-  lazy val httpPort = Try(config.getInt("http.port")).getOrElse(9090)
-  lazy val telizeHost = Try(config.getString("services.telizeHost")).getOrElse("")
-  lazy val telizePort = Try(config.getInt("services.telizePort")).getOrElse(80)
-
   lazy val applyPermissionCheck = Try(config.getBoolean("apps.checkPermissions")).getOrElse(false)
 
   lazy val voiceConfRecordPath = Try(config.getString("voiceConf.recordPath")).getOrElse("/var/freeswitch/meetings")
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSender.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSender.scala
deleted file mode 100755
index 250b1b3fba..0000000000
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/MessageSender.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.bigbluebutton.core
-
-import org.bigbluebutton.endpoint.redis.RedisPublisher
-
-class MessageSender(publisher: RedisPublisher) {
-
-  def send(channel: String, data: String) {
-    publisher.publish(channel, data)
-  }
-}
\ No newline at end of file
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala
index 7d762dbb11..639adf2ca1 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/pubsub/senders/ReceivedJsonMsgHandlerActor.scala
@@ -6,7 +6,9 @@ import com.fasterxml.jackson.databind.JsonNode
 import org.bigbluebutton.common2.msgs._
 import org.bigbluebutton.core.bus._
 import org.bigbluebutton.core2.ReceivedMessageRouter
-import scala.reflect.runtime.universe._
+import scala.reflect.runtime.universe._
+import org.bigbluebutton.common2.bus.ReceivedJsonMessage
+import org.bigbluebutton.common2.bus.IncomingJsonMessageBus
 
 object ReceivedJsonMsgHandlerActor {
   def props(eventBus: BbbMsgRouterEventBus, incomingJsonMessageBus: IncomingJsonMessageBus): Props =
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala
index 2dcaaf0f1f..0061b110d6 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/FromAkkaAppsMsgSenderActor.scala
@@ -3,8 +3,8 @@ package org.bigbluebutton.core2
 import akka.actor.{ Actor, ActorLogging, Props }
 import org.bigbluebutton.SystemConfiguration
 import org.bigbluebutton.common2.msgs._
-import org.bigbluebutton.common2.util.JsonUtil
-import org.bigbluebutton.core.MessageSender
+import org.bigbluebutton.common2.util.JsonUtil
+import org.bigbluebutton.common2.redis.MessageSender
 
 object FromAkkaAppsMsgSenderActor {
   def props(msgSender: MessageSender): Props = Props(classOf[FromAkkaAppsMsgSenderActor], msgSender)
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AkkaAppsRedisSubscriberActor.scala
similarity index 68%
rename from akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala
rename to akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AkkaAppsRedisSubscriberActor.scala
index 5a5a1424f5..c0ff9efed4 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/AkkaAppsRedisSubscriberActor.scala
@@ -1,22 +1,27 @@
 package org.bigbluebutton.endpoint.redis
 
-import akka.actor.Props
-import akka.actor.OneForOneStrategy
-import akka.actor.SupervisorStrategy.Resume
-import java.io.{ PrintWriter, StringWriter }
 import java.net.InetSocketAddress
 
-import redis.actors.RedisSubscriberActor
-import redis.api.pubsub.{ Message, PMessage }
-
-import scala.concurrent.duration._
 import org.bigbluebutton.SystemConfiguration
-import org.bigbluebutton.core.bus.{ IncomingJsonMessage, IncomingJsonMessageBus, ReceivedJsonMessage }
+import org.bigbluebutton.common2.bus.IncomingJsonMessage
+import org.bigbluebutton.common2.bus.IncomingJsonMessageBus
+import org.bigbluebutton.common2.bus.ReceivedJsonMessage
+import org.bigbluebutton.common2.redis.RedisAppSubscriberActor
+import org.bigbluebutton.common2.redis.RedisConfiguration
+import org.bigbluebutton.common2.redis.RedisSubscriber
+
+import akka.actor.Props
+import redis.actors.RedisSubscriberActor
+import redis.api.pubsub.Message
 import redis.api.servers.ClientSetname
+import java.io.StringWriter
+import akka.actor.OneForOneStrategy
+import akka.actor.SupervisorStrategy.Resume
+import scala.concurrent.duration.DurationInt
+import java.io.PrintWriter
 
-object AppsRedisSubscriberActor extends SystemConfiguration {
+object AppsRedisSubscriberActor extends RedisSubscriber with RedisConfiguration {
 
-  val TO_AKKA_APPS = "bbb:to-akka-apps"
   val channels = Seq(toAkkaAppsRedisChannel, fromVoiceConfRedisChannel)
   val patterns = Seq("bigbluebutton:to-bbb-apps:*", "bigbluebutton:from-voice-conf:*", "bigbluebutton:from-bbb-transcode:*")
 
@@ -29,9 +34,11 @@ object AppsRedisSubscriberActor extends SystemConfiguration {
 class AppsRedisSubscriberActor(jsonMsgBus: IncomingJsonMessageBus, redisHost: String,
                                redisPort: Int,
                                channels:  Seq[String] = Nil, patterns: Seq[String] = Nil)
-    extends RedisSubscriberActor(
-      new InetSocketAddress(redisHost, redisPort),
-      channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") }) with SystemConfiguration {
+  extends RedisSubscriberActor(
+    new InetSocketAddress(redisHost, redisPort),
+    channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") })
+  with SystemConfiguration
+  with RedisAppSubscriberActor {
 
   override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
     case e: Exception => {
@@ -55,10 +62,4 @@ class AppsRedisSubscriberActor(jsonMsgBus: IncomingJsonMessageBus, redisHost: St
     }
   }
 
-  def onPMessage(pmessage: PMessage) {
-
-    // We don't use PSubscribe anymore, but an implementation of the method is required
-    //log.error("Should not be receiving a PMessage. It triggered on a match of pattern: " + pmessage.patternMatched)
-    //log.error(pmessage.data.utf8String)
-  }
 }
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/KeepAliveRedisPublisher.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/KeepAliveRedisPublisher.scala
deleted file mode 100755
index 74aa6e4b78..0000000000
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/KeepAliveRedisPublisher.scala
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.bigbluebutton.endpoint.redis
-
-import scala.concurrent.duration._
-import scala.concurrent.ExecutionContext.Implicits.global
-import akka.actor.ActorSystem
-import org.bigbluebutton.SystemConfiguration
-
-class KeepAliveRedisPublisher(val system: ActorSystem, sender: RedisPublisher) extends SystemConfiguration {
-
-  val startedOn = System.currentTimeMillis()
-
-  system.scheduler.schedule(2 seconds, 5 seconds) {
-    //val msg = new BbbAppsIsAliveMessage(startedOn, System.currentTimeMillis())
-    // sender.publish("bigbluebutton:from-bbb-apps:keepalive", msg.toJson())
-  }
-}
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala
deleted file mode 100755
index 6af8a64ebb..0000000000
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.bigbluebutton.endpoint.redis
-
-import redis.RedisClient
-import akka.actor.ActorSystem
-import org.bigbluebutton.SystemConfiguration
-import akka.util.ByteString
-
-class RedisPublisher(val system: ActorSystem) extends SystemConfiguration {
-
-  val redis = RedisClient(redisHost, redisPort)(system)
-
-  // Set the name of this client to be able to distinguish when doing
-  // CLIENT LIST on redis-cli
-  redis.clientSetname("BbbAppsAkkaPub")
-
-  def publish(channel: String, data: String) {
-    //println("PUBLISH TO [" + channel + "]: \n [" + data + "]")
-    redis.publish(channel, ByteString(data))
-  }
-
-}
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisRecorderActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisRecorderActor.scala
index 7a01783d5b..715fe3b083 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisRecorderActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/endpoint/redis/RedisRecorderActor.scala
@@ -14,8 +14,8 @@ object RedisRecorderActor {
 }
 
 class RedisRecorderActor(val system: ActorSystem)
-    extends SystemConfiguration
-    with Actor with ActorLogging {
+  extends SystemConfiguration
+  with Actor with ActorLogging {
   val redis = RedisClient(redisHost, redisPort)(system)
 
   // Set the name of this client to be able to distinguish when doing
diff --git a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala
index cc0977ada4..329383ad15 100755
--- a/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala
+++ b/akka-bbb-apps/src/test/scala/org/bigbluebutton/core/pubsub/sender/ReceivedJsonMsgHandlerTraitTests.scala
@@ -9,7 +9,7 @@ import org.mockito.Mockito._
 import org.scalatest.mockito.MockitoSugar
 
 class ReceivedJsonMsgHandlerTraitTests extends UnitSpec
-    with AppsTestFixtures with MockitoSugar with SystemConfiguration {
+  with AppsTestFixtures with MockitoSugar with SystemConfiguration {
 
   class MessageRouter(val eventBus: BbbMsgRouterEventBus) extends ReceivedMessageRouter {
 
diff --git a/akka-bbb-fsesl/build.sbt b/akka-bbb-fsesl/build.sbt
index 319345d682..2a1d6b363a 100755
--- a/akka-bbb-fsesl/build.sbt
+++ b/akka-bbb-fsesl/build.sbt
@@ -1,21 +1,31 @@
-enablePlugins(JavaServerAppPackaging)
-
-name := "bbb-fsesl-akka"
+import org.bigbluebutton.build._
 
-organization := "org.bigbluebutton"
+import scalariform.formatter.preferences._
+import com.typesafe.sbt.SbtScalariform
+import com.typesafe.sbt.SbtScalariform.ScalariformKeys
 
-version := "0.0.1"
+import com.typesafe.sbt.SbtNativePackager.autoImport._
 
-scalaVersion  := "2.12.6"
+enablePlugins(JavaServerAppPackaging)
 
-scalacOptions ++= Seq(
-  "-unchecked",
-  "-deprecation",
-  "-Xlint",
-  "-Ywarn-dead-code",
-  "-language:_",
-  "-target:jvm-1.8",
-  "-encoding", "UTF-8"
+version := "0.0.2"
+
+val compileSettings = Seq(
+  organization := "org.bigbluebutton",
+
+  scalacOptions ++= List(
+    "-unchecked",
+    "-deprecation",
+    "-Xlint",
+    "-Ywarn-dead-code",
+    "-language:_",
+    "-target:jvm-1.8",
+    "-encoding", "UTF-8"
+  ),
+  javacOptions ++= List(
+    "-Xlint:unchecked",
+    "-Xlint:deprecation"
+  )
 )
 
 resolvers ++= Seq(
@@ -37,63 +47,14 @@ testOptions in Test += Tests.Argument(TestFrameworks.Specs2, "html", "console",
 
 testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-h", "target/scalatest-reports")
 
-val akkaVersion  = "2.5.14"
-val scalaTestV  = "2.2.6"
-
-
-libraryDependencies ++= {
-  Seq(
-    "ch.qos.logback"    	      %  "logback-classic"   % "1.2.3"       % "runtime",
-    "junit" 				      %  "junit"             % "4.11",
-    "commons-codec"             %  "commons-codec"     % "1.11",
-    "joda-time"                 %  "joda-time"         % "2.10",
-    "org.apache.commons"        %  "commons-lang3"     % "3.7"
-
-  )}
-
-libraryDependencies += "org.bigbluebutton" % "bbb-common-message_2.12" % "0.0.19-SNAPSHOT"
-
-libraryDependencies += "org.bigbluebutton"         %  "bbb-fsesl-client"   % "0.0.6"
-
-// https://mvnrepository.com/artifact/org.scala-lang/scala-library
-libraryDependencies += "org.scala-lang" % "scala-library" % scalaVersion.value
-// https://mvnrepository.com/artifact/org.scala-lang/scala-compiler
-libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value
-
-// https://mvnrepository.com/artifact/com.typesafe.akka/akka-actor_2.12
-libraryDependencies += "com.typesafe.akka" % "akka-actor_2.12" % akkaVersion
-
-// https://mvnrepository.com/artifact/com.typesafe.akka/akka-slf4j_2.12
-libraryDependencies += "com.typesafe.akka" % "akka-slf4j_2.12" % akkaVersion
-
-// https://mvnrepository.com/artifact/com.github.etaty/rediscala_2.12
-libraryDependencies += "com.github.etaty" % "rediscala_2.12" % "1.8.0"
-
-// For generating test reports
-libraryDependencies += "org.pegdown" % "pegdown" % "1.6.0" % "test"
-// https://mvnrepository.com/artifact/com.typesafe.akka/akka-testkit_2.12
-libraryDependencies += "com.typesafe.akka" % "akka-testkit_2.12" % "2.5.14" % "test"
-
-// https://mvnrepository.com/artifact/org.scalactic/scalactic_2.12
-libraryDependencies += "org.scalactic" % "scalactic_2.12" % "3.0.5" % "test"
-
-// https://mvnrepository.com/artifact/org.scalatest/scalatest_2.12
-libraryDependencies += "org.scalatest" % "scalatest_2.12" % "3.0.5" % "test"
-
-libraryDependencies += "org.mockito" % "mockito-core" % "2.21.0" % "test"
-
-seq(Revolver.settings: _*)
-
-import com.typesafe.sbt.SbtScalariform
-
-import scalariform.formatter.preferences._
-import com.typesafe.sbt.SbtScalariform.ScalariformKeys
+Seq(Revolver.settings: _*)
+lazy val bbbFseslAkka = (project in file(".")).settings(name := "bbb-fsesl-akka", libraryDependencies ++= Dependencies.runtime).settings(compileSettings)
 
-SbtScalariform.defaultScalariformSettings
+scalariformAutoformat := false
 
-ScalariformKeys.preferences := ScalariformKeys.preferences.value
+scalariformPreferences := scalariformPreferences.value
   .setPreference(AlignSingleLineCaseStatements, true)
-  .setPreference(DoubleIndentClassDeclaration, true)
+  .setPreference(DoubleIndentConstructorArguments, true)
   .setPreference(AlignParameters, true)
 
 //-----------
@@ -121,16 +82,7 @@ daemonUser in Linux := user
 // group which will execute the application
 daemonGroup in Linux := group 
 
-mappings in Universal <+= (packageBin in Compile, sourceDirectory ) map { (_, src) =>
-    // Move the application.conf so the user can override settings here
-    val appConf = src / "main" / "resources" / "application.conf"
-    appConf -> "conf/application.conf"
-}
-
-mappings in Universal <+= (packageBin in Compile, sourceDirectory ) map { (_, src) =>
-    // Move logback.xml so the user can override settings here    
-    val logConf = src / "main" / "resources" / "logback.xml"
-    logConf -> "conf/logback.xml"
-}
+mappings in(Universal, packageBin) += file("src/main/resources/application.conf") -> "conf/application.conf"
+mappings in(Universal, packageBin) += file("src/main/resources/logback.xml") -> "conf/logback.xml"
 
 debianPackageDependencies in Debian ++= Seq("java8-runtime-headless", "bash")
diff --git a/akka-bbb-fsesl/project/Build.scala b/akka-bbb-fsesl/project/Build.scala
deleted file mode 100755
index e69de29bb2..0000000000
diff --git a/akka-bbb-fsesl/project/Dependencies.scala b/akka-bbb-fsesl/project/Dependencies.scala
new file mode 100644
index 0000000000..2f27ce37cd
--- /dev/null
+++ b/akka-bbb-fsesl/project/Dependencies.scala
@@ -0,0 +1,76 @@
+package org.bigbluebutton.build
+
+import sbt._
+import Keys._
+
+object Dependencies {
+
+  object Versions {
+    // Scala
+    val scala = "2.12.7"
+    val junitInterface = "0.11"
+    val scalactic = "3.0.3"
+
+    // Libraries
+    val akkaVersion = "2.5.17"
+    val logback = "1.2.3"
+
+    // Apache Commons
+    val lang = "3.8.1"
+    val codec = "1.11"
+
+    // Redis
+    val redisScala = "1.8.0"
+
+    // BigBlueButton
+    val bbbCommons = "0.0.20-SNAPSHOT"
+    val bbbFsesl = "0.0.7"
+
+    // Test
+    val scalaTest = "3.0.5"
+    val akkaTestKit = "2.5.18"
+    val junit = "4.12"
+  }
+
+  object Compile {
+    val scalaLibrary = "org.scala-lang" % "scala-library" % Versions.scala
+    val scalaCompiler = "org.scala-lang" % "scala-compiler" % Versions.scala
+
+    val akkaActor = "com.typesafe.akka" % "akka-actor_2.12" % Versions.akkaVersion
+    val akkaSl4fj = "com.typesafe.akka" % "akka-slf4j_2.12" % Versions.akkaVersion
+
+    val logback = "ch.qos.logback" % "logback-classic" % Versions.logback % "runtime"
+    val commonsCodec = "commons-codec" % "commons-codec" % Versions.codec
+
+    val apacheLang = "org.apache.commons" % "commons-lang3" % Versions.lang
+
+    val redisScala = "com.github.etaty" % "rediscala_2.12" % Versions.redisScala
+
+    val bbbCommons = "org.bigbluebutton" % "bbb-common-message_2.12" % Versions.bbbCommons
+    val bbbFseslClient = "org.bigbluebutton" % "bbb-fsesl-client" % Versions.bbbFsesl
+  }
+
+  object Test {
+    val scalaTest = "org.scalatest" %% "scalatest" % Versions.scalaTest % "test"
+    val junit = "junit" % "junit" % Versions.junit % "test"
+    val scalactic = "org.scalactic" % "scalactic_2.12" % Versions.scalactic % "test"
+    val akkaTestKit = "com.typesafe.akka" %% "akka-testkit" % Versions.akkaTestKit % "test"
+  }
+
+  val testing = Seq(
+    Test.scalaTest,
+    Test.junit,
+    Test.scalactic,
+    Test.akkaTestKit)
+
+  val runtime = Seq(
+    Compile.scalaLibrary,
+    Compile.scalaCompiler,
+    Compile.akkaActor,
+    Compile.logback,
+    Compile.commonsCodec,
+    Compile.apacheLang,
+    Compile.redisScala,
+    Compile.bbbCommons,
+    Compile.bbbFseslClient) ++ testing
+}
diff --git a/akka-bbb-fsesl/project/build.properties b/akka-bbb-fsesl/project/build.properties
index a6e117b610..2e6e3d2460 100755
--- a/akka-bbb-fsesl/project/build.properties
+++ b/akka-bbb-fsesl/project/build.properties
@@ -1 +1 @@
-sbt.version=0.13.8
+sbt.version=1.2.6
\ No newline at end of file
diff --git a/akka-bbb-fsesl/project/plugins.sbt b/akka-bbb-fsesl/project/plugins.sbt
index 56e1e39f39..bc8c448553 100755
--- a/akka-bbb-fsesl/project/plugins.sbt
+++ b/akka-bbb-fsesl/project/plugins.sbt
@@ -1,11 +1,11 @@
 addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1")
 
-addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.8.2")
-
 addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")
 
-addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.6")
+addSbtPlugin("org.scalariform" % "sbt-scalariform" % "1.8.2")
+
+addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.12")
 
-addSbtPlugin("net.vonbuchholtz" % "sbt-dependency-check" % "0.2.7")
+addSbtPlugin("net.vonbuchholtz" % "sbt-dependency-check" % "0.2.8")
 
 addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0")
diff --git a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/Boot.scala b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/Boot.scala
index 1ab8664c2b..1ae4cbed2e 100755
--- a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/Boot.scala
+++ b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/Boot.scala
@@ -2,7 +2,8 @@ package org.bigbluebutton
 
 import akka.actor.{ ActorSystem }
 
-import org.bigbluebutton.endpoint.redis.{ AppsRedisSubscriberActor, RedisPublisher }
+import org.bigbluebutton.common2.redis.RedisPublisher
+import org.bigbluebutton.endpoint.redis.FSESLRedisSubscriberActor
 import org.bigbluebutton.freeswitch.{ RxJsonMsgHdlrActor, VoiceConferenceService }
 import org.bigbluebutton.freeswitch.bus.InsonMsgBus
 import org.bigbluebutton.freeswitch.voice.FreeswitchConferenceEventListener
@@ -13,7 +14,7 @@ object Boot extends App with SystemConfiguration {
 
   implicit val system = ActorSystem("bigbluebutton-fsesl-system")
 
-  val redisPublisher = new RedisPublisher(system)
+  val redisPublisher = new RedisPublisher(system, "BbbFsEslAkkaPub")
 
   val eslConnection = new DefaultManagerConnection(eslHost, eslPort, eslPassword)
 
@@ -34,6 +35,5 @@ object Boot extends App with SystemConfiguration {
   val redisMessageHandlerActor = system.actorOf(RxJsonMsgHdlrActor.props(fsApplication))
   inJsonMsgBus.subscribe(redisMessageHandlerActor, toFsAppsJsonChannel)
 
-  val redisSubscriberActor = system.actorOf(AppsRedisSubscriberActor.props(system, inJsonMsgBus), "redis-subscriber")
-
+  val redisSubscriberActor = system.actorOf(FSESLRedisSubscriberActor.props(system, inJsonMsgBus), "redis-subscriber")
 }
diff --git a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/SystemConfiguration.scala b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/SystemConfiguration.scala
index c9c776a410..188d202835 100755
--- a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/SystemConfiguration.scala
+++ b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/SystemConfiguration.scala
@@ -1,23 +1,15 @@
 package org.bigbluebutton
 
-import com.typesafe.config.ConfigFactory
 import scala.util.Try
 
-trait SystemConfiguration {
-
-  val config = ConfigFactory.load()
+import org.bigbluebutton.common2.redis.RedisConfiguration
 
+trait SystemConfiguration extends RedisConfiguration {
   lazy val eslHost = Try(config.getString("freeswitch.esl.host")).getOrElse("127.0.0.1")
   lazy val eslPort = Try(config.getInt("freeswitch.esl.port")).getOrElse(8021)
   lazy val eslPassword = Try(config.getString("freeswitch.esl.password")).getOrElse("ClueCon")
   lazy val fsProfile = Try(config.getString("freeswitch.conf.profile")).getOrElse("cdquality")
 
-  lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1")
-  lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379)
-  lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("")
-
-  lazy val toVoiceConfRedisChannel = Try(config.getString("redis.toVoiceConfRedisChannel")).getOrElse("to-voice-conf-redis-channel")
-  lazy val fromVoiceConfRedisChannel = Try(config.getString("redis.fromVoiceConfRedisChannel")).getOrElse("from-voice-conf-redis-channel")
   lazy val toFsAppsJsonChannel = Try(config.getString("eventBus.toFsAppsChannel")).getOrElse("to-fs-apps-json-channel")
   lazy val fromFsAppsJsonChannel = Try(config.getString("eventBus.fromFsAppsChannel")).getOrElse("from-fs-apps-json-channel")
 }
diff --git a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/FSESLRedisSubscriberActor.scala
similarity index 68%
rename from akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala
rename to akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/FSESLRedisSubscriberActor.scala
index 4f969be0b6..c021f739b7 100755
--- a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/AppsRedisSubscriberActor.scala
+++ b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/FSESLRedisSubscriberActor.scala
@@ -6,49 +6,54 @@ import java.net.InetSocketAddress
 
 import scala.concurrent.ExecutionContext.Implicits.global
 import scala.concurrent.duration.DurationInt
+
 import org.bigbluebutton.SystemConfiguration
+import org.bigbluebutton.common2.redis.RedisAppSubscriberActor
+import org.bigbluebutton.common2.redis.RedisConfiguration
+import org.bigbluebutton.common2.redis.RedisSubscriber
+import org.bigbluebutton.freeswitch.bus.InJsonMsg
+import org.bigbluebutton.freeswitch.bus.InsonMsgBus
+import org.bigbluebutton.freeswitch.bus.ReceivedJsonMsg
+
 import akka.actor.ActorSystem
 import akka.actor.OneForOneStrategy
 import akka.actor.Props
 import akka.actor.SupervisorStrategy.Resume
-import org.bigbluebutton.freeswitch.bus.{ InJsonMsg, InsonMsgBus, ReceivedJsonMsg }
 import redis.actors.RedisSubscriberActor
 import redis.api.pubsub.Message
-import redis.api.pubsub.PMessage
 import redis.api.servers.ClientSetname
 
-object AppsRedisSubscriberActor extends SystemConfiguration {
+object FSESLRedisSubscriberActor extends RedisSubscriber with RedisConfiguration {
 
   val channels = Seq(toVoiceConfRedisChannel)
   val patterns = Seq("bigbluebutton:to-voice-conf:*", "bigbluebutton:from-bbb-apps:*")
 
   def props(system: ActorSystem, inJsonMgBus: InsonMsgBus): Props =
-    Props(classOf[AppsRedisSubscriberActor], system, inJsonMgBus,
+    Props(classOf[FSESLRedisSubscriberActor], system, inJsonMgBus,
       redisHost, redisPort,
       channels, patterns).withDispatcher("akka.rediscala-subscriber-worker-dispatcher")
 }
 
-class AppsRedisSubscriberActor(
+class FSESLRedisSubscriberActor(
   val system:  ActorSystem,
   inJsonMgBus: InsonMsgBus, redisHost: String,
   redisPort: Int,
   channels:  Seq[String] = Nil, patterns: Seq[String] = Nil)
-    extends RedisSubscriberActor(
-      new InetSocketAddress(redisHost, redisPort),
-      channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") }) with SystemConfiguration {
+  extends RedisSubscriberActor(
+    new InetSocketAddress(redisHost, redisPort),
+    channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") })
+  with SystemConfiguration
+  with RedisAppSubscriberActor {
 
   override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
     case e: Exception => {
       val sw: StringWriter = new StringWriter()
-      sw.write("An exception has been thrown on AppsRedisSubscriberActor, exception message [" + e.getMessage() + "] (full stacktrace below)\n")
+      sw.write("An exception has been thrown on FSESlRedisSubscriberActor, exception message [" + e.getMessage() + "] (full stacktrace below)\n")
       e.printStackTrace(new PrintWriter(sw))
       log.error(sw.toString())
       Resume
     }
   }
-
-  //  val decoder = new FromJsonDecoder()
-
   var lastPongReceivedOn = 0L
   system.scheduler.schedule(10 seconds, 10 seconds)(checkPongMessage())
 
@@ -71,12 +76,4 @@ class AppsRedisSubscriberActor(
       inJsonMgBus.publish(InJsonMsg(toFsAppsJsonChannel, receivedJsonMessage))
     }
   }
-
-  def onPMessage(pmessage: PMessage) {
-    //    log.debug(s"pattern message received: $pmessage")
-  }
-
-  def handleMessage(msg: String) {
-    log.warning("**** TODO: Handle pubsub messages. ****")
-  }
 }
diff --git a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala
deleted file mode 100755
index 11acf3d06d..0000000000
--- a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/endpoint/redis/RedisPublisher.scala
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.bigbluebutton.endpoint.redis
-
-import redis.RedisClient
-import akka.actor.ActorSystem
-import org.bigbluebutton.SystemConfiguration
-
-class RedisPublisher(val system: ActorSystem) extends SystemConfiguration {
-
-  val redis = RedisClient(redisHost, redisPort)(system)
-
-  // Set the name of this client to be able to distinguish when doing
-  // CLIENT LIST on redis-cli
-  redis.clientSetname("BbbFsEslAkkaPub")
-
-  def publish(channel: String, data: String) {
-    //println("PUBLISH TO [" + channel + "]: \n [" + data + "]")
-    redis.publish(channel, data)
-  }
-
-}
diff --git a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala
index f82d080800..a72302e7f3 100755
--- a/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala
+++ b/akka-bbb-fsesl/src/main/scala/org/bigbluebutton/freeswitch/VoiceConferenceService.scala
@@ -2,9 +2,9 @@ package org.bigbluebutton.freeswitch
 
 import org.bigbluebutton.SystemConfiguration
 import org.bigbluebutton.freeswitch.voice.IVoiceConferenceService
-import org.bigbluebutton.endpoint.redis.RedisPublisher
 import org.bigbluebutton.common2.msgs._
-import org.bigbluebutton.common2.util.JsonUtil
+import org.bigbluebutton.common2.util.JsonUtil
+import org.bigbluebutton.common2.redis.RedisPublisher
 
 class VoiceConferenceService(sender: RedisPublisher) extends IVoiceConferenceService with SystemConfiguration {
 
diff --git a/bbb-apps-common/build.sbt b/bbb-apps-common/build.sbt
index 479d4e6ad4..ca5fd2275a 100755
--- a/bbb-apps-common/build.sbt
+++ b/bbb-apps-common/build.sbt
@@ -46,7 +46,6 @@ libraryDependencies += "com.softwaremill.quicklens" %% "quicklens" % "1.4.11"
 libraryDependencies += "org.bigbluebutton" % "bbb-common-message_2.12" % "0.0.19-SNAPSHOT"
 
 libraryDependencies += "com.google.code.gson" % "gson" % "2.8.5"
-libraryDependencies += "redis.clients" % "jedis" % "2.9.0"
 
 // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
 libraryDependencies += "org.apache.commons" % "commons-lang3" % "3.7"
diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala
index 9f0bf267da..30d2c67993 100644
--- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala
+++ b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/ClientGWApplication.scala
@@ -3,10 +3,12 @@ package org.bigbluebutton.client
 import akka.actor.ActorSystem
 import akka.event.Logging
 import org.bigbluebutton.client.bus._
-import org.bigbluebutton.client.endpoint.redis.{AppsRedisSubscriberActor, MessageSender, RedisPublisher}
+import org.bigbluebutton.client.endpoint.redis.AppsRedisSubscriberActor
 import org.bigbluebutton.client.meeting.MeetingManagerActor
-
-import scala.concurrent.duration._
+import org.bigbluebutton.common2.redis.RedisPublisher
+
+import scala.concurrent.duration._
+import org.bigbluebutton.common2.redis.MessageSender
 
 class ClientGWApplication(val msgToClientGW: MsgToClientGW) extends SystemConfiguration{
 
@@ -20,7 +22,7 @@ class ClientGWApplication(val msgToClientGW: MsgToClientGW) extends SystemConfig
   private val msgToRedisEventBus = new MsgToRedisEventBus
   private val msgToClientEventBus = new MsgToClientEventBus
 
-  private val redisPublisher = new RedisPublisher(system)
+  private val redisPublisher = new RedisPublisher(system, "Red5AppsPub")
   private val msgSender: MessageSender = new MessageSender(redisPublisher)
 
   private val meetingManagerActorRef = system.actorOf(
diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/MsgToRedisActor.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/MsgToRedisActor.scala
index 94b37ae924..5a3ce496ff 100644
--- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/MsgToRedisActor.scala
+++ b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/MsgToRedisActor.scala
@@ -1,10 +1,10 @@
 package org.bigbluebutton.client
 
-import akka.actor.{Actor, ActorLogging, Props}
+import akka.actor.{ Actor, ActorLogging, Props }
 import org.bigbluebutton.common2.msgs.BbbCommonEnvJsNodeMsg
-import org.bigbluebutton.common2.util.JsonUtil
-import org.bigbluebutton.client.endpoint.redis.MessageSender
+import org.bigbluebutton.common2.util.JsonUtil
 import org.bigbluebutton.common2.msgs.LookUpUserReqMsg
+import org.bigbluebutton.common2.redis.MessageSender
 
 object MsgToRedisActor {
   def props(msgSender: MessageSender): Props =
@@ -20,11 +20,10 @@ class MsgToRedisActor(msgSender: MessageSender)
 
   def handle(msg: BbbCommonEnvJsNodeMsg): Unit = {
     val json = JsonUtil.toJson(msg)
-    
+
     msg.envelope.name match {
       case LookUpUserReqMsg.NAME => msgSender.send(toThirdPartyRedisChannel, json)
-      case _ => msgSender.send(toAkkaAppsRedisChannel, json)
+      case _                     => msgSender.send(toAkkaAppsRedisChannel, json)
     }
   }
-
 }
diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/SystemConfiguration.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/SystemConfiguration.scala
index 26e7528bbb..1880c82f69 100644
--- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/SystemConfiguration.scala
+++ b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/SystemConfiguration.scala
@@ -1,15 +1,10 @@
 package org.bigbluebutton.client
 
 import scala.util.Try
-import com.typesafe.config.ConfigFactory
 
-trait SystemConfiguration {
-  val config = ConfigFactory.load()
-
-  lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1")
-  lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379)
-  lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("")
+import org.bigbluebutton.common2.redis.RedisConfiguration
 
+trait SystemConfiguration extends RedisConfiguration {
   lazy val toAkkaAppsRedisChannel = Try(config.getString("redis.toAkkaAppsRedisChannel")).getOrElse("to-akka-apps-redis-channel")
   lazy val fromAkkaAppsRedisChannel = Try(config.getString("redis.fromAkkaAppsRedisChannel")).getOrElse("from-akka-apps-redis-channel")
   lazy val toThirdPartyRedisChannel = Try(config.getString("redis.toThirdPartyRedisChannel")).getOrElse("to-third-party-redis-channel")
diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/JsonMsgFromAkkaAppsBus.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/JsonMsgFromAkkaAppsBus.scala
deleted file mode 100755
index ad28aa0618..0000000000
--- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/JsonMsgFromAkkaAppsBus.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.bigbluebutton.client.bus
-
-import akka.actor.ActorRef
-import akka.event.{EventBus, LookupClassification}
-
-case class JsonMsgFromAkkaApps(name: String, data: String)
-case class JsonMsgFromAkkaAppsEvent(val topic: String, val payload: JsonMsgFromAkkaApps)
-
-class JsonMsgFromAkkaAppsBus extends EventBus with LookupClassification {
-  type Event = JsonMsgFromAkkaAppsEvent
-  type Classifier = String
-  type Subscriber = ActorRef
-
-  // is used for extracting the classifier from the incoming events
-  override protected def classify(event: Event): Classifier = event.topic
-
-  // will be invoked for each event for all subscribers which registered themselves
-  // for the event’s classifier
-  override protected def publish(event: Event, subscriber: Subscriber): Unit = {
-    subscriber ! event.payload
-  }
-
-  // must define a full order over the subscribers, expressed as expected from
-  // `java.lang.Comparable.compare`
-  override protected def compareSubscribers(a: Subscriber, b: Subscriber): Int =
-  a.compareTo(b)
-
-  // determines the initial size of the index data structure
-  // used internally (i.e. the expected number of different classifiers)
-  override protected def mapSize: Int = 128
-
-}
diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/MsgFromAkkaAppsEventBus.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/MsgFromAkkaAppsEventBus.scala
deleted file mode 100755
index 20dc505536..0000000000
--- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/bus/MsgFromAkkaAppsEventBus.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.bigbluebutton.client.bus
-
-import akka.actor.ActorRef
-import akka.event.{EventBus, LookupClassification}
-import org.bigbluebutton.common2.msgs.{ BbbCommonEnvJsNodeMsg}
-
-case class MsgFromAkkaApps(val topic: String, val payload: BbbCommonEnvJsNodeMsg)
-
-class MsgFromAkkaAppsEventBus extends EventBus with LookupClassification {
-  type Event = MsgFromAkkaApps
-  type Classifier = String
-  type Subscriber = ActorRef
-
-  // is used for extracting the classifier from the incoming events
-  override protected def classify(event: Event): Classifier = event.topic
-
-  // will be invoked for each event for all subscribers which registered themselves
-  // for the event’s classifier
-  override protected def publish(event: Event, subscriber: Subscriber): Unit = {
-    subscriber ! event.payload
-  }
-
-  // must define a full order over the subscribers, expressed as expected from
-  // `java.lang.Comparable.compare`
-  override protected def compareSubscribers(a: Subscriber, b: Subscriber): Int =
-  a.compareTo(b)
-
-  // determines the initial size of the index data structure
-  // used internally (i.e. the expected number of different classifiers)
-  override protected def mapSize: Int = 128
-}
diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/KeepAliveRedisPublisher.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/KeepAliveRedisPublisher.scala
deleted file mode 100755
index 131a2d46ce..0000000000
--- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/KeepAliveRedisPublisher.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.bigbluebutton.client.endpoint.redis
-
-import scala.concurrent.duration._
-import scala.concurrent.ExecutionContext.Implicits.global
-import akka.actor.ActorSystem
-import org.bigbluebutton.client.SystemConfiguration
-//import org.bigbluebutton.common.messages.BbbAppsIsAliveMessage
-
-class KeepAliveRedisPublisher(val system: ActorSystem, sender: RedisPublisher) extends SystemConfiguration {
-
-  val startedOn = System.currentTimeMillis()
-
-  system.scheduler.schedule(2 seconds, 5 seconds) {
-//    val msg = new BbbAppsIsAliveMessage(startedOn, System.currentTimeMillis())
-//    sender.publish("bigbluebutton:from-bbb-apps:keepalive", msg.toJson())
-  }
-}
diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/MessageSender.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/MessageSender.scala
deleted file mode 100755
index 191af624c8..0000000000
--- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/MessageSender.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.bigbluebutton.client.endpoint.redis
-
-class MessageSender(publisher: RedisPublisher) {
-
-  def send(channel: String, data: String) {
-    publisher.publish(channel, data)
-  }
-}
diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/AppsRedisSubscriberActor.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/Red5AppsRedisSubscriberActor.scala
similarity index 67%
rename from bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/AppsRedisSubscriberActor.scala
rename to bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/Red5AppsRedisSubscriberActor.scala
index 2d3a30fe97..293bde7d9b 100644
--- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/AppsRedisSubscriberActor.scala
+++ b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/Red5AppsRedisSubscriberActor.scala
@@ -1,17 +1,18 @@
 package org.bigbluebutton.client.endpoint.redis
 
-import akka.actor.{ActorLogging, OneForOneStrategy, Props}
+import akka.actor.{ ActorLogging, OneForOneStrategy, Props }
 import akka.actor.SupervisorStrategy.Resume
-import java.io.{PrintWriter, StringWriter}
+import java.io.{ PrintWriter, StringWriter }
 import java.net.InetSocketAddress
 
 import redis.actors.RedisSubscriberActor
-import redis.api.pubsub.{Message, PMessage}
+import redis.api.pubsub.{ Message, PMessage }
 
 import scala.concurrent.duration._
 import org.bigbluebutton.client._
-import org.bigbluebutton.client.bus.{JsonMsgFromAkkaApps, JsonMsgFromAkkaAppsBus, JsonMsgFromAkkaAppsEvent}
-import redis.api.servers.ClientSetname
+import org.bigbluebutton.client.bus.{ JsonMsgFromAkkaApps, JsonMsgFromAkkaAppsBus, JsonMsgFromAkkaAppsEvent }
+import redis.api.servers.ClientSetname
+import org.bigbluebutton.common2.redis.RedisAppSubscriberActor
 
 object AppsRedisSubscriberActor extends SystemConfiguration {
 
@@ -26,10 +27,11 @@ object AppsRedisSubscriberActor extends SystemConfiguration {
 
 class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, redisHost: String,
                                redisPort: Int,
-                               channels: Seq[String] = Nil, patterns: Seq[String] = Nil)
-    extends RedisSubscriberActor(new InetSocketAddress(redisHost, redisPort),
-      channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") })
-      with SystemConfiguration with ActorLogging {
+                               channels:  Seq[String] = Nil, patterns: Seq[String] = Nil)
+  extends RedisSubscriberActor(
+    new InetSocketAddress(redisHost, redisPort),
+    channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") })
+  with SystemConfiguration with ActorLogging with RedisAppSubscriberActor {
 
   override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
     case e: Exception => {
@@ -41,7 +43,6 @@ class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, redisHost: St
     }
   }
 
-
   // Set the name of this client to be able to distinguish when doing
   // CLIENT LIST on redis-cli
   write(ClientSetname("Red5AppsSub").encodedRequest)
@@ -54,9 +55,4 @@ class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, redisHost: St
     }
 
   }
-
-  def onPMessage(pmessage: PMessage) {
-    // We don't use PSubscribe anymore, but an implementation of the method is required
-    log.error("Should not be receiving a PMessage. It triggered on a match of pattern: " + pmessage.patternMatched)
-  }
 }
diff --git a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/RedisPublisher.scala b/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/RedisPublisher.scala
deleted file mode 100755
index 379b15f5de..0000000000
--- a/bbb-apps-common/src/main/scala/org/bigbluebutton/client/endpoint/redis/RedisPublisher.scala
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.bigbluebutton.client.endpoint.redis
-
-import redis.RedisClient
-import akka.actor.ActorSystem
-import akka.event.Logging
-import org.bigbluebutton.client.SystemConfiguration
-import akka.util.ByteString
-
-class RedisPublisher(val system: ActorSystem) extends SystemConfiguration {
-
-  val redis = RedisClient(redisHost, redisPort)(system)
-
-  val log = Logging(system, getClass)
-
-  // Set the name of this client to be able to distinguish when doing
-  // CLIENT LIST on redis-cli
-  redis.clientSetname("Red5AppsPub")
-
-  def publish(channel: String, data: String) {
-    //log.debug("PUBLISH TO [" + channel + "]: \n [" + data + "]")
-    redis.publish(channel, ByteString(data))
-  }
-
-}
diff --git a/bbb-common-message/build.sbt b/bbb-common-message/build.sbt
index f18aee17ff..054aa4acd3 100755
--- a/bbb-common-message/build.sbt
+++ b/bbb-common-message/build.sbt
@@ -2,8 +2,6 @@ import org.bigbluebutton.build._
 
 version := "0.0.20-SNAPSHOT"
 
-scalaVersion := "2.12.7"
-
 val compileSettings = Seq(
   organization := "org.bigbluebutton",
 
diff --git a/bbb-common-message/project/Dependencies.scala b/bbb-common-message/project/Dependencies.scala
index a9f76fbc5c..92c0b22065 100644
--- a/bbb-common-message/project/Dependencies.scala
+++ b/bbb-common-message/project/Dependencies.scala
@@ -11,12 +11,15 @@ object Dependencies {
     val junit = "4.12"
     val junitInterface = "0.11"
     val scalactic = "3.0.3"
-    val pegdown = "1.6.0"
 
     // Libraries
+    val akkaVersion = "2.5.17"
     val gson = "2.8.5"
     val jackson = "2.9.7"
     val sl4j = "1.7.25"
+
+    // Redis
+    val redisScala = "1.8.0"
     val lettuce = "5.1.2.RELEASE"
 
     // Test
@@ -27,10 +30,14 @@ object Dependencies {
     val scalaLibrary = "org.scala-lang" % "scala-library" % Versions.scala
     val scalaCompiler = "org.scala-lang" % "scala-compiler" % Versions.scala
 
+    val akkaActor = "com.typesafe.akka" % "akka-actor_2.12" % Versions.akkaVersion
+
     val googleGson = "com.google.code.gson" % "gson" % Versions.gson
     val jacksonModule = "com.fasterxml.jackson.module" %% "jackson-module-scala" % Versions.jackson
     val sl4jApi = "org.slf4j" % "slf4j-api" % Versions.sl4j
+
     val lettuceCore = "io.lettuce" % "lettuce-core" % Versions.lettuce
+    val redisScala = "com.github.etaty" % "rediscala_2.12" % Versions.redisScala
   }
 
   object Test {
@@ -38,21 +45,21 @@ object Dependencies {
     val junit = "junit" % "junit" % Versions.junit % "test"
     val junitInteface = "com.novocode" % "junit-interface" % Versions.junitInterface % "test"
     val scalactic = "org.scalactic" % "scalactic_2.12" % Versions.scalactic % "test"
-    val pegdown = "org.pegdown" % "pegdown" % Versions.pegdown % "test"
   }
 
   val testing = Seq(
     Test.scalaTest,
     Test.junit,
     Test.junitInteface,
-    Test.scalactic,
-    Test.pegdown)
+    Test.scalactic)
 
   val runtime = Seq(
     Compile.scalaLibrary,
     Compile.scalaCompiler,
+    Compile.akkaActor,
     Compile.googleGson,
     Compile.jacksonModule,
     Compile.sl4jApi,
-    Compile.lettuceCore) ++ testing
+    Compile.lettuceCore,
+    Compile.redisScala) ++ testing
 }
diff --git a/bbb-common-message/src/main/java/org/bigbluebutton/common2/redis/RedisStorageService.java b/bbb-common-message/src/main/java/org/bigbluebutton/common2/redis/RedisStorageService.java
index 33133cf452..8a52f033b4 100644
--- a/bbb-common-message/src/main/java/org/bigbluebutton/common2/redis/RedisStorageService.java
+++ b/bbb-common-message/src/main/java/org/bigbluebutton/common2/redis/RedisStorageService.java
@@ -31,7 +31,6 @@ import io.lettuce.core.RedisURI;
 import io.lettuce.core.api.StatefulRedisConnection;
 import io.lettuce.core.api.sync.RedisCommands;
 import io.lettuce.core.dynamic.RedisCommandFactory;
-import io.lettuce.core.output.StatusOutput;
 
 public class RedisStorageService {
 
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/bus/IncomingJsonMessageBus.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/IncomingJsonMessageBus.scala
old mode 100755
new mode 100644
similarity index 94%
rename from akka-bbb-apps/src/main/scala/org/bigbluebutton/core/bus/IncomingJsonMessageBus.scala
rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/IncomingJsonMessageBus.scala
index f2e9aa281d..96dbff59b4
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/bus/IncomingJsonMessageBus.scala
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/IncomingJsonMessageBus.scala
@@ -1,4 +1,4 @@
-package org.bigbluebutton.core.bus
+package org.bigbluebutton.common2.bus
 
 import akka.actor.ActorRef
 import akka.event.{ EventBus, LookupClassification }
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/JsonMsgFromAkkaAppsBus.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/JsonMsgFromAkkaAppsBus.scala
old mode 100755
new mode 100644
similarity index 88%
rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/JsonMsgFromAkkaAppsBus.scala
rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/JsonMsgFromAkkaAppsBus.scala
index 5d26e2c23b..871f6f76f9
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/JsonMsgFromAkkaAppsBus.scala
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/JsonMsgFromAkkaAppsBus.scala
@@ -1,7 +1,7 @@
-package org.bigbluebutton.api2.bus
+package org.bigbluebutton.common2.bus
 
 import akka.actor.ActorRef
-import akka.event.{EventBus, LookupClassification}
+import akka.event.{ EventBus, LookupClassification }
 
 case class JsonMsgFromAkkaApps(name: String, data: String)
 case class JsonMsgFromAkkaAppsEvent(val topic: String, val payload: JsonMsgFromAkkaApps)
@@ -23,7 +23,7 @@ class JsonMsgFromAkkaAppsBus extends EventBus with LookupClassification {
   // must define a full order over the subscribers, expressed as expected from
   // `java.lang.Comparable.compare`
   override protected def compareSubscribers(a: Subscriber, b: Subscriber): Int =
-  a.compareTo(b)
+    a.compareTo(b)
 
   // determines the initial size of the index data structure
   // used internally (i.e. the expected number of different classifiers)
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MsgFromAkkaAppsEventBus.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/MsgFromAkkaAppsEventBus.scala
old mode 100755
new mode 100644
similarity index 91%
rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MsgFromAkkaAppsEventBus.scala
rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/MsgFromAkkaAppsEventBus.scala
index e9f25b91a5..097df4a29c
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MsgFromAkkaAppsEventBus.scala
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/MsgFromAkkaAppsEventBus.scala
@@ -2,9 +2,9 @@ package org.bigbluebutton.api2.bus
 
 import akka.actor.ActorRef
 import akka.event.{EventBus, LookupClassification}
-import org.bigbluebutton.common2.msgs.{BbbCommonEnvCoreMsg}
+import org.bigbluebutton.common2.msgs.BbbCommonMsg
 
-case class MsgFromAkkaApps(val topic: String, val payload: BbbCommonEnvCoreMsg)
+case class MsgFromAkkaApps(val topic: String, val payload: BbbCommonMsg)
 
 class MsgFromAkkaAppsEventBus extends EventBus with LookupClassification {
   type Event = MsgFromAkkaApps
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageEventBus.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/OldMessageEventBus.scala
similarity index 86%
rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageEventBus.scala
rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/OldMessageEventBus.scala
index cccd288cdc..9b7c6bdd0b 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageEventBus.scala
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/bus/OldMessageEventBus.scala
@@ -1,7 +1,8 @@
-package org.bigbluebutton.api2.bus
+package org.bigbluebutton.common2.bus
 
 import akka.actor.ActorRef
 import akka.event.{EventBus, LookupClassification}
+import akka.actor.actorRef2Scala
 
 case class OldReceivedJsonMessage(pattern: String, channel: String, msg: String)
 case class OldIncomingJsonMessage(val topic: String, val payload: OldReceivedJsonMessage)
@@ -11,7 +12,7 @@ class OldMessageEventBus extends EventBus with LookupClassification {
   type Classifier = String
   type Subscriber = ActorRef
 
-  // is used for extracting the classifier from the incoming events
+  // is used for extracting te classifier from the incoming events
   override protected def classify(event: Event): Classifier = event.topic
 
   // will be invoked for each event for all subscribers which registered themselves
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/MessageSender.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/MessageSender.scala
similarity index 71%
rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/MessageSender.scala
rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/MessageSender.scala
index be38ef4201..2426a353e6 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/MessageSender.scala
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/MessageSender.scala
@@ -1,4 +1,4 @@
-package org.bigbluebutton.api2.endpoint.redis
+package org.bigbluebutton.common2.redis
 
 class MessageSender(publisher: RedisPublisher) {
 
diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisAppSubscriberActor.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisAppSubscriberActor.scala
new file mode 100644
index 0000000000..5ee1ee8d81
--- /dev/null
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisAppSubscriberActor.scala
@@ -0,0 +1,18 @@
+package org.bigbluebutton.common2.redis
+
+import akka.actor.Actor
+import akka.event.LoggingAdapter
+import redis.api.pubsub.PMessage
+
+trait RedisAppSubscriberActor extends Actor {
+
+  def log: LoggingAdapter
+
+  def handleMessage(msg: String) {
+    throw new UnsupportedOperationException();
+  }
+
+  def onPMessage(pmessage: PMessage) {
+    throw new UnsupportedOperationException();
+  }
+}
diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisConfiguration.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisConfiguration.scala
new file mode 100644
index 0000000000..ff0e27a0ac
--- /dev/null
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisConfiguration.scala
@@ -0,0 +1,24 @@
+package org.bigbluebutton.common2.redis
+
+import scala.util.Try
+import com.typesafe.config.ConfigFactory
+
+trait RedisConfiguration {
+  val config = ConfigFactory.load()
+
+  // Redis server configuration
+  lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1")
+  lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379)
+  lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("")
+
+  // Redis channels
+  lazy val toAkkaAppsRedisChannel = Try(config.getString("redis.toAkkaAppsRedisChannel")).getOrElse("to-akka-apps-redis-channel")
+  lazy val fromAkkaAppsRedisChannel = Try(config.getString("redis.fromAkkaAppsRedisChannel")).getOrElse("from-akka-apps-redis-channel")
+
+  lazy val toVoiceConfRedisChannel = Try(config.getString("redis.toVoiceConfRedisChannel")).getOrElse("to-voice-conf-redis-channel")
+  lazy val fromVoiceConfRedisChannel = Try(config.getString("redis.fromVoiceConfRedisChannel")).getOrElse("from-voice-conf-redis-channel")
+
+  lazy val fromAkkaAppsWbRedisChannel = Try(config.getString("redis.fromAkkaAppsWbRedisChannel")).getOrElse("from-akka-apps-wb-redis-channel")
+  lazy val fromAkkaAppsChatRedisChannel = Try(config.getString("redis.fromAkkaAppsChatRedisChannel")).getOrElse("from-akka-apps-chat-redis-channel")
+  lazy val fromAkkaAppsPresRedisChannel = Try(config.getString("redis.fromAkkaAppsPresRedisChannel")).getOrElse("from-akka-apps-pres-redis-channel")
+}
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisPublisher.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisPublisher.scala
similarity index 57%
rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisPublisher.scala
rename to bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisPublisher.scala
index 23e47ddd06..d46bdcfa39 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisPublisher.scala
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisPublisher.scala
@@ -1,12 +1,11 @@
-package org.bigbluebutton.api2.endpoint.redis
+package org.bigbluebutton.common2.redis
 
 import akka.actor.ActorSystem
 import akka.event.Logging
 import akka.util.ByteString
-import org.bigbluebutton.api2.SystemConfiguration
 import redis.RedisClient
 
-class RedisPublisher(val system: ActorSystem) extends SystemConfiguration {
+class RedisPublisher(val system: ActorSystem, val clientName: String) extends RedisConfiguration {
 
   val redis = RedisClient(redisHost, redisPort)(system)
 
@@ -14,10 +13,9 @@ class RedisPublisher(val system: ActorSystem) extends SystemConfiguration {
 
   // Set the name of this client to be able to distinguish when doing
   // CLIENT LIST on redis-cli
-  redis.clientSetname("BbbWebPub")
+  redis.clientSetname(clientName)
 
   def publish(channel: String, data: String) {
-    //log.debug("PUBLISH TO \n[" + channel + "]: \n " + data + "\n")
     redis.publish(channel, ByteString(data))
   }
 
diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisSubscriber.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisSubscriber.scala
new file mode 100644
index 0000000000..630f079099
--- /dev/null
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/redis/RedisSubscriber.scala
@@ -0,0 +1,6 @@
+package org.bigbluebutton.common2.redis
+
+abstract class RedisSubscriber extends RedisConfiguration {
+  val channels: Seq[String]
+  val patterns: Seq[String]
+}
diff --git a/bbb-common-web/build.sbt b/bbb-common-web/build.sbt
index 4acb056c81..0519059e38 100755
--- a/bbb-common-web/build.sbt
+++ b/bbb-common-web/build.sbt
@@ -2,8 +2,6 @@ import org.bigbluebutton.build._
 
 version := "0.0.3-SNAPSHOT"
 
-scalaVersion := "2.12.7"
-
 val compileSettings = Seq(
   organization := "org.bigbluebutton",
 
diff --git a/bbb-common-web/project/Dependencies.scala b/bbb-common-web/project/Dependencies.scala
index a42aa9a5cd..4de3bd7531 100644
--- a/bbb-common-web/project/Dependencies.scala
+++ b/bbb-common-web/project/Dependencies.scala
@@ -11,7 +11,6 @@ object Dependencies {
     val junit = "4.12"
     val junitInterface = "0.11"
     val scalactic = "3.0.3"
-    val pegdown = "1.6.0"
 
     // Libraries
     val akkaVersion = "2.5.17"
@@ -83,15 +82,13 @@ object Dependencies {
     val junit = "junit" % "junit" % Versions.junit % "test"
     val junitInteface = "com.novocode" % "junit-interface" % Versions.junitInterface % "test"
     val scalactic = "org.scalactic" % "scalactic_2.12" % Versions.scalactic % "test"
-    val pegdown = "org.pegdown" % "pegdown" % Versions.pegdown % "test"
   }
 
   val testing = Seq(
     Test.scalaTest,
     Test.junit,
     Test.junitInteface,
-    Test.scalactic,
-    Test.pegdown)
+    Test.scalactic)
 
   val runtime = Seq(
     Compile.scalaLibrary,
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala
index 053c62ad56..4ac26006a5 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala
+++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/BbbWebApiGWApp.scala
@@ -5,12 +5,14 @@ import akka.actor.ActorSystem
 import akka.event.Logging
 import org.bigbluebutton.api.messaging.converters.messages._
 import org.bigbluebutton.api2.bus._
-import org.bigbluebutton.api2.endpoint.redis.{ AppsRedisSubscriberActor, MessageSender, RedisPublisher }
+import org.bigbluebutton.api2.endpoint.redis.{ WebRedisSubscriberActor }
+import org.bigbluebutton.common2.redis.MessageSender
 import org.bigbluebutton.api2.meeting.{ OldMeetingMsgHdlrActor, RegisterUser }
 import org.bigbluebutton.common2.domain._
 import org.bigbluebutton.presentation.messages._
-
-import scala.concurrent.duration._
+import scala.concurrent.duration._
+import org.bigbluebutton.common2.redis._
+import org.bigbluebutton.common2.bus._
 
 class BbbWebApiGWApp(
   val oldMessageReceivedGW:        OldMessageReceivedGW,
@@ -27,7 +29,7 @@ class BbbWebApiGWApp(
   log.debug("*********** meetingManagerChannel = " + meetingManagerChannel)
 
   private val jsonMsgToAkkaAppsBus = new JsonMsgToAkkaAppsBus
-  private val redisPublisher = new RedisPublisher(system)
+  private val redisPublisher = new RedisPublisher(system, "BbbWebPub")
   private val msgSender: MessageSender = new MessageSender(redisPublisher)
   private val messageSenderActorRef = system.actorOf(MessageSenderActor.props(msgSender), "messageSenderActor")
 
@@ -55,7 +57,7 @@ class BbbWebApiGWApp(
   msgToAkkaAppsEventBus.subscribe(msgToAkkaAppsToJsonActor, toAkkaAppsChannel)
 
   private val appsRedisSubscriberActor = system.actorOf(
-    AppsRedisSubscriberActor.props(receivedJsonMsgBus, oldMessageEventBus), "appsRedisSubscriberActor")
+    WebRedisSubscriberActor.props(receivedJsonMsgBus, oldMessageEventBus), "appsRedisSubscriberActor")
 
   private val receivedJsonMsgHdlrActor = system.actorOf(
     ReceivedJsonMsgHdlrActor.props(msgFromAkkaAppsEventBus), "receivedJsonMsgHdlrActor")
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/SystemConfiguration.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/SystemConfiguration.scala
index 0eb67da981..a092701a3a 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/SystemConfiguration.scala
+++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/SystemConfiguration.scala
@@ -3,16 +3,11 @@ package org.bigbluebutton.api2
 import com.typesafe.config.ConfigFactory
 
 import scala.util.Try
+import org.bigbluebutton.common2.redis.RedisConfiguration
 
-trait SystemConfiguration {
-  val config = ConfigFactory.load("bbb-web")
+trait SystemConfiguration extends RedisConfiguration {
+  override val config = ConfigFactory.load("bbb-web")
 
-  lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1")
-  lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379)
-  lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("")
-
-  lazy val toAkkaAppsRedisChannel = Try(config.getString("redis.toAkkaAppsRedisChannel")).getOrElse("to-akka-apps-redis-channel")
-  lazy val fromAkkaAppsRedisChannel = Try(config.getString("redis.fromAkkaAppsRedisChannel")).getOrElse("from-akka-apps-redis-channel")
   lazy val meetingManagerChannel = Try(config.getString("eventBus.meetingManagerChannel")).getOrElse("FOOOOOOOOO")
   lazy val fromAkkaAppsChannel = Try(config.getString("eventBus.fromAkkaAppsChannel")).getOrElse("from-akka-apps-channel")
   lazy val toAkkaAppsChannel = Try(config.getString("eventBus.toAkkaAppsChannel")).getOrElse("to-akka-apps-channel")
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MessageSenderActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MessageSenderActor.scala
index f4dc981cc9..e21612025c 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MessageSenderActor.scala
+++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/MessageSenderActor.scala
@@ -4,7 +4,7 @@ import java.io.{PrintWriter, StringWriter}
 
 import akka.actor.SupervisorStrategy.Resume
 import akka.actor.{Actor, ActorLogging, OneForOneStrategy, Props}
-import org.bigbluebutton.api2.endpoint.redis.MessageSender
+import org.bigbluebutton.common2.redis.MessageSender
 import scala.concurrent.duration._
 
 object MessageSenderActor {
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageJsonReceiverActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageJsonReceiverActor.scala
index f996ad30ef..ab5af661bf 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageJsonReceiverActor.scala
+++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/OldMessageJsonReceiverActor.scala
@@ -1,6 +1,7 @@
 package org.bigbluebutton.api2.bus
 
-import akka.actor.{Actor, ActorLogging, Props}
+import akka.actor.{Actor, ActorLogging, Props}
+import org.bigbluebutton.common2.bus.OldReceivedJsonMessage
 
 object OldMessageJsonReceiverActor{
   def props(gw: OldMessageReceivedGW): Props = Props(classOf[OldMessageJsonReceiverActor], gw)
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala
index e63f2d454e..174e4951df 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala
+++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/bus/ReceivedJsonMsgHdlrActor.scala
@@ -1,6 +1,7 @@
 package org.bigbluebutton.api2.bus
 
 import org.bigbluebutton.api2.SystemConfiguration
+import org.bigbluebutton.common2.bus._
 import org.bigbluebutton.common2.msgs._
 import com.fasterxml.jackson.databind.JsonNode
 import akka.actor.Actor
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisDataStorageActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisDataStorageActor.scala
index 8fb2731d42..95210390fc 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisDataStorageActor.scala
+++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/RedisDataStorageActor.scala
@@ -1,16 +1,14 @@
 package org.bigbluebutton.api2.endpoint.redis
 
-import akka.actor.{Actor, ActorLogging, ActorSystem, Props}
+import akka.actor.{ Actor, ActorLogging, ActorSystem, Props }
 import org.bigbluebutton.api2.SystemConfiguration
 import redis.RedisClient
 
-
 case class RecordMeetingInfoMsg(meetingId: String, info: collection.immutable.Map[String, String])
 case class RecordBreakoutInfoMsg(meetingId: String, info: collection.immutable.Map[String, String])
 case class AddBreakoutRoomMsg(parentId: String, breakoutId: String)
 case class RemoveMeetingMsg(meetingId: String)
 
-
 object RedisDataStorageActor {
   def props(system: ActorSystem): Props = Props(classOf[RedisDataStorageActor], system)
 }
@@ -24,13 +22,12 @@ class RedisDataStorageActor(val system: ActorSystem) extends Actor with ActorLog
   redis.clientSetname("BbbWebStore")
 
   def receive = {
-    case msg: RecordMeetingInfoMsg => handleRecordMeetingInfoMsg(msg)
+    case msg: RecordMeetingInfoMsg  => handleRecordMeetingInfoMsg(msg)
     case msg: RecordBreakoutInfoMsg => handleRecordBreakoutInfoMsg(msg)
-    case msg: AddBreakoutRoomMsg => handleAddBreakoutRoomMsg(msg)
-    case msg: RemoveMeetingMsg => handleRemoveMeetingMsg(msg)
+    case msg: AddBreakoutRoomMsg    => handleAddBreakoutRoomMsg(msg)
+    case msg: RemoveMeetingMsg      => handleRemoveMeetingMsg(msg)
   }
 
-
   def handleRecordMeetingInfoMsg(msg: RecordMeetingInfoMsg): Unit = {
     redis.hmset("meeting:info:" + msg.meetingId, msg.info)
   }
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/AppsRedisSubscriberActor.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/WebRedisSubscriberActor.scala
similarity index 60%
rename from bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/AppsRedisSubscriberActor.scala
rename to bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/WebRedisSubscriberActor.scala
index 3b566c6f2f..fff0050963 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/AppsRedisSubscriberActor.scala
+++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/endpoint/redis/WebRedisSubscriberActor.scala
@@ -1,34 +1,39 @@
 package org.bigbluebutton.api2.endpoint.redis
 
-import java.io.{PrintWriter, StringWriter}
+import java.io.{ PrintWriter, StringWriter }
 import java.net.InetSocketAddress
 
 import akka.actor.SupervisorStrategy.Resume
-import akka.actor.{OneForOneStrategy, Props}
+import akka.actor.{ OneForOneStrategy, Props }
 import redis.api.servers.ClientSetname
 import redis.actors.RedisSubscriberActor
-import redis.api.pubsub.{Message, PMessage}
+import redis.api.pubsub.{ Message, PMessage }
 import scala.concurrent.duration._
 
-import org.bigbluebutton.api2.SystemConfiguration
-import org.bigbluebutton.api2.bus._
+import org.bigbluebutton.api2._
+import org.bigbluebutton.common2.redis._
+import org.bigbluebutton.common2.redis.RedisConfiguration
+import org.bigbluebutton.common2.bus._
 
-object AppsRedisSubscriberActor extends SystemConfiguration {
+object WebRedisSubscriberActor extends RedisSubscriber with RedisConfiguration {
 
   val channels = Seq(fromAkkaAppsRedisChannel)
   val patterns = Seq("bigbluebutton:from-bbb-apps:*")
 
   def props(jsonMsgBus: JsonMsgFromAkkaAppsBus, oldMessageEventBus: OldMessageEventBus): Props =
-    Props(classOf[AppsRedisSubscriberActor], jsonMsgBus, oldMessageEventBus,
+    Props(classOf[WebRedisSubscriberActor], jsonMsgBus, oldMessageEventBus,
       redisHost, redisPort,
       channels, patterns).withDispatcher("akka.rediscala-subscriber-worker-dispatcher")
 }
 
-class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, oldMessageEventBus: OldMessageEventBus, redisHost: String,
-                               redisPort: Int,
-                               channels: Seq[String] = Nil, patterns: Seq[String] = Nil)
-    extends RedisSubscriberActor(new InetSocketAddress(redisHost, redisPort),
-      channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") }) with SystemConfiguration {
+class WebRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, oldMessageEventBus: OldMessageEventBus, redisHost: String,
+                              redisPort: Int,
+                              channels:  Seq[String] = Nil, patterns: Seq[String] = Nil)
+  extends RedisSubscriberActor(
+    new InetSocketAddress(redisHost, redisPort),
+    channels, patterns, onConnectStatus = connected => { println(s"connected: $connected") })
+  with SystemConfiguration
+  with RedisAppSubscriberActor {
 
   override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
     case e: Exception => {
@@ -40,7 +45,6 @@ class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, oldMessageEve
     }
   }
 
-
   // Set the name of this client to be able to distinguish when doing
   // CLIENT LIST on redis-cli
   write(ClientSetname("Red5AppsSub").encodedRequest)
@@ -53,9 +57,10 @@ class AppsRedisSubscriberActor(jsonMsgBus: JsonMsgFromAkkaAppsBus, oldMessageEve
     }
   }
 
-  def onPMessage(pmessage: PMessage) {
+  override def onPMessage(pmessage: PMessage) {
     log.debug(s"RECEIVED:\n ${pmessage.data.utf8String} \n")
-    val receivedJsonMessage = new OldReceivedJsonMessage(pmessage.patternMatched,
+    val receivedJsonMessage = new OldReceivedJsonMessage(
+      pmessage.patternMatched,
       pmessage.channel, pmessage.data.utf8String)
 
     oldMessageEventBus.publish(OldIncomingJsonMessage(fromAkkaAppsOldJsonChannel, receivedJsonMessage))
diff --git a/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/ParamsUtilTest.scala b/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/ParamsUtilTest.scala
index 6cf5716b06..460701c67a 100755
--- a/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/ParamsUtilTest.scala
+++ b/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/ParamsUtilTest.scala
@@ -1,23 +1,21 @@
-package org.bigbluebutton.api.util
-
-import org.scalatest._
-
-class ParamsUtilTest extends UnitSpec {
-
-  it should "strip out control chars from text" in {
-    val text = "a\u0000b\u0007c\u008fd"
-    val cleaned = ParamsUtil.stripControlChars(text)
-    assert("abcd" == cleaned)
-  }
-
-  it should "complain about invalid chars in meetingId" in {
-    val meetingId = "Demo , Meeting"
-    assert(ParamsUtil.isValidMeetingId(meetingId) == false)
-  }
-
-  it should "accept valid chars in meetingId" in {
-    val meetingId = "Demo Meeting - 123"
-    assert(ParamsUtil.isValidMeetingId(meetingId) == true)
-  }
-
-}
+package org.bigbluebutton.api.util
+
+class ParamsUtilTest extends UnitSpec {
+
+  it should "strip out control chars from text" in {
+    val text = "a\u0000b\u0007c\u008fd"
+    val cleaned = ParamsUtil.stripControlChars(text)
+    assert("abcd" == cleaned)
+  }
+
+  it should "complain about invalid chars in meetingId" in {
+    val meetingId = "Demo , Meeting"
+    assert(ParamsUtil.isValidMeetingId(meetingId) == false)
+  }
+
+  it should "accept valid chars in meetingId" in {
+    val meetingId = "Demo Meeting - 123"
+    assert(ParamsUtil.isValidMeetingId(meetingId) == true)
+  }
+
+}
diff --git a/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/UnitSpec.scala b/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/UnitSpec.scala
index fef2d5a231..6c5694d0c0 100755
--- a/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/UnitSpec.scala
+++ b/bbb-common-web/src/test/scala/org/bigbluebutton/api/util/UnitSpec.scala
@@ -1,8 +1,7 @@
-package org.bigbluebutton.api.util
-
-import org.scalatest.FlatSpec
-import org.scalatest.BeforeAndAfterAll
-import org.scalatest.WordSpec
-import org.scalatest.Matchers
-
-abstract class UnitSpec extends FlatSpec with Matchers with BeforeAndAfterAll
+package org.bigbluebutton.api.util
+
+import org.scalatest.FlatSpec
+import org.scalatest.BeforeAndAfterAll
+import org.scalatest.Matchers
+
+abstract class UnitSpec extends FlatSpec with Matchers with BeforeAndAfterAll
diff --git a/bbb-fsesl-client/build.sbt b/bbb-fsesl-client/build.sbt
index b3d4b559bb..426c635183 100755
--- a/bbb-fsesl-client/build.sbt
+++ b/bbb-fsesl-client/build.sbt
@@ -32,7 +32,7 @@ testOptions in Test += Tests.Argument(TestFrameworks.Specs2, "html", "console",
 testOptions in Test += Tests.Argument(TestFrameworks.ScalaTest, "-h", "target/scalatest-reports")
 
 Seq(Revolver.settings: _*)
-lazy val commonMessage = (project in file(".")).settings(name := "bbb-fsesl-client", libraryDependencies ++= Dependencies.runtime).settings(compileSettings)
+lazy val bbbFSESLClient = (project in file(".")).settings(name := "bbb-fsesl-client", libraryDependencies ++= Dependencies.runtime).settings(compileSettings)
 
 //-----------
 // Packaging
@@ -52,7 +52,7 @@ crossPaths := false
 // This forbids including Scala related libraries into the dependency
 autoScalaLibrary := false
 
-publishTo := Some(Resolver.file("file",  new File(Path.userHome.absolutePath+"/.m2/repository")))
+publishTo := Some(Resolver.file("file", new File(Path.userHome.absolutePath + "/.m2/repository")))
 
 //publishTo := {
 //  val nexus = "https://oss.sonatype.org/"
@@ -70,10 +70,10 @@ publishArtifact in Test := false
 
 // http://www.scala-sbt.org/release/docs/Artifacts.html
 // disable publishing the main API jar
-publishArtifact in (Compile, packageDoc) := false
+publishArtifact in(Compile, packageDoc) := false
 
 // disable publishing the main sources jar
-publishArtifact in (Compile, packageSrc) := false
+publishArtifact in(Compile, packageSrc) := false
 
 pomIncludeRepository := { _ => false }
 
@@ -82,14 +82,14 @@ pomExtra := (
     <url>git@github.com:bigbluebutton/bigbluebutton.git</url>
     <connection>scm:git:git@github.com:bigbluebutton/bigbluebutton.git</connection>
   </scm>
-  <developers>
-    <developer>
-      <id>ritzalam</id>
-      <name>Richard Alam</name>
-      <url>http://www.bigbluebutton.org</url>
-    </developer>
-  </developers>)
-  
+    <developers>
+      <developer>
+        <id>ritzalam</id>
+        <name>Richard Alam</name>
+        <url>http://www.bigbluebutton.org</url>
+      </developer>
+    </developers>)
+
 licenses := Seq("Apache License, Version 2.0" -> url("http://opensource.org/licenses/Apache-2.0"))
 
 homepage := Some(url("http://www.bigbluebutton.org"))
diff --git a/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/SystemConfiguration.scala b/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/SystemConfiguration.scala
index c25b684048..0267a37230 100755
--- a/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/SystemConfiguration.scala
+++ b/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/SystemConfiguration.scala
@@ -1,16 +1,10 @@
 package org.bigbluebutton.app.screenshare
 
 import scala.util.Try
-import com.typesafe.config.ConfigFactory
+import com.typesafe.config.ConfigFactory
+import org.bigbluebutton.common2.redis.RedisConfiguration
 
-trait SystemConfiguration {
-
-  //val config = ConfigFactory.load("screenshare-app")
-  val config = ConfigFactory.load()
-
-  lazy val redisHost = Try(config.getString("redis.host")).getOrElse("127.0.0.1")
-  lazy val redisPort = Try(config.getInt("redis.port")).getOrElse(6379)
-  lazy val redisPassword = Try(config.getString("redis.password")).getOrElse("")
+trait SystemConfiguration extends RedisConfiguration {
 
   lazy val meetingManagerChannel = Try(config.getString("eventBus.meetingManagerChannel")).getOrElse("NOT FROM APP CONF")
 
diff --git a/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/IncomingJsonMessageBus.scala b/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/IncomingJsonMessageBus.scala
deleted file mode 100755
index 532b120a86..0000000000
--- a/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/IncomingJsonMessageBus.scala
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.bigbluebutton.app.screenshare.redis
-
-import akka.actor.ActorRef
-import akka.event.{ EventBus, LookupClassification }
-
-case class ReceivedJsonMessage(channel: String, data: String)
-case class IncomingJsonMessage(val topic: String, val payload: ReceivedJsonMessage)
-
-class IncomingJsonMessageBus extends EventBus with LookupClassification {
-  type Event = IncomingJsonMessage
-  type Classifier = String
-  type Subscriber = ActorRef
-
-  // is used for extracting the classifier from the incoming events
-  override protected def classify(event: Event): Classifier = event.topic
-
-  // will be invoked for each event for all subscribers which registered themselves
-  // for the event’s classifier
-  override protected def publish(event: Event, subscriber: Subscriber): Unit = {
-    subscriber ! event.payload
-  }
-
-  // must define a full order over the subscribers, expressed as expected from
-  // `java.lang.Comparable.compare`
-  override protected def compareSubscribers(a: Subscriber, b: Subscriber): Int =
-    a.compareTo(b)
-
-  // determines the initial size of the index data structure
-  // used internally (i.e. the expected number of different classifiers)
-  override protected def mapSize: Int = 128
-}
diff --git a/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/AppsRedisSubscriberActor.scala b/bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/ScreenshareRedisSubscriberActor.scala
similarity index 100%
rename from bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/AppsRedisSubscriberActor.scala
rename to bbb-screenshare/app/src/main/scala/org/bigbluebutton/app/screenshare/redis/ScreenshareRedisSubscriberActor.scala
diff --git a/bigbluebutton-apps/build.gradle b/bigbluebutton-apps/build.gradle
index 85dc33cbaf..fddbba69b9 100755
--- a/bigbluebutton-apps/build.gradle
+++ b/bigbluebutton-apps/build.gradle
@@ -57,7 +57,6 @@ dependencies {
   compile 'org.easymock:easymock:3.6@jar'
   
   //redis
-  compile "redis.clients:jedis:2.9.0"
   compile 'org.apache.commons:commons-pool2:2.6.0'
  
    compile 'com.google.code.gson:gson:2.8.5'
diff --git a/bigbluebutton-apps/src/main/webapp/WEB-INF/bbb-redis-pool.xml b/bigbluebutton-apps/src/main/webapp/WEB-INF/bbb-redis-pool.xml
index b72ba93cd2..b0454f30d2 100755
--- a/bigbluebutton-apps/src/main/webapp/WEB-INF/bbb-redis-pool.xml
+++ b/bigbluebutton-apps/src/main/webapp/WEB-INF/bbb-redis-pool.xml
@@ -26,10 +26,4 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			http://www.springframework.org/schema/util 
 			http://www.springframework.org/schema/util/spring-util-2.0.xsd
 			">
-  	<!--
-    <bean id="redisPool" class="redis.clients.jedis.JedisPool">
-        <constructor-arg index="0" value="${redis.host}"/>
-        <constructor-arg index="1" value="${redis.port}"/>
-    </bean>
-	    -->
 </beans>
-- 
GitLab