diff --git a/akka-bbb-apps/build.sbt b/akka-bbb-apps/build.sbt
index 892a77e54143cfdb2e106db294996400e3c71ff2..1a4da064d35b82d6e584ef2784cba7290eb5db75 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 74a852b9a5ce018e90f1a4db00c0762c53475526..8df3465637734f5eb77b3bb584c83fa6fbd37aa7 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 d2986d262a88d84363f7870e563f11d981312a6f..743a4894c4acec763614b2f9d50ca560e59ba24b 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 250b1b3fba8c2b5f3a122f5cd54c168b7fdf30c4..0000000000000000000000000000000000000000
--- 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 7d762dbb11a7ba9e0a4d168621abb52967782224..639adf2ca10bf647b747d88e3ce40b85b2161391 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 2dcaaf0f1f44a96019243bbd968727a8ecc684ff..0061b110d6c0e6437a8ae2a1f9386594b08935ce 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 5a5a1424f59eaee4f6c91c2714e74bead3251766..c0ff9efed4b82707eb055390d7b817fe838ae1e6 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 74aa6e4b7885620de866627bba075e45e28dba75..0000000000000000000000000000000000000000
--- 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 6af8a64ebb05093023cc7e90a0f445cce3170b8b..0000000000000000000000000000000000000000
--- 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 7a01783d5b6448ad53fd98eb53a235f2829d284b..715fe3b08314dddea66c2bd67c6cbb5410b16569 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 cc0977ada45dea8480531cf253a394fd2b41b834..329383ad1512275c9afab734496cd35dfee05273 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 319345d682c45b7255b457ba2a3adafae985b767..2a1d6b363af508d03ceeeee859b09d617fb8486d 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 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/akka-bbb-fsesl/project/Dependencies.scala b/akka-bbb-fsesl/project/Dependencies.scala
new file mode 100644
index 0000000000000000000000000000000000000000..2f27ce37cd400217990fe62fd8c5e73b8befda70
--- /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 a6e117b61042ee81c62ba3a0fc5210d9502944df..2e6e3d24608ee15e892ed3b16d84224f7667e808 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 56e1e39f39dc0e78ca98f35d7c98f4c833509120..bc8c448553a2010f0c76ea69ccb7917f51ffef8a 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 1ab8664c2b09a3489ca5c8aa60322a67ca47f57e..1ae4cbed2e28b06d063ff2336ebab1df53a1f488 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 c9c776a410d714d2e28627a173e97a075500050e..188d202835c68438d44ba8fc7f26308fb929d5d2 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 4f969be0b6465347544e038f95917fa3c8a1794e..c021f739b7e3a9d82cb71a0cc6fb102cd943a835 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 11acf3d06d30cd2574e3e38a26befc09fae7166d..0000000000000000000000000000000000000000
--- 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 f82d08080087570a5b1102f2e972443904c10163..a72302e7f3fdbbd6093f8d7c206668e7fe251aca 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 479d4e6ad46626096e0a8e96028a29af971a0b2a..ca5fd2275a99656c172f2ca29741365925794cdf 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 9f0bf267da240b1da0d28ae1f8231cfed4f00891..30d2c6799320360e507119993a325231d462471d 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 94b37ae92489caf176caa2a5b3191dbaeb4d3fd4..5a3ce496ff2c1827b741c8106adf66693af2f2c1 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 26e7528bbbb99e0b0424c9ca0e269c0cde477089..1880c82f698e3f631edc8aa01c8d148885a649e8 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 ad28aa0618eb0ce5298feb8be9383ff2850d4c5c..0000000000000000000000000000000000000000
--- 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 20dc5055368e2084c2f8c3dc50e6fcf88f870135..0000000000000000000000000000000000000000
--- 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 131a2d46ceec85cc9d5f870ca32f381c70f797d9..0000000000000000000000000000000000000000
--- 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 191af624c8c0e67aa8be845784a1ca9942ed3255..0000000000000000000000000000000000000000
--- 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 2d3a30fe97fac898b5d91ae743c4c096d5c67658..293bde7d9bc37f6a26f10e2a55c5d6cb14a8c8b2 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 379b15f5dec53f025e454613d7c8b2a08bdcf042..0000000000000000000000000000000000000000
--- 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 f18aee17ff41af8796dc960f177a7015afe36064..054aa4acd34f7ae83ac5ea420818bfcf71ade0fd 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 a9f76fbc5cae3d185af34b9da24ea8d0be08a123..92c0b2206585a428b3e9d480a96761548f1e0162 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 33133cf4528755e1de0540567d0aed74792d4329..8a52f033b4df5fae6c0f35f596ed41df8a4e2213 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 f2e9aa281de9441af7bf0fe3fe1c7e63f91fa59d..96dbff59b4312665dcd909d73d3e3a3d1b102731
--- 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 5d26e2c23bb7a1c4f27a150d64a8a1fe4f4a0907..871f6f76f9948b4fc7b7fd0abbdf3cbb9bdd6c6b
--- 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 e9f25b91a5f9e2f8f224bed7e482334204ea806a..097df4a29c433f8e7b8e3dc1702696f1b8a2ad12
--- 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 cccd288cdcbf317ad7ea7da62761dcbdfcb4e9f6..9b7c6bdd0b248a80efe49dc062501f0d472338dc 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 be38ef420165f015adbeb0a6675f4f213dacd304..2426a353e6d687ebfe073acc28337f48b961444a 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 0000000000000000000000000000000000000000..5ee1ee8d81bed9cb10ef965bf46b83061be2d010
--- /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 0000000000000000000000000000000000000000..ff0e27a0acc648f06e713733d4764bc121d5c3d8
--- /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 23e47ddd06d00f8173032f08c5d585c354129f5f..d46bdcfa399d15d583d565504f91e9aebcba5006 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 0000000000000000000000000000000000000000..630f079099355cae9770d8072a8a1cbfb2b9b594
--- /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 4acb056c81380128a5dbd947067cef7c67e33944..0519059e3804bb645328d651ae678ce0ef83224d 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 a42aa9a5cd7df235c54a2988ab9f48befa33fd35..4de3bd7531404b2c4fe81e9b722cafa723102548 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 053c62ad567117e2120f8eb817a85ae55db7b081..4ac26006a579e078470cd33dd6d8491ea7f78a31 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 0eb67da98170ac2b5304922e745ffcd835351719..a092701a3a1e061d3d87f8c7ee3fcee1feb98e38 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 f4dc981cc96c2d79547f5d62693aa8da83c33558..e21612025c28d43587c0f715fe81455e67ffd03b 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 f996ad30ef5c87f4b417d238639ffc3facd34f76..ab5af661bf3f1fec0935d364ce2e9c027538813d 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 e63f2d454eecd42ea026bab87933fa10d02dde58..174e4951dfd5fad4a2a6c1dbd980207d78999111 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 8fb2731d4204bd661b5c1762549593439adf1066..95210390fc72cac8fad929f89c1d4c60a5563527 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 3b566c6f2f90eedc8969cb7b3346aef349c69a02..fff005096388457fe5528719d3103607445b14e9 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 6cf5716b067425c1a5a4e5372b58049bc24d2632..460701c67a52074344736bacfea2d03adfbb3066 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 fef2d5a231b50c2ea1597f488d4533cd972b040c..6c5694d0c06fd995a03851556746f84cefeeabc4 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 b3d4b559bbdbc3aa67f07e6152ba7ca96d604c07..426c6351836e40a50c57a68271fba90708fd1aac 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 c25b684048db28d44b04cc90e5eef302c56ccb50..0267a37230b7a7f40ed5841aace9eb8e4163b977 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 532b120a86c332aaec568ed93dd0941bc21f5fcf..0000000000000000000000000000000000000000
--- 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 85dc33cbaf3f8d581abaa6ec6da1cfb687110869..fddbba69b9287ff9f04c74ca8c29df144e192b95 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 b72ba93cd2670e60586dec23400a791ac34031de..b0454f30d2899f91ff7a67b189e5e31bc63ccf51 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>