diff --git a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SystemMsgs.scala b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SystemMsgs.scala
index 02fa08817044243ee197b0231ca3cd8b15614d14..08e8c38735cf9a9d1f36ddb575129f30b2de0d6b 100755
--- a/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SystemMsgs.scala
+++ b/bbb-common-message/src/main/scala/org/bigbluebutton/common2/msgs/SystemMsgs.scala
@@ -151,3 +151,15 @@ case class ValidateConnAuthTokenSysRespMsg(header: BbbCoreHeaderWithMeetingId,
                                            body: ValidateConnAuthTokenSysRespMsgBody) extends BbbCoreMsg
 case class ValidateConnAuthTokenSysRespMsgBody(meetingId: String, userId: String,
                                                connId: String, authzed: Boolean, app: String)
+
+object PublishedRecordingSysMsg { val NAME = "PublishedRecordingSysMsg" }
+case class PublishedRecordingSysMsg(header: BbbCoreBaseHeader, body: PublishedRecordingSysMsgBody) extends BbbCoreMsg
+case class PublishedRecordingSysMsgBody(recordId: String)
+
+object UnpublishedRecordingSysMsg { val NAME = "UnpublishedRecordingSysMsg" }
+case class UnpublishedRecordingSysMsg(header: BbbCoreBaseHeader, body: UnpublishedRecordingSysMsgBody) extends BbbCoreMsg
+case class UnpublishedRecordingSysMsgBody(recordId: String)
+
+object DeletedRecordingSysMsg { val NAME = "DeletedRecordingSysMsg" }
+case class DeletedRecordingSysMsg(header: BbbCoreBaseHeader, body: DeletedRecordingSysMsgBody) extends BbbCoreMsg
+case class DeletedRecordingSysMsgBody(recordId: String)
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
index 8dcfd16ff578dc24aa0049318a72e050b8344881..643e847a395fb9a48cf628e8121beedd298ccbf1 100644
--- 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
@@ -22,4 +22,6 @@ trait RedisConfiguration {
   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 fromBbbWebRedisChannel = Try(config.getString("redis.fromBbbWebRedisChannel")).getOrElse("from-bbb-web-redis-channel")
 }
diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java
index 825d0deea84dd58dc6a186cf6ab21bc84c37c299..0865d49710673d57f12eb10b30963f1380f6adc3 100755
--- a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java
+++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java
@@ -50,6 +50,9 @@ import org.bigbluebutton.api.domain.UserSession;
 import org.bigbluebutton.api.messaging.MessageListener;
 import org.bigbluebutton.api.messaging.converters.messages.DestroyMeetingMessage;
 import org.bigbluebutton.api.messaging.converters.messages.EndMeetingMessage;
+import org.bigbluebutton.api.messaging.converters.messages.PublishedRecordingMessage;
+import org.bigbluebutton.api.messaging.converters.messages.UnpublishedRecordingMessage;
+import org.bigbluebutton.api.messaging.converters.messages.DeletedRecordingMessage;
 import org.bigbluebutton.api.messaging.messages.CreateBreakoutRoom;
 import org.bigbluebutton.api.messaging.messages.CreateMeeting;
 import org.bigbluebutton.api.messaging.messages.EndMeeting;
@@ -417,16 +420,22 @@ public class MeetingService implements MessageListener {
   public void setPublishRecording(List<String> idList, boolean publish) {
     for (String id : idList) {
       if (publish) {
-        recordingService.changeState(id, Recording.STATE_PUBLISHED);
+        if (recordingService.changeState(id, Recording.STATE_PUBLISHED)) {
+          gw.publishedRecording(new PublishedRecordingMessage(id));
+        }
       } else {
-        recordingService.changeState(id, Recording.STATE_UNPUBLISHED);
+        if (recordingService.changeState(id, Recording.STATE_UNPUBLISHED)) {
+          gw.unpublishedRecording(new UnpublishedRecordingMessage(id));
+        }
       }
     }
   }
 
   public void deleteRecordings(List<String> idList) {
     for (String id : idList) {
-      recordingService.changeState(id, Recording.STATE_DELETED);
+      if (recordingService.changeState(id, Recording.STATE_DELETED)) {
+        gw.deletedRecording(new DeletedRecordingMessage(id));
+      }
     }
   }
 
diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java
index 57d5f2761a19a155fe7c4c7d1c65ed826145e224..0a18d237c6d2f8aa1e75b4ee093f61a7c498cc9d 100755
--- a/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java
+++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/RecordingService.java
@@ -398,46 +398,52 @@ public class RecordingService {
         return r;
     }
 
-    public void changeState(String recordingId, String state) {
+    public boolean changeState(String recordingId, String state) {
+        boolean succeeded = false;
         if (state.equals(Recording.STATE_PUBLISHED)) {
             // It can only be published if it is unpublished
-            changeState(unpublishedDir, recordingId, state);
+            succeeded |= changeState(unpublishedDir, recordingId, state);
         } else if (state.equals(Recording.STATE_UNPUBLISHED)) {
             // It can only be unpublished if it is published
-            changeState(publishedDir, recordingId, state);
+            succeeded |= changeState(publishedDir, recordingId, state);
         } else if (state.equals(Recording.STATE_DELETED)) {
             // It can be deleted from any state
-            changeState(publishedDir, recordingId, state);
-            changeState(unpublishedDir, recordingId, state);
+            succeeded |= changeState(publishedDir, recordingId, state);
+            succeeded |= changeState(unpublishedDir, recordingId, state);
         }
+        return succeeded;
     }
 
-    private void changeState(String path, String recordingId, String state) {
+    private boolean changeState(String path, String recordingId, String state) {
+        boolean exists = false;
+        boolean succeeded = true;
         String[] format = getPlaybackFormats(path);
          for (String aFormat : format) {
             List<File> recordings = getDirectories(path + File.separatorChar + aFormat);
             for (File recording : recordings) {
                 if (recording.getName().equalsIgnoreCase(recordingId)) {
+                    exists = true;
                     File dest;
                     if (state.equals(Recording.STATE_PUBLISHED)) {
                        dest = new File(publishedDir + File.separatorChar + aFormat);
-                       publishRecording(dest, recordingId, recording, aFormat);
+                       succeeded &= publishRecording(dest, recordingId, recording, aFormat);
                     } else if (state.equals(Recording.STATE_UNPUBLISHED)) {
                        dest = new File(unpublishedDir + File.separatorChar + aFormat);
-                       unpublishRecording(dest, recordingId, recording, aFormat);
+                       succeeded &= unpublishRecording(dest, recordingId, recording, aFormat);
                     } else if (state.equals(Recording.STATE_DELETED)) {
                        dest = new File(deletedDir + File.separatorChar + aFormat);
-                       deleteRecording(dest, recordingId, recording, aFormat);
+                       succeeded &= deleteRecording(dest, recordingId, recording, aFormat);
                     } else {
                        log.debug(String.format("State: %s, is not supported", state));
-                       return;
+                       return false;
                     }
                 }
             }
         }
+        return exists && succeeded;
     }
 
-    public void publishRecording(File destDir, String recordingId, File recordingDir, String format) {
+    public boolean publishRecording(File destDir, String recordingId, File recordingDir, String format) {
         File metadataXml = recordingServiceHelper.getMetadataXmlLocation(recordingDir.getPath());
         RecordingMetadata r = recordingServiceHelper.getRecordingMetadata(metadataXml);
         if (r != null) {
@@ -453,14 +459,15 @@ public class RecordingService {
                   destDir.getAbsolutePath() + File.separatorChar + recordingId);
 
                 // Process the changes by saving the recording into metadata.xml
-                recordingServiceHelper.saveRecordingMetadata(medataXmlFile, r);
+                return recordingServiceHelper.saveRecordingMetadata(medataXmlFile, r);
             } catch (IOException e) {
               log.error("Failed to publish recording : " + recordingId, e);
             }
         }
+        return false;
     }
 
-    public void unpublishRecording(File destDir, String recordingId, File recordingDir, String format) {
+    public boolean unpublishRecording(File destDir, String recordingId, File recordingDir, String format) {
         File metadataXml = recordingServiceHelper.getMetadataXmlLocation(recordingDir.getPath());
 
         RecordingMetadata r = recordingServiceHelper.getRecordingMetadata(metadataXml);
@@ -476,14 +483,15 @@ public class RecordingService {
                   destDir.getAbsolutePath() + File.separatorChar + recordingId);
 
                 // Process the changes by saving the recording into metadata.xml
-                recordingServiceHelper.saveRecordingMetadata(medataXmlFile, r);
+                return recordingServiceHelper.saveRecordingMetadata(medataXmlFile, r);
             } catch (IOException e) {
               log.error("Failed to unpublish recording : " + recordingId, e);
             }
         }
+        return false;
     }
 
-    public void deleteRecording(File destDir, String recordingId, File recordingDir, String format) {
+    public boolean deleteRecording(File destDir, String recordingId, File recordingDir, String format) {
         File metadataXml = recordingServiceHelper.getMetadataXmlLocation(recordingDir.getPath());
 
         RecordingMetadata r = recordingServiceHelper.getRecordingMetadata(metadataXml);
@@ -499,11 +507,12 @@ public class RecordingService {
                   destDir.getAbsolutePath() + File.separatorChar + recordingId);
 
                 // Process the changes by saving the recording into metadata.xml
-                recordingServiceHelper.saveRecordingMetadata(medataXmlFile, r);
+                return recordingServiceHelper.saveRecordingMetadata(medataXmlFile, r);
             } catch (IOException e) {
               log.error("Failed to delete recording : " + recordingId, e);
             }
         }
+        return false;
     }
 
 
diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/DeleteRecordingMessage.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/DeleteRecordingMessage.java
deleted file mode 100755
index dc79d97e64b6c49f5fa1bf0d862e2d09a01261d3..0000000000000000000000000000000000000000
--- a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/DeleteRecordingMessage.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bigbluebutton.api.messaging.converters.messages;
-
-public class DeleteRecordingMessage {
-	public static final String DELETE_RECORDING = "deleted";
-	public static final String VERSION = "0.0.1";
-
-	public final String recordId;
-	public final String meetingId;
-	public final String externalMeetingId;
-	public final String format;
-
-	public DeleteRecordingMessage(String recordId, String meetingId, String externalMeetingId, String format) {
-		this.recordId = recordId;
-		this.meetingId = meetingId;
-		this.externalMeetingId = externalMeetingId;
-		this.format = format;
-	}
-}
diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/DeletedRecordingMessage.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/DeletedRecordingMessage.java
new file mode 100755
index 0000000000000000000000000000000000000000..91b8318706ef00e45f1efcec608666216dd8ff19
--- /dev/null
+++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/DeletedRecordingMessage.java
@@ -0,0 +1,12 @@
+package org.bigbluebutton.api.messaging.converters.messages;
+
+public class DeletedRecordingMessage {
+	public static final String DELETED_RECORDING_EVENT = "deleted_recording_event";
+	public static final String VERSION = "0.0.1";
+
+	public final String recordId;
+
+	public DeletedRecordingMessage(String recordId) {
+		this.recordId = recordId;
+	}
+}
diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/PublishRecordingMessage.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/PublishRecordingMessage.java
deleted file mode 100755
index 509679ea7ef30cbb9b0cf02600a4b6180e4e79dd..0000000000000000000000000000000000000000
--- a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/PublishRecordingMessage.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bigbluebutton.api.messaging.converters.messages;
-
-public class PublishRecordingMessage {
-	public static final String PUBLISH_RECORDING = "published";
-	public static final String VERSION = "0.0.1";
-
-	public final String recordId;
-	public final String meetingId;
-	public final String externalMeetingId;
-	public final String format;
-
-	public PublishRecordingMessage(String recordId, String meetingId, String externalMeetingId, String format) {
-		this.recordId = recordId;
-		this.meetingId = meetingId;
-		this.externalMeetingId = externalMeetingId;
-		this.format = format;
-	}
-}
diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/PublishedRecordingMessage.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/PublishedRecordingMessage.java
new file mode 100755
index 0000000000000000000000000000000000000000..d85f55f2affba9bf48663f27984889ba53ac3dcb
--- /dev/null
+++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/PublishedRecordingMessage.java
@@ -0,0 +1,12 @@
+package org.bigbluebutton.api.messaging.converters.messages;
+
+public class PublishedRecordingMessage {
+	public static final String PUBLISHED_RECORDING_EVENT = "published_recording_event";
+	public static final String VERSION = "0.0.1";
+
+	public final String recordId;
+
+	public PublishedRecordingMessage(String recordId) {
+		this.recordId = recordId;
+	}
+}
diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/UnpublishRecordingMessage.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/UnpublishRecordingMessage.java
deleted file mode 100755
index 822104657d6ed02d5e8f542bccc315fc0349967b..0000000000000000000000000000000000000000
--- a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/UnpublishRecordingMessage.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.bigbluebutton.api.messaging.converters.messages;
-
-public class UnpublishRecordingMessage {
-	public static final String UNPUBLISH_RECORDING = "unpublished";
-	public static final String VERSION = "0.0.1";
-
-	public final String recordId;
-	public final String meetingId;
-	public final String externalMeetingId;
-	public final String format;
-
-	public UnpublishRecordingMessage(String recordId, String meetingId, String externalMeetingId, String format) {
-		this.recordId = recordId;
-		this.meetingId = meetingId;
-		this.externalMeetingId = externalMeetingId;
-		this.format = format;
-	}
-}
diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/UnpublishedRecordingMessage.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/UnpublishedRecordingMessage.java
new file mode 100755
index 0000000000000000000000000000000000000000..f02807eef1886fe290ba0c85ba7ccc79d281e00c
--- /dev/null
+++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/messaging/converters/messages/UnpublishedRecordingMessage.java
@@ -0,0 +1,12 @@
+package org.bigbluebutton.api.messaging.converters.messages;
+
+public class UnpublishedRecordingMessage {
+	public static final String UNPUBLISHED_RECORDING_EVENT = "unpublished_recording_event";
+	public static final String VERSION = "0.0.1";
+
+	public final String recordId;
+
+	public UnpublishedRecordingMessage(String recordId) {
+		this.recordId = recordId;
+	}
+}
diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/util/RecordingMetadataReaderHelper.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/util/RecordingMetadataReaderHelper.java
index e979af4e5959b374bc8aa73cab2d27e69b23202f..6c7f045e43f3d063af610925f1f4b8c20026bca7 100755
--- a/bbb-common-web/src/main/java/org/bigbluebutton/api/util/RecordingMetadataReaderHelper.java
+++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/util/RecordingMetadataReaderHelper.java
@@ -44,8 +44,8 @@ public class RecordingMetadataReaderHelper {
     return new File(destDir + File.separatorChar + "metadata.xml");
   }
 
-  public void saveRecordingMetadata(File metadataXml, RecordingMetadata recordingMetadata) {
-    recordingServiceGW.saveRecordingMetadata(metadataXml, recordingMetadata);
+  public boolean saveRecordingMetadata(File metadataXml, RecordingMetadata recordingMetadata) {
+    return recordingServiceGW.saveRecordingMetadata(metadataXml, recordingMetadata);
   }
 
   public void setRecordingServiceGW(RecordingServiceGW recordingServiceGW) {
diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api2/IBbbWebApiGWApp.java b/bbb-common-web/src/main/java/org/bigbluebutton/api2/IBbbWebApiGWApp.java
index 0fbd8f10d703cd33dcbf123dc98d41b7ce759c5d..cced3e2f34cfb9d4ebfadb793eedc2191a59b84f 100755
--- a/bbb-common-web/src/main/java/org/bigbluebutton/api2/IBbbWebApiGWApp.java
+++ b/bbb-common-web/src/main/java/org/bigbluebutton/api2/IBbbWebApiGWApp.java
@@ -2,11 +2,11 @@ package org.bigbluebutton.api2;
 
 import java.util.Map;
 
-import org.bigbluebutton.api.messaging.converters.messages.DeleteRecordingMessage;
 import org.bigbluebutton.api.messaging.converters.messages.DestroyMeetingMessage;
 import org.bigbluebutton.api.messaging.converters.messages.EndMeetingMessage;
-import org.bigbluebutton.api.messaging.converters.messages.PublishRecordingMessage;
-import org.bigbluebutton.api.messaging.converters.messages.UnpublishRecordingMessage;
+import org.bigbluebutton.api.messaging.converters.messages.PublishedRecordingMessage;
+import org.bigbluebutton.api.messaging.converters.messages.UnpublishedRecordingMessage;
+import org.bigbluebutton.api.messaging.converters.messages.DeletedRecordingMessage;
 import org.bigbluebutton.presentation.messages.IDocConversionMsg;
 
 public interface IBbbWebApiGWApp {
@@ -36,8 +36,8 @@ public interface IBbbWebApiGWApp {
   void destroyMeeting(DestroyMeetingMessage msg);
   void endMeeting(EndMeetingMessage msg);
   void sendKeepAlive(String system, Long timestamp);
-  void publishRecording(PublishRecordingMessage msg);
-  void unpublishRecording(UnpublishRecordingMessage msg);
-  void deleteRecording(DeleteRecordingMessage msg);
+  void publishedRecording(PublishedRecordingMessage msg);
+  void unpublishedRecording(UnpublishedRecordingMessage msg);
+  void deletedRecording(DeletedRecordingMessage msg);
   void sendDocConversionMsg(IDocConversionMsg msg);
 }
diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api2/RecordingServiceGW.java b/bbb-common-web/src/main/java/org/bigbluebutton/api2/RecordingServiceGW.java
index d23d4f2ec9b380fc7724b7c02e7f2055f32f0ef7..987d9f96b59a20cc3d1801e0cddc3cea864b8c05 100755
--- a/bbb-common-web/src/main/java/org/bigbluebutton/api2/RecordingServiceGW.java
+++ b/bbb-common-web/src/main/java/org/bigbluebutton/api2/RecordingServiceGW.java
@@ -12,7 +12,7 @@ public interface RecordingServiceGW {
 
   String getRecordings2x(ArrayList<RecordingMetadata> recs);
   Option<RecordingMetadata> getRecordingMetadata(File xml);
-  void saveRecordingMetadata(File xml, RecordingMetadata metadata);
+  boolean saveRecordingMetadata(File xml, RecordingMetadata metadata);
   String getRecordingTextTracks(String recordId, String captionsDir);
   String putRecordingTextTrack(UploadedTrack track);
 }
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 6d62c007f4b22d54d1943c9533b207da058a0c62..dfce728857ffa53fe4112226e6c6c10f38abaee0 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
@@ -9,6 +9,7 @@ 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.common2.util.JsonUtil
 import org.bigbluebutton.presentation.messages._
 import scala.concurrent.duration._
 import org.bigbluebutton.common2.redis._
@@ -165,19 +166,24 @@ class BbbWebApiGWApp(
   def sendKeepAlive(system: String, timestamp: java.lang.Long): Unit = {
     val event = MsgBuilder.buildCheckAlivePingSysMsg(system, timestamp.longValue())
     msgToAkkaAppsEventBus.publish(MsgToAkkaApps(toAkkaAppsChannel, event))
-
   }
 
-  def publishRecording(msg: PublishRecordingMessage): Unit = {
-
+  def publishedRecording(msg: PublishedRecordingMessage): Unit = {
+    val event = MsgBuilder.buildPublishedRecordingSysMsg(msg)
+    // Probably violating something here, but a new event bus looks just too much for this
+    msgSender.send(fromBbbWebRedisChannel, JsonUtil.toJson(event))
   }
 
-  def unpublishRecording(msg: UnpublishRecordingMessage): Unit = {
-
+  def unpublishedRecording(msg: UnpublishedRecordingMessage): Unit = {
+    val event = MsgBuilder.buildUnpublishedRecordingSysMsg(msg)
+    // Probably violating something here, but a new event bus looks just too much for this
+    msgSender.send(fromBbbWebRedisChannel, JsonUtil.toJson(event))
   }
 
-  def deleteRecording(msg: DeleteRecordingMessage): Unit = {
-
+  def deletedRecording(msg: DeletedRecordingMessage): Unit = {
+    val event = MsgBuilder.buildDeletedRecordingSysMsg(msg)
+    // Probably violating something here, but a new event bus looks just too much for this
+    msgSender.send(fromBbbWebRedisChannel, JsonUtil.toJson(event))
   }
 
   def sendDocConversionMsg(msg: IDocConversionMsg): Unit = {
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala
index e71f7ff1301cc1bcdd65536536bf1b8b3fda99ef..ba5bcd29bc864cbdb7862c51fe74b00354af95e9 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala
+++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/MsgBuilder.scala
@@ -1,6 +1,6 @@
 package org.bigbluebutton.api2
 
-import org.bigbluebutton.api.messaging.converters.messages.{DestroyMeetingMessage, EndMeetingMessage}
+import org.bigbluebutton.api.messaging.converters.messages._
 import org.bigbluebutton.api2.meeting.RegisterUser
 import org.bigbluebutton.common2.domain.{DefaultProps, PageVO, PresentationVO}
 import org.bigbluebutton.common2.msgs._
@@ -143,4 +143,31 @@ object MsgBuilder {
     val req = PresentationPageCountErrorSysPubMsg(header, body)
     BbbCommonEnvCoreMsg(envelope, req)
   }
+
+  def buildPublishedRecordingSysMsg(msg: PublishedRecordingMessage): BbbCommonEnvCoreMsg = {
+    val routing = collection.immutable.HashMap("sender" -> "bbb-web")
+    val envelope = BbbCoreEnvelope(PublishedRecordingSysMsg.NAME, routing)
+    val header = BbbCoreBaseHeader(PublishedRecordingSysMsg.NAME)
+    val body = PublishedRecordingSysMsgBody(msg.recordId)
+    val req = PublishedRecordingSysMsg(header, body)
+    BbbCommonEnvCoreMsg(envelope, req)
+  }
+
+  def buildUnpublishedRecordingSysMsg(msg: UnpublishedRecordingMessage): BbbCommonEnvCoreMsg = {
+    val routing = collection.immutable.HashMap("sender" -> "bbb-web")
+    val envelope = BbbCoreEnvelope(UnpublishedRecordingSysMsg.NAME, routing)
+    val header = BbbCoreBaseHeader(UnpublishedRecordingSysMsg.NAME)
+    val body = UnpublishedRecordingSysMsgBody(msg.recordId)
+    val req = UnpublishedRecordingSysMsg(header, body)
+    BbbCommonEnvCoreMsg(envelope, req)
+  }
+
+  def buildDeletedRecordingSysMsg(msg: DeletedRecordingMessage): BbbCommonEnvCoreMsg = {
+    val routing = collection.immutable.HashMap("sender" -> "bbb-web")
+    val envelope = BbbCoreEnvelope(DeletedRecordingSysMsg.NAME, routing)
+    val header = BbbCoreBaseHeader(DeletedRecordingSysMsg.NAME)
+    val body = DeletedRecordingSysMsgBody(msg.recordId)
+    val req = DeletedRecordingSysMsg(header, body)
+    BbbCommonEnvCoreMsg(envelope, req)
+  }
 }
diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala
index e57516da9293fcb05f81a933154189efa5faeb8f..e81e0c743cc78f94fb082ce485834e9ca4e1dbe7 100755
--- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala
+++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala
@@ -42,7 +42,8 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper {
     }
   }
 
-  def saveRecordingMetadata(xml: File, metadata: RecordingMetadata): Unit = {
+  def saveRecordingMetadata(xml: File, metadata: RecordingMetadata): Boolean = {
+    var result = false
     try {
       val Encoding = StandardCharsets.UTF_8.name()
       val pp = new PrettyPrinter(80, 2)
@@ -52,6 +53,7 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper {
       try {
         writer.write("<?xml version='1.0' encoding='" + Encoding + "'?>\n")
         writer.write(pp.format(metadata.getRecMeta.toMetadataXml()))
+        result = true
       } catch {
         case ex: Exception =>
           logger.info("Exception while saving {}", xml.getAbsolutePath)
@@ -66,6 +68,7 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper {
         logger.info("Exception while saving {}", xml.getAbsolutePath)
         logger.info("Exception details: {}", ex.fillInStackTrace())
     }
+    result
   }
 
   def getRecordingMetadata(xml: File): Option[RecordingMetadata] = {