Index: programs/mythbackend/housekeeper.h
===================================================================
--- programs/mythbackend/housekeeper.h	(revision 11395)
+++ programs/mythbackend/housekeeper.h	(working copy)
@@ -34,6 +34,7 @@
     void runFillDatabase();
     void CleanupMyOldRecordings(void);
     void CleanupAllOldInUsePrograms(void);
+    void CleanupRecordedTables(void);
     bool threadrunning;
     bool filldbRunning;
     bool isMaster;
Index: programs/mythbackend/housekeeper.cpp
===================================================================
--- programs/mythbackend/housekeeper.cpp	(revision 11395)
+++ programs/mythbackend/housekeeper.cpp	(working copy)
@@ -221,16 +221,11 @@
                 }
             }
 
-            if (wantToRun("JobQueueCleanup", 1, 0, 24))
-            {
+            if (wantToRun("DailyCleanup", 1, 0, 24)) {
                 JobQueue::CleanupOldJobsInQueue();
-                updateLastrun("JobQueueCleanup");
-            }
-
-            if (wantToRun("InUseProgramsCleanup", 1, 0, 24))
-            {
                 CleanupAllOldInUsePrograms();
-                updateLastrun("InUseProgramsCleanup");
+                CleanupRecordedTables();
+                updateLastrun("DailyCleanup");
             }
         }
 
@@ -331,6 +326,39 @@
     query.exec();
 }
 
+void HouseKeeper::CleanupRecordedTables(void)
+{
+    QString table[] = { "recordedprogram", "recordedrating",
+                        "recordedcredits" };
+    MSqlQuery query(MSqlQuery::InitCon());
+    MSqlQuery deleteQuery(MSqlQuery::InitCon());
+
+    for (int tableIndex = 0; tableIndex < 3; tableIndex++)
+    {
+        query.prepare(QString("SELECT DISTINCT p.chanid, p.starttime "
+                              "FROM %1 p LEFT JOIN recorded r "
+                              "ON p.chanid = r.chanid "
+                              "AND p.starttime = r.progstart "
+                              "WHERE r.chanid IS NULL;")
+                              .arg(table[tableIndex]));
+        if (!query.exec() || !query.isActive())
+        {
+            MythContext::DBError("HouseKeeper Cleaning Recorded Tables", query);
+            return;
+        }
+        deleteQuery.prepare(QString("DELETE FROM %1 "
+                                    "WHERE chanid = :CHANID "
+                                    "AND starttime = :STARTTIME;")
+                                    .arg(table[tableIndex]));
+        while (query.next())
+        {
+            deleteQuery.bindValue(":CHANID", query.value(0).toString());
+            deleteQuery.bindValue(":STARTTIME", query.value(1).toString());
+            deleteQuery.exec();
+        }
+    }
+}
+
 void *HouseKeeper::doHouseKeepingThread(void *param)
 {
     HouseKeeper *hkeeper = (HouseKeeper*)param;
Index: programs/mythfilldatabase/filldata.cpp
===================================================================
--- programs/mythfilldatabase/filldata.cpp	(revision 11395)
+++ programs/mythfilldatabase/filldata.cpp	(working copy)
@@ -2782,24 +2782,6 @@
     query.bindValue(":OFFSET", offset);
     query.exec();
 
-    query.prepare("DELETE p FROM recordedprogram p "
-                  "LEFT JOIN recorded r ON "
-                  "  p.chanid = r.chanid AND p.starttime = r.progstart "
-                  "WHERE r.chanid IS NULL;");
-    query.exec();
-
-    query.prepare("DELETE p FROM recordedrating p "
-                  "LEFT JOIN recorded r ON "
-                  "  p.chanid = r.chanid AND p.starttime = r.progstart "
-                  "WHERE r.chanid IS NULL;");
-    query.exec();
-
-    query.prepare("DELETE p FROM recordedcredits p "
-                  "LEFT JOIN recorded r ON "
-                  "  p.chanid = r.chanid AND p.starttime = r.progstart "
-                  "WHERE r.chanid IS NULL;");
-    query.exec();
-
     query.prepare("DELETE FROM record WHERE (type = :SINGLE "
                   "OR type = :OVERRIDE OR type = :DONTRECORD) "
                   "AND enddate < NOW();");
