Index: programs/mythbackend/housekeeper.cpp
===================================================================
--- programs/mythbackend/housekeeper.cpp	(revision 12835)
+++ programs/mythbackend/housekeeper.cpp	(working copy)
@@ -247,6 +247,7 @@
             if (wantToRun("DailyCleanup", 1, 0, 24)) {
                 JobQueue::CleanupOldJobsInQueue();
                 CleanupAllOldInUsePrograms();
+                CleanupOldLivetvChains();
                 CleanupRecordedTables();
                 CleanupProgramListings();
                 updateLastrun("DailyCleanup");
@@ -353,6 +354,41 @@
     query.exec();
 }
 
+void HouseKeeper::CleanupOldLivetvChains(void)
+{
+    QDateTime fourHoursAgo = QDateTime::currentDateTime().addSecs(-4 * 60 * 60);
+    MSqlQuery query(MSqlQuery::InitCon());
+    MSqlQuery deleteQuery(MSqlQuery::InitCon());
+
+    // Keep these tvchains, they may be in use.
+    query.prepare("SELECT DISTINCT chainid FROM tvchain "
+                  "WHERE endtime > :FOURHOURSAGO ;");
+    query.bindValue(":FOURHOURSAGO", fourHoursAgo);
+
+    if (!query.exec() || !query.isActive())
+    {
+        MythContext::DBError("HouseKeeper Cleaning TVChain Table", query);
+        return;
+    }
+
+    QString msg, keepChains = "";
+    while (query.next())
+        keepChains += "'" + query.value(0).toString() + "',";
+ 
+    if (keepChains.isEmpty())
+        msg = "DELETE FROM tvchain WHERE endtime < now();";
+    else
+    {
+        keepChains = keepChains.left(keepChains.length() - 1);
+        msg = QString("DELETE FROM tvchain "
+                      "WHERE chainid NOT IN ( %1 ) "
+                      "AND endtime < now();")
+                      .arg(keepChains.ascii());
+    }
+    deleteQuery.prepare(msg);
+    deleteQuery.exec();
+}
+
 void HouseKeeper::CleanupRecordedTables(void)
 {
     MSqlQuery query(MSqlQuery::InitCon());
Index: programs/mythbackend/housekeeper.h
===================================================================
--- programs/mythbackend/housekeeper.h	(revision 12835)
+++ programs/mythbackend/housekeeper.h	(working copy)
@@ -34,6 +34,7 @@
     void runFillDatabase();
     void CleanupMyOldRecordings(void);
     void CleanupAllOldInUsePrograms(void);
+    void CleanupOldLivetvChains(void);
     void CleanupRecordedTables(void);
     void CleanupProgramListings(void);
     void RunStartupTasks(void);
