diff --git a/mythtv/programs/mythbackend/mainserver.cpp b/mythtv/programs/mythbackend/mainserver.cpp
index 1273b98..f54c22e 100644
--- a/mythtv/programs/mythbackend/mainserver.cpp
+++ b/mythtv/programs/mythbackend/mainserver.cpp
@@ -1010,6 +1010,9 @@ void MainServer::customEvent(QEvent *e)
         if (me->Message() == "LOCAL_RECONNECT_TO_MASTER")
             masterServerReconnect->start(kMasterServerReconnectTimeout);
 
+        if (me->Message() == "LOCAL_SLAVE_BACKEND_ENCODERS_OFFLINE")
+            HandleSlaveDisconnectedEvent(*me);
+
         if (me->Message().left(6) == "LOCAL_")
             return;
 
@@ -5464,7 +5467,7 @@ void MainServer::connectionClosed(MythSocket *socket)
         }
         else if (sock == socket)
         {
-            list<uint> disconnectedSlaves;
+            list<uint> offlineEncoderIDs;
             bool needsReschedule = false;
 
             if (ismaster && pbs->isSlaveBackend())
@@ -5483,7 +5486,7 @@ void MainServer::connectionClosed(MythSocket *socket)
                             isFallingAsleep = false;
 
                         elink->SetSocket(NULL);
-                        if (m_sched) disconnectedSlaves.push_back(elink->GetCardID());
+                        if (m_sched) offlineEncoderIDs.push_back(elink->GetCardID());
                     }
                 }
                 if (m_sched && !isFallingAsleep)
@@ -5541,13 +5544,7 @@ void MainServer::connectionClosed(MythSocket *socket)
                 VERBOSE(VB_IMPORTANT, "Playback sock still exists?");
 
             sockListLock.unlock();
-            for (list<uint>::iterator p = disconnectedSlaves.begin() ;
-                p != disconnectedSlaves.end() ; p++) {
-              if (m_sched) m_sched->SlaveDisconnected(*p);
-            }
-
-            if (m_sched && needsReschedule)
-                m_sched->Reschedule(0);
+            SendSlaveDisconnectedEvent(offlineEncoderIDs, needsReschedule);
 
             pbs->DownRef();
             return;
@@ -5966,4 +5963,32 @@ void MainServer::ShutSlaveBackendsDown(QString &haltcmd)
     sockListLock.unlock();
 }
 
+void MainServer::HandleSlaveDisconnectedEvent(const MythEvent& event)
+{
+    if (event.ExtraDataCount() > 0 && m_sched)
+    {
+        bool needsReschedule = event.ExtraData(0).toUInt();
+        for (int i = 1; i < event.ExtraDataCount(); i++)
+            m_sched->SlaveDisconnected(event.ExtraData(i).toUInt());
+
+        if (needsReschedule)
+            m_sched->Reschedule(0);
+    }
+}
+
+void MainServer::SendSlaveDisconnectedEvent(const list<uint>& offlineEncoderIDs, bool needsReschedule)
+{
+    QStringList reschedAndOfflineEncoderIDs;
+    reschedAndOfflineEncoderIDs << QString::number(static_cast<uint>(needsReschedule));
+
+    list<uint>::const_iterator it;
+    for (it = offlineEncoderIDs.begin(); it != offlineEncoderIDs.end(); ++it)
+    {
+        reschedAndOfflineEncoderIDs << QString::number(*it);
+    }
+
+    MythEvent me("LOCAL_SLAVE_BACKEND_ENCODERS_OFFLINE", reschedAndOfflineEncoderIDs);
+    gCoreContext->dispatch(me);
+}
+
 /* vim: set expandtab tabstop=4 shiftwidth=4: */
diff --git a/mythtv/programs/mythbackend/mainserver.h b/mythtv/programs/mythbackend/mainserver.h
index 66e9c5b..eb145e3 100644
--- a/mythtv/programs/mythbackend/mainserver.h
+++ b/mythtv/programs/mythbackend/mainserver.h
@@ -212,6 +212,8 @@ class MainServer : public QObject, public MythSocketCBs
     void HandleQueryTimeZone(PlaybackSock *pbs);
     void HandleBlockShutdown(bool blockShutdown, PlaybackSock *pbs);
     void HandleDownloadFile(const QStringList &command, PlaybackSock *pbs);
+    void HandleSlaveDisconnectedEvent(const MythEvent& event);
+    void SendSlaveDisconnectedEvent(const list<uint>& offlineEncoderIDs, bool needsReschedule);
 
     void SendResponse(MythSocket *pbs, QStringList &commands);
 
