diff --git a/mythtv/libs/libmythtv/eitscanner.cpp b/mythtv/libs/libmythtv/eitscanner.cpp
index 6135e08..660cdc4 100644
--- a/mythtv/libs/libmythtv/eitscanner.cpp
+++ b/mythtv/libs/libmythtv/eitscanner.cpp
@@ -147,12 +147,18 @@ void EITScanner::run(void)
             // 24 hours ago
             eitHelper->PruneEITCache(activeScanNextTrig.toTime_t() - 86400);
         }
+        if (!activeScan)
+            activeScanStopped = true;
 
         lock.lock();
         if (!exitThread)
             exitThreadCond.wait(&lock, 400); // sleep up to 400 ms.
+
+        if (!activeScan)
+            activeScanStopped = true;
     }
     lock.unlock();
+    activeScanStopped = true;
 }
 
 /** \fn EITScanner::RescheduleRecordings(void)
@@ -271,13 +277,23 @@ void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source)
         // Add a little randomness to trigger time so multiple
         // cards will have a staggered channel changing time.
         activeScanTrigTime += random() % 29;
+        activeScanStopped = false;
         activeScan = true;
     }
 }
 
-void EITScanner::StopActiveScan()
+void EITScanner::StopActiveScan(void)
 {
+    activeScanStopped = false;
     activeScan = false;
-    rec = NULL;
+
+    lock.lock();
+    exitThreadCond.wakeAll();
+    lock.unlock();
+
     StopPassiveScan();
+    while (!activeScanStopped)
+        usleep(10000);
+
+    rec = NULL;
 }
diff --git a/mythtv/libs/libmythtv/eitscanner.h b/mythtv/libs/libmythtv/eitscanner.h
index 36dd4d9..af4f1e5 100644
--- a/mythtv/libs/libmythtv/eitscanner.h
+++ b/mythtv/libs/libmythtv/eitscanner.h
@@ -58,7 +58,8 @@ class EITScanner : public QRunnable
     QWaitCondition   exitThreadCond;
 
     TVRec           *rec;
-    bool             activeScan;
+    volatile bool    activeScan;
+    volatile bool    activeScanStopped;
     QDateTime        activeScanNextTrig;
     uint             activeScanTrigTime;
     QStringList      activeScanChannels;
