diff --git a/mythtv/libs/libmythtv/eitscanner.cpp b/mythtv/libs/libmythtv/eitscanner.cpp
index 677feddab8..e707600365 100644
--- a/mythtv/libs/libmythtv/eitscanner.cpp
+++ b/mythtv/libs/libmythtv/eitscanner.cpp
@@ -283,18 +283,30 @@ void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source)
 
 void EITScanner::StopActiveScan(void)
 {
+    LOG(VB_EIT, LOG_INFO,
+        LOC_ID + QString("##StopActiveScan() entering"));
     QMutexLocker locker(&lock);
+    LOG(VB_EIT, LOG_INFO,
+        LOC_ID + QString("##StopActiveScan() locked"));
 
     activeScanStopped = false;
     activeScan = false;
     exitThreadCond.wakeAll();
+    LOG(VB_EIT, LOG_INFO,
+        LOC_ID + QString("##StopActiveScan() woke all"));
 
     locker.unlock();
+    LOG(VB_EIT, LOG_INFO,
+        LOC_ID + QString("##StopActiveScan() unlocked"));
     StopPassiveScan();
     locker.relock();
+    LOG(VB_EIT, LOG_INFO,
+        LOC_ID + QString("##StopActiveScan() relocked"));
 
     while (!activeScan && !activeScanStopped)
         activeScanCond.wait(&lock, 100);
 
+    LOG(VB_EIT, LOG_INFO,
+        LOC_ID + QString("##StopActiveScan() finished"));
     rec = NULL;
 }
diff --git a/mythtv/libs/libmythtv/recorders/dvbchannel.cpp b/mythtv/libs/libmythtv/recorders/dvbchannel.cpp
index dbdf7adc11..2215c0ecff 100644
--- a/mythtv/libs/libmythtv/recorders/dvbchannel.cpp
+++ b/mythtv/libs/libmythtv/recorders/dvbchannel.cpp
@@ -145,11 +145,14 @@ DVBChannel::~DVBChannel()
 
 void DVBChannel::Close(DVBChannel *who)
 {
-    LOG(VB_CHANNEL, LOG_INFO, LOC + "Closing DVB channel");
+    LOG(VB_CHANNEL, LOG_INFO, LOC + "##Closing DVB channel");
 
     IsOpenMap::iterator it = is_open.find(who);
     if (it == is_open.end())
+    {
+        LOG(VB_CHANNEL, LOG_INFO, LOC + "  ##Not open");
         return; // this caller didn't have it open in the first place..
+    }
 
     is_open.erase(it);
 
@@ -163,12 +166,16 @@ void DVBChannel::Close(DVBChannel *who)
         master->Close(this);
         fd_frontend = -1;
         ReturnMasterLock(master);
+        LOG(VB_CHANNEL, LOG_INFO, LOC + "  ##master->Close9) succeeded");
         return;
     }
     ReturnMasterLock(master); // if we're the master we don't need this lock..
 
     if (!is_open.empty())
+    {
+        LOG(VB_CHANNEL, LOG_INFO, LOC + "  ##still has other callers");
         return; // not all callers have closed the DVB channel yet..
+    }
 
     if (diseqc_tree)
         diseqc_tree->Close();
@@ -180,22 +187,27 @@ void DVBChannel::Close(DVBChannel *who)
 
         dvbcam->Stop();
     }
+    LOG(VB_CHANNEL, LOG_INFO, LOC + "##Succeeded");
 }
 
 bool DVBChannel::Open(DVBChannel *who)
 {
-    LOG(VB_CHANNEL, LOG_INFO, LOC + "Opening DVB channel");
+    LOG(VB_CHANNEL, LOG_INFO, LOC + "##Opening DVB channel");
 
     if (!m_inputid)
     {
         if (!InitializeInput())
+        {
+            LOG(VB_CHANNEL, LOG_INFO, LOC + "  ##InitializeInput() failed");
             return false;
+        }
     }
 
     QMutexLocker locker(&hw_lock);
 
     if (fd_frontend >= 0)
     {
+        LOG(VB_CHANNEL, LOG_INFO, LOC + "  ##fd_frontend already set");
         is_open[who] = true;
         return true;
     }
@@ -205,6 +217,7 @@ bool DVBChannel::Open(DVBChannel *who)
     {
         if (!master->Open(who))
         {
+            LOG(VB_CHANNEL, LOG_INFO, LOC + "  ##master->Open() failed");
             ReturnMasterLock(master);
             return false;
         }
@@ -223,11 +236,13 @@ bool DVBChannel::Open(DVBChannel *who)
 
         if (!InitializeInput())
         {
+            LOG(VB_CHANNEL, LOG_INFO, LOC + "  ##InitializeInput2() failed");
             Close();
             ReturnMasterLock(master);
             return false;
         }
 
+        LOG(VB_CHANNEL, LOG_INFO, LOC + "  ##InitializeInput2() succedded");
         ReturnMasterLock(master);
         return true;
     }
@@ -242,11 +257,11 @@ bool DVBChannel::Open(DVBChannel *who)
         if (fd_frontend >= 0)
             break;
         LOG(VB_GENERAL, LOG_WARNING, LOC +
-            "Opening DVB frontend device failed." + ENO);
+            "  ##Opening DVB frontend device failed." + ENO);
         if (tries >= 20 || (errno != EBUSY && errno != EAGAIN))
         {
             LOG(VB_GENERAL, LOG_ERR, LOC +
-                QString("Failed to open DVB frontend device due to "
+                QString("  ##Failed to open DVB frontend device due to "
                         "fatal error or too many attempts."));
             return false;
         }
@@ -258,7 +273,7 @@ bool DVBChannel::Open(DVBChannel *who)
     if (ioctl(fd_frontend, FE_GET_INFO, &info) < 0)
     {
         LOG(VB_GENERAL, LOG_ERR, LOC +
-            "Failed to get frontend information." + ENO);
+            "  ##Failed to get frontend information." + ENO);
 
         close(fd_frontend);
         fd_frontend = -1;
@@ -312,6 +327,7 @@ bool DVBChannel::Open(DVBChannel *who)
 
     if (!InitializeInput())
     {
+        LOG(VB_CHANNEL, LOG_INFO, LOC + "  ##InitializeInput3() failed");
         Close();
         return false;
     }
@@ -319,6 +335,7 @@ bool DVBChannel::Open(DVBChannel *who)
     if (fd_frontend >= 0)
         is_open[who] = true;
 
+    LOG(VB_CHANNEL, LOG_INFO, LOC + "##Succedded");
     return (fd_frontend >= 0);
 }
 
diff --git a/mythtv/libs/libmythtv/tv_rec.cpp b/mythtv/libs/libmythtv/tv_rec.cpp
index ecb43af392..5681aa2ec5 100644
--- a/mythtv/libs/libmythtv/tv_rec.cpp
+++ b/mythtv/libs/libmythtv/tv_rec.cpp
@@ -1460,7 +1460,7 @@ void TVRec::run(void)
                     CardUtil::GetConflictingInputs(inputid);
                 InputInfo busy_input;
                 for (uint i = 0; i < inputids.size() && allow_eit; ++i)
-                    allow_eit = !RemoteIsBusy(inputids[i], busy_input);
+                    allow_eit = !RemoteIsBusy(inputids[i], busy_input, 630);
                 if (allow_eit)
                 {
                     scanner->StartActiveScan(this, eitTransportTimeout);
@@ -1471,7 +1471,7 @@ void TVRec::run(void)
                 else
                 {
                     LOG(VB_CHANNEL, LOG_INFO, LOC + QString(
-                            "Postponing EIT scan on input %1 "
+                            "##Postponing EIT scan on input %1 "
                             "because input %2 is busy")
                         .arg(inputid).arg(busy_input.inputid));
                     eitScanStartTime = eitScanStartTime.addSecs(300);
@@ -1570,6 +1570,22 @@ void TVRec::HandlePendingRecordings(void)
     if (pendingRecordings.empty())
         return;
 
+    // Make sure EIT scan is stopped so it does't interfere
+    if (scanner && HasFlags(kFlagEITScannerRunning))
+    {
+        LOG(VB_CHANNEL, LOG_INFO, LOC + "##Stopping active EIT scan for pending recording.");
+
+        scanner->StopActiveScan();
+        ClearFlags(kFlagEITScannerRunning, __FILE__, __LINE__);
+        LOG(VB_CHANNEL, LOG_INFO, LOC + "##Stopped active EIT scan for pending recording.");
+
+        CloseChannel();
+
+        eitScanStartTime = MythDate::current();
+        eitScanStartTime = eitScanStartTime.addSecs(
+            eitCrawlIdleStart + 30 + eit_start_rand(inputid, eitTransportTimeout));
+    }
+
     // If we have a pending recording and AskAllowRecording
     // or DoNotAskAllowRecording is set and the frontend is
     // ready send an ASK_RECORDING query to frontend.
diff --git a/mythtv/libs/libmythtv/tvremoteutil.cpp b/mythtv/libs/libmythtv/tvremoteutil.cpp
index 9796750512..780dff06e2 100644
--- a/mythtv/libs/libmythtv/tvremoteutil.cpp
+++ b/mythtv/libs/libmythtv/tvremoteutil.cpp
@@ -356,7 +356,7 @@ RemoteEncoder *RemoteGetExistingRecorder(int recordernum)
     return new RemoteEncoder(recordernum, hostname, port);
 }
 
-bool RemoteIsBusy(uint inputid, InputInfo &busy_input)
+bool RemoteIsBusy(uint inputid, InputInfo &busy_input, int time_buffer)
 {
 #if 0
     LOG(VB_GENERAL, LOG_DEBUG, QString("RemoteIsBusy(%1) %2")
@@ -369,11 +369,12 @@ bool RemoteIsBusy(uint inputid, InputInfo &busy_input)
     {
         const TVRec *rec = TVRec::GetTVRec(inputid);
         if (rec)
-            return rec->IsBusy(&busy_input);
+            return rec->IsBusy(&busy_input, time_buffer);
     }
 
     QStringList strlist(QString("QUERY_REMOTEENCODER %1").arg(inputid));
     strlist << "IS_BUSY";
+    strlist << QString::number(time_buffer);
     if (!gCoreContext->SendReceiveStringList(strlist) || strlist.empty())
         return true;
 
diff --git a/mythtv/libs/libmythtv/tvremoteutil.h b/mythtv/libs/libmythtv/tvremoteutil.h
index 26086231fe..bb1a5d99b1 100644
--- a/mythtv/libs/libmythtv/tvremoteutil.h
+++ b/mythtv/libs/libmythtv/tvremoteutil.h
@@ -47,7 +47,8 @@ MTV_PUBLIC vector<uint>
 RemoteRequestFreeRecorderList(uint excluded_input);
 MTV_PUBLIC vector<uint>
 RemoteRequestFreeInputList(uint excluded_input);
-MTV_PUBLIC bool RemoteIsBusy(uint inputid, InputInfo &busy_input);
+MTV_PUBLIC bool RemoteIsBusy(uint inputid, InputInfo &busy_input,
+                             int time_buffer = 5);
 
 MTV_PUBLIC bool RemoteGetRecordingStatus(
     vector<TunerStatus> *tunerList = NULL, bool list_inactive = false);
