Index: libs/libmythtv/dbcheck.cpp
===================================================================
--- libs/libmythtv/dbcheck.cpp	(revision 9658)
+++ libs/libmythtv/dbcheck.cpp	(working copy)
@@ -10,7 +10,7 @@
 #include "mythdbcon.h"
 
 /// This is the DB schema version expected by the running MythTV instance.
-const QString currentDatabaseVersion = "1135";
+const QString currentDatabaseVersion = "1136";
 
 static bool UpdateDBVersionNumber(const QString &newnumber);
 static bool performActualUpdate(const QString updates[], QString version,
@@ -2180,6 +2180,17 @@
             return false;
     }
 
+    if (dbver == "1135")
+    {
+        const QString updates[] = {
+"ALTER TABLE recorded ADD COLUMN parentid int(11) NOT NULL DEFAULT 0;",
+""
+};
+
+        if (!performActualUpdate(updates, "1136", dbver))
+            return false;
+    }
+
 //"ALTER TABLE capturecard DROP COLUMN dvb_recordts;" in 0.21
 //"ALTER TABLE capturecard DROP COLUMN dvb_hw_decoder;" in 0.21
 //"ALTER TABLE cardinput DROP COLUMN  preference;" in 0.22
Index: libs/libmythtv/tv_rec.cpp
===================================================================
--- libs/libmythtv/tv_rec.cpp	(revision 9658)
+++ libs/libmythtv/tv_rec.cpp	(working copy)
@@ -442,6 +442,7 @@
         curRecording->rectype  = rcinfo->rectype;
         curRecording->recordid = rcinfo->recordid;
         curRecording->recendts = rcinfo->recendts;
+        curRecording->parentid = rcinfo->parentid;
         curRecording->UpdateRecordingEnd();
         MythEvent me("RECORDING_LIST_CHANGE");
         gContext->dispatch(me);
Index: libs/libmythtv/programinfo.cpp
===================================================================
--- libs/libmythtv/programinfo.cpp	(revision 9658)
+++ libs/libmythtv/programinfo.cpp	(working copy)
@@ -1019,9 +1019,11 @@
     }
 
     query.prepare("UPDATE recorded "
-                  "SET recordid = :RECID "
+                  "SET recordid = :RECID, "
+                  "    parentid = :PARENTID "
                   "WHERE chanid = :CHANID AND starttime = :START");
     query.bindValue(":RECID",  getRecordID());
+    query.bindValue(":PARENTID", parentid);
     query.bindValue(":CHANID", chanid);
     query.bindValue(":START",  recstartts);
 
@@ -1506,7 +1508,7 @@
         "    programid, stars,       previouslyshown, originalairdate,  "
         "    findid,    transcoder,  playgroup,       recpriority,      "
         "    basename,  progstart,   progend,         profile,          "
-        "    duplicate) "
+        "    duplicate, parentid) "
         "VALUES"
         "  (:CHANID,   :STARTS,     :ENDS,           :TITLE,            "
         "   :SUBTITLE, :DESC,       :HOSTNAME,       :CATEGORY,         "
@@ -1514,7 +1516,7 @@
         "   :PROGRAMID,:STARS,      :REPEAT,         :ORIGAIRDATE,      "
         "   :FINDID,   :TRANSCODER, :PLAYGROUP,      :RECPRIORITY,      "
         "   :BASENAME, :PROGSTART,  :PROGEND,        :PROFILE,          "
-        "   0) "
+        "   0,         :PARENTID) "
         );
 
     query.bindValue(":CHANID",      pg->chanid);
@@ -1541,7 +1543,7 @@
     query.bindValue(":PROGSTART",   pg->startts);
     query.bindValue(":PROGEND",     pg->endts);
     query.bindValue(":PROFILE",     schd->getProfileName());
-
+    query.bindValue(":PARENTID",    pg->parentid);
     bool ok = query.exec() && (query.numRowsAffected() > 0);
     if (!ok && !query.isActive())
         MythContext::DBError("insert_program -- insert", query);
@@ -1586,11 +1588,13 @@
 {
     MSqlQuery query(MSqlQuery::InitCon());
     query.prepare("UPDATE recorded SET endtime = :ENDTIME, "
-                  "    recordid = :RECORDID "
+                  "    recordid = :RECORDID, "
+                  "    parentid = :PARENTID "
                   "WHERE chanid = :CHANID AND "
                   "    starttime = :STARTTIME ");
     query.bindValue(":ENDTIME", recendts);
     query.bindValue(":RECORDID", recordid);
+    query.bindValue(":PARENTID", parentid);
     query.bindValue(":CHANID", chanid);
     query.bindValue(":STARTTIME", recstartts);
 
Index: programs/mythbackend/scheduler.cpp
===================================================================
--- programs/mythbackend/scheduler.cpp	(revision 9658)
+++ programs/mythbackend/scheduler.cpp	(working copy)
@@ -474,11 +474,13 @@
 {
     RecordingType oldrectype = oldp->rectype;
     int oldrecordid = oldp->recordid;
+    int oldparentid = oldp->parentid;
     QDateTime oldrecendts = oldp->recendts;
 
     oldp->rectype = newp->rectype;
     oldp->recordid = newp->recordid;
     oldp->recendts = newp->recendts;
+    oldp->parentid = newp->parentid;
 
     if (specsched)
     {
@@ -501,6 +503,7 @@
         oldp->rectype = oldrectype;
         oldp->recordid = oldrecordid;
         oldp->recendts = oldrecendts;
+        oldp->parentid = oldparentid;
     }
     return rs == rsRecording;
 }
@@ -1959,8 +1962,8 @@
             MSqlQuery epicnt(dbConn);
 
             epicnt.prepare("SELECT count(*) FROM recorded "
-                           "WHERE title = :TITLE AND duplicate <> 0;");
-            epicnt.bindValue(":TITLE", qtitle.utf8());
+                           "WHERE (recordid = :RECID OR parentid = :RECID) AND duplicate <> 0;");
+            epicnt.bindValue(":RECID", recid);
 
             epicnt.exec();
 
Index: programs/mythbackend/autoexpire.cpp
===================================================================
--- programs/mythbackend/autoexpire.cpp	(revision 9658)
+++ programs/mythbackend/autoexpire.cpp	(working copy)
@@ -523,7 +523,8 @@
     {
         query.prepare("SELECT chanid, starttime, title, progstart, progend, filesize "
                       "FROM recorded "
-                      "WHERE recordid = :RECID AND preserve = 0 "
+                      "WHERE (recordid = :RECID OR parentid = :RECID) "
+                      "AND preserve = 0 "
                       "AND recgroup <> 'LiveTV' "
                       "ORDER BY starttime DESC;");
         query.bindValue(":RECID", maxIter.key());
