diff --git a/mythtv/libs/libmythtv/tv_rec.cpp b/mythtv/libs/libmythtv/tv_rec.cpp
index 9c538f6a1e..b27b815cdb 100644
--- a/mythtv/libs/libmythtv/tv_rec.cpp
+++ b/mythtv/libs/libmythtv/tv_rec.cpp
@@ -998,6 +998,7 @@ void TVRec::FinishedRecording(RecordingInfo *curRec, RecordingQuality *recq)
  *   to the kState_None state, as this is used to shutdown TV in RunTV.
  *
  */
+
 void TVRec::HandleStateChange(void)
 {
     TVState nextState = m_internalState;
@@ -1030,23 +1031,26 @@ void TVRec::HandleStateChange(void)
     if (TRANSITION(kState_None, kState_WatchingLiveTV))
     {
         m_tuningRequests.enqueue(TuningRequest(kFlagLiveTV));
+        SetEITScanPaused();         // KdW test -- #11018
         SET_NEXT();
     }
     else if (TRANSITION(kState_WatchingLiveTV, kState_None))
     {
         m_tuningRequests.enqueue(TuningRequest(kFlagKillRec|kFlagKillRingBuffer));
+        ClearEITScanPaused();       // KdW test -- #11018
         SET_NEXT();
     }
     else if (TRANSITION(kState_WatchingLiveTV, kState_RecordingOnly))
     {
         SetPseudoLiveTVRecording(nullptr);
-
+        SetEITScanPaused();         // KdW test -- #11018
         SET_NEXT();
     }
     else if (TRANSITION(kState_None, kState_RecordingOnly))
     {
         SetPseudoLiveTVRecording(nullptr);
         m_tuningRequests.enqueue(TuningRequest(kFlagRecording, m_curRecording));
+        SetEITScanPaused();         // KdW test -- #11018
         SET_NEXT();
     }
     else if (TRANSITION(kState_RecordingOnly, kState_None))
@@ -1054,6 +1058,7 @@ void TVRec::HandleStateChange(void)
         m_tuningRequests.enqueue(
             TuningRequest(kFlagCloseRec|kFlagKillRingBuffer|
                           (GetFlags()&kFlagKillRec)));
+        ClearEITScanPaused();       // KdW test -- #11018
         SET_NEXT();
     }
 
@@ -1174,6 +1179,10 @@ void TVRec::CloseChannel(void)
          CardUtil::IsV4L(m_genOpt.m_inputType)))
     {
         m_channel->Close();
+
+        // KdW test -- #11018
+        LOG(VB_GENERAL, LOG_INFO, LOC + QString("#11018 Close Card %1")
+            .arg(CardUtil::ProbeDVBFrontendName(CardUtil::GetVideoDevice(m_inputId))));
     }
 }
 
@@ -1265,6 +1274,79 @@ static int eit_start_rand(uint inputId, int eitTransportTimeout)
     return timeout;
 }
 
+// ============================================================================
+
+// KdW test -- #11018
+QMutex            TVRec::s_eitInputsLock;
+std::vector<uint> TVRec::s_eitInputs;
+
+// Add EIT scanning input to list
+//
+void TVRec::AddEITScanInput(void)
+{
+    QMutexLocker eitLock(&s_eitInputsLock);
+    s_eitInputs.push_back(m_inputId);
+    for (auto id : std::as_const(s_eitInputs))
+    {
+        LOG(VB_GENERAL, LOG_INFO, QString("KdW added %1  s_eitInputs:%2").arg(m_inputId).arg(id));
+    }
+}
+
+// Pause active EIT scanning on all other inputs
+//
+void TVRec::SetEITScanPaused(void)
+{
+    QMutexLocker eitLock(&s_eitInputsLock);
+    for (auto id : std::as_const(s_eitInputs))
+    {
+        if (id != m_inputId)
+        {
+            TVRec *rec = GetTVRec(id);
+            if (rec && !rec->HasFlags(kFlagEITScanPaused))
+            {
+                rec->SetFlags(kFlagEITScanPaused, __FILE__, __LINE__);
+            }
+        }
+    }
+}
+
+// Resume active EIT scanning on all other inputs
+//
+void TVRec::ClearEITScanPaused(void)
+{
+    m_eitScanStartTime = QDateTime::currentDateTime();
+    TVRec *arec = nullptr;
+    QMutexLocker eitLock(&s_eitInputsLock);
+    for (auto id : std::as_const(s_eitInputs))
+    {
+        if (id != m_inputId)
+        {
+            TVRec *rec = GetTVRec(id);
+            if (!HasFlags(kFlagEITScanPaused))
+            {
+                if (rec && rec->HasFlags(kFlagEITScanPaused))
+                {
+                    rec->m_eitScanStartTime = m_eitScanStartTime.addSecs(
+                        m_eitCrawlIdleStart + eit_start_rand(id, m_eitTransportTimeout));
+                    rec->ClearFlags(kFlagEITScanPaused, __FILE__, __LINE__);
+                    LOG(VB_IDLE, LOG_INFO, LOC + "Start EIT-ActiveScan idle-timer for " +
+                        QString("input %1, next start time: ").arg(id) +
+                            rec->m_eitScanStartTime.toString(Qt::ISODate));
+                }
+            }
+            else if (rec && rec->GetState() != kState_None)
+            {
+                arec = rec;
+            }
+        }
+    }
+    if (arec)
+    {
+        arec->ClearFlags(kFlagEITScanPaused, __FILE__, __LINE__);
+    }
+}
+// ============================================================================
+
 /// \brief Event handling method, contains event loop.
 void TVRec::run(void)
 {
@@ -1282,6 +1364,8 @@ void TVRec::run(void)
         m_scanner = new EITScanner(m_inputId);
         m_eitScanStartTime = m_eitScanStartTime.addSecs(
             m_eitCrawlIdleStart + eit_start_rand(m_inputId, m_eitTransportTimeout));
+
+        AddEITScanInput();          // KdW test -- #11018
     }
     else
     {
@@ -1425,8 +1509,11 @@ void TVRec::run(void)
             ClearFlags(kFlagExitPlayer, __FILE__, __LINE__);
         }
 
+        // if (m_scanner && m_channel &&
+        //     MythDate::current() > m_eitScanStartTime)
         if (m_scanner && m_channel &&
-            MythDate::current() > m_eitScanStartTime)
+            MythDate::current() > m_eitScanStartTime &&
+            !HasFlags(kFlagEITScanPaused))                          // KdW test -- #11018
         {
             if (!m_dvbOpt.m_dvbEitScan)
             {
@@ -1462,7 +1549,7 @@ void TVRec::run(void)
                 else
                 {
                     LOG(VB_EIT, LOG_INFO, LOC + QString(
-                            "Postponing EIT scan on input [%1] "
+                            "Postponing EIT scan on input %1 "
                             "because input %2 is busy")
                         .arg(m_inputId).arg(busy_input.m_inputId));
                     m_eitScanStartTime = m_eitScanStartTime.addSecs(300);
@@ -1471,6 +1558,16 @@ void TVRec::run(void)
             }
         }
 
+        // KdW test -- #11018
+        // Stop EIT-Scanning if pause requested
+        if (m_scanner && HasFlags(kFlagEITScanPaused) &&
+            HasFlags(kFlagEITScannerRunning))
+        {
+            m_scanner->StopActiveScan();
+            ClearFlags(kFlagEITScannerRunning, __FILE__, __LINE__);
+            TuningShutdowns(TuningRequest(kFlagNoRec));
+        }
+
         // We should be no more than a few thousand milliseconds,
         // as the end recording code does not have a trigger...
         // NOTE: If you change anything here, make sure that
@@ -4454,6 +4551,8 @@ QString TVRec::FlagToString(uint f)
         msg += "Errored,";
     if (kFlagCancelNextRecording & f)
         msg += "CancelNextRecording,";
+    if (kFlagEITScanPaused & f)             // KdW test -- #11018
+        msg += "EITScanPaused,";
 
     // Tuning flags
     if ((kFlagRec & f) == kFlagRec)
diff --git a/mythtv/libs/libmythtv/tv_rec.h b/mythtv/libs/libmythtv/tv_rec.h
index 0c0a5def09..71bace40b0 100644
--- a/mythtv/libs/libmythtv/tv_rec.h
+++ b/mythtv/libs/libmythtv/tv_rec.h
@@ -436,6 +436,7 @@ class MTV_PUBLIC TVRec : public SignalMonitorListener, public QRunnable
     static const uint kFlagFinishRecording      = 0x00000008;
     static const uint kFlagErrored              = 0x00000010;
     static const uint kFlagCancelNextRecording  = 0x00000020;
+    static const uint kFlagEITScanPaused        = 0x00000040; // KdW test - #11018
 
     // Tuning flags
     /// final result desired is LiveTV recording
@@ -475,6 +476,15 @@ class MTV_PUBLIC TVRec : public SignalMonitorListener, public QRunnable
     // Tuning state
     static const uint kFlagRingBufferReady      = 0x40000000;
     static const uint kFlagDetect               = 0x80000000;
+
+    // KdW test -- #11018
+  public:
+    static QMutex            s_eitInputsLock;
+    static std::vector<uint> s_eitInputs;
+    void AddEITScanInput(void);
+    void SetEITScanPaused(void);
+    void ClearEITScanPaused(void);
+
 };
 
 #endif
