diff --git a/mythtv/libs/libmythtv/tv_rec.cpp b/mythtv/libs/libmythtv/tv_rec.cpp
index 2ecbd5b..bf4ed21 100644
--- a/mythtv/libs/libmythtv/tv_rec.cpp
+++ b/mythtv/libs/libmythtv/tv_rec.cpp
@@ -107,7 +107,7 @@ TVRec::TVRec(int capturecardnum)
       switchingBuffer(false),
       m_recStatus(rsUnknown),
       // Current recording info
-      curRecording(NULL), autoRunJobs(JOB_NONE),
+      curRecording(NULL),
       overrecordseconds(0),
       // Pseudo LiveTV recording
       pseudoLiveTVRecording(NULL),
@@ -916,7 +916,7 @@ void TVRec::FinishedRecording(RecordingInfo *curRec, RecordingQuality *recq)
     curRec->FinishedRecording(!is_good || (recgrp == "LiveTV"));
 
     // send out REC_FINISHED message
-    SendMythSystemRecEvent("REC_FINISHED", curRecording);
+    SendMythSystemRecEvent("REC_FINISHED", curRec);
 
     // send out DONE_RECORDING message
     int secsSince = curRec->GetRecordingStartTime()
@@ -927,18 +927,29 @@ void TVRec::FinishedRecording(RecordingInfo *curRec, RecordingQuality *recq)
     gCoreContext->dispatch(me);
 
     // Handle JobQueue
+    QHash<QString,int>::iterator autoJob =
+        autoRunJobs.find(curRec->MakeUniqueKey());
+    if (autoJob == autoRunJobs.end())
+    {
+        AutoRunInitType t =
+            (recgrp == "LiveTV") ? kAutoRunNone : kAutoRunProfile;
+        InitAutoRunJobs(curRec, t, NULL, __LINE__);
+        autoJob = autoRunJobs.find(curRec->MakeUniqueKey());
+    }
+    LOG(VB_GENERAL, LOG_INFO, QString("AutoRunJobs 0x%1")
+        .arg(*autoJob,0,16));
+
     if ((recgrp == "LiveTV") || (fsize < 1000) ||
         (curRec->GetRecordingStatus() != rsRecorded) ||
         (curRec->GetRecordingStartTime().secsTo(
             QDateTime::currentDateTime()) < 120))
     {
-        JobQueue::RemoveJobsFromMask(JOB_COMMFLAG,  autoRunJobs);
-        JobQueue::RemoveJobsFromMask(JOB_TRANSCODE, autoRunJobs);
-    }
-    if (autoRunJobs)
-    {
-        JobQueue::QueueRecordingJobs(*curRec, autoRunJobs);
+        JobQueue::RemoveJobsFromMask(JOB_COMMFLAG,  *autoJob);
+        JobQueue::RemoveJobsFromMask(JOB_TRANSCODE, *autoJob);
     }
+    if (*autoJob != JOB_NONE)
+        JobQueue::QueueRecordingJobs(*curRec, *autoJob);
+    autoRunJobs.erase(autoJob);
 }
 
 #define TRANSITION(ASTATE,BSTATE) \
@@ -2692,6 +2703,31 @@ void TVRec::NotifySchedulerOfRecording(RecordingInfo *rec)
     ClearFlags(kFlagCancelNextRecording);
 }
 
+void TVRec::InitAutoRunJobs(RecordingInfo *rec, AutoRunInitType t,
+                            RecordingProfile *recpro, int line)
+{
+    if (kAutoRunProfile == t)
+    {
+        RecordingProfile profile;
+        if (!recpro)
+        {
+            load_profile(genOpt.cardtype, NULL, rec, profile);
+            recpro = &profile;
+        }
+        autoRunJobs[rec->MakeUniqueKey()] =
+            init_jobs(rec, *recpro, runJobOnHostOnly,
+                      transcodeFirst, earlyCommFlag);
+    }
+    else
+    {
+        autoRunJobs[rec->MakeUniqueKey()] = JOB_NONE;
+    }
+    LOG(VB_GENERAL, LOG_INFO,
+        QString("InitAutoRunJobs for %1, line %2 -> 0x%3")
+        .arg(rec->MakeUniqueKey()).arg(line)
+        .arg(autoRunJobs[rec->MakeUniqueKey()],0,16));
+}
+
 /** \fn TVRec::SetLiveRecording(int)
  *  \brief Tells the Scheduler about changes to the recording status
  *         of the LiveTV recording.
@@ -2720,7 +2756,7 @@ void TVRec::SetLiveRecording(int recording)
         // cancel -- 'recording' should be 0 or -1
         SetFlags(kFlagCancelNextRecording);
         curRecording->SetRecordingGroup("LiveTV");
-        autoRunJobs = JOB_NONE;
+        InitAutoRunJobs(curRecording, kAutoRunNone, NULL, __LINE__);
     }
     else if (!was_rec && pseudoLiveTVRecording)
     {
@@ -2734,11 +2770,7 @@ void TVRec::SetLiveRecording(int recording)
         NotifySchedulerOfRecording(curRecording);
         recstat = curRecording->GetRecordingStatus();
         curRecording->SetRecordingGroup("Default");
-
-        RecordingProfile profile;
-        load_profile(genOpt.cardtype, NULL, curRecording, profile);
-        autoRunJobs = init_jobs(curRecording, profile, runJobOnHostOnly,
-                                transcodeFirst, earlyCommFlag);
+        InitAutoRunJobs(curRecording, kAutoRunProfile, NULL, __LINE__);
     }
 
     MythEvent me(QString("UPDATE_RECORDING_STATUS %1 %2 %3 %4 %5")
@@ -4073,9 +4105,8 @@ void TVRec::TuningNewRecorder(MPEGStreamData *streamData)
 
     SetFlags(kFlagRecorderRunning | kFlagRingBufferReady);
 
-    if (!tvchain)
-        autoRunJobs = init_jobs(rec, profile, runJobOnHostOnly,
-                                transcodeFirst, earlyCommFlag);
+    InitAutoRunJobs(rec, (tvchain) ? kAutoRunNone : kAutoRunProfile,
+                    &profile, __LINE__);
 
     ClearFlags(kFlagNeedToStartRecorder);
     return;
@@ -4147,11 +4178,7 @@ void TVRec::TuningRestartRecorder(void)
         curRecording->ApplyRecordRecGroupChange(
             curRecording->GetRecordingRule()->m_recGroup);
 
-        RecordingProfile profile;
-        QString profileName = load_profile(genOpt.cardtype, NULL,
-                                           curRecording, profile);
-        autoRunJobs = init_jobs(curRecording, profile, runJobOnHostOnly,
-                                transcodeFirst, earlyCommFlag);
+        InitAutoRunJobs(curRecording, kAutoRunProfile, NULL, __LINE__);
     }
 
     ClearFlags(kFlagNeedToStartRecorder);
diff --git a/mythtv/libs/libmythtv/tv_rec.h b/mythtv/libs/libmythtv/tv_rec.h
index ce54bff..576ed0f 100644
--- a/mythtv/libs/libmythtv/tv_rec.h
+++ b/mythtv/libs/libmythtv/tv_rec.h
@@ -312,6 +312,9 @@ class MTV_PUBLIC TVRec : public SignalMonitorListener, public QRunnable
     QDateTime GetRecordEndTime(const ProgramInfo*) const;
     void CheckForRecGroupChange(void);
     void NotifySchedulerOfRecording(RecordingInfo*);
+    typedef enum { kAutoRunProfile, kAutoRunNone, } AutoRunInitType;
+    void InitAutoRunJobs(RecordingInfo*, AutoRunInitType,
+                         RecordingProfile *, int line);
 
     void SetRecordingStatus(
         RecStatusType new_status, int line, bool have_lock = false);
@@ -372,7 +375,7 @@ class MTV_PUBLIC TVRec : public SignalMonitorListener, public QRunnable
     // Current recording info
     RecordingInfo *curRecording;
     QDateTime    recordEndTime;
-    int          autoRunJobs;
+    QHash<QString,int> autoRunJobs; // RecordingInfo->MakeUniqueKey()->autoRun
     int          overrecordseconds;
 
     // Pending recording info
