Index: libs/libmythtv/eithelper.h
===================================================================
--- libs/libmythtv/eithelper.h	(revision 8390)
+++ libs/libmythtv/eithelper.h	(working copy)
@@ -28,6 +28,8 @@
 
   public slots:
     void HandleEITs(QMap_Events* events);
+  signals:
+    void StopParsing(bool);
 
   private:
     int GetChanID(int tid_db, const Event &event) const;
Index: libs/libmythtv/eithelper.cpp
===================================================================
--- libs/libmythtv/eithelper.cpp	(revision 8390)
+++ libs/libmythtv/eithelper.cpp	(working copy)
@@ -75,35 +75,39 @@
     if (!eitList.size())
         return 0;
 
+    VERBOSE(VB_EIT,QString("EITHelper::ProcessEvents: Events: %1/%2")
+            .arg(eitList.size()).arg(eitList.front()->size()));
+
     uint insertCount = 0;
-    if (eitList.front()->size() <= kChunkSize)
+
+    QList_Events  subset;
+    while (subset.size() < kChunkSize && eitList.size())
     {
         QList_Events *events = eitList.front();
-        eitList.pop_front();
+        while (subset.size() < kChunkSize && events->size())
+        {
+            subset.push_back(events->front());
+            events->pop_front();
+        }
+        if (! events->size())
+        {
+            eitList.pop_front();
+            delete events;
+        }
+    }
 
-        eitList_lock.unlock();
-        insertCount += UpdateEITList(mplexid, *events);
-        QList_Events::iterator it = events->begin();
-        for (; it != events->end(); ++it)
-            delete *it;
-        delete events;
-        eitList_lock.lock();
-    }
-    else
+    eitList_lock.unlock();
+    insertCount += UpdateEITList(mplexid, subset);
+    QList_Events::iterator it = subset.begin();
+    for (; it != subset.end(); ++it)
+        delete *it;
+    eitList_lock.lock();
+
+    if (eitList.size() <= 20 || eitList.size() > 1000)
     {
-        QList_Events *events = eitList.front();
-        QList_Events  subset;
-
-        QList_Events::iterator subset_end = events->begin();
-        for (uint i = 0; i < kChunkSize; ++i) ++subset_end;
-        subset.insert(subset.end(), events->begin(), subset_end);
-        events->erase(events->begin(), subset_end);
-        
+        int size = eitList.size();
         eitList_lock.unlock();
-        insertCount += UpdateEITList(mplexid, subset);
-        QList_Events::iterator it = subset.begin();
-        for (; it != subset.end(); ++it)
-            delete *it;
+        emit(StopParsing(size > 1000));
         eitList_lock.lock();
     }
 
Index: libs/libmythtv/eitscanner.cpp
===================================================================
--- libs/libmythtv/eitscanner.cpp	(revision 8390)
+++ libs/libmythtv/eitscanner.cpp	(working copy)
@@ -176,6 +176,8 @@
             eitHelper, SLOT(HandleEITs(QMap_Events*)));
     connect(channel,   SIGNAL(UpdatePMTObject(const PMTObject *)),
             this,      SLOT(SetPMTObject(const PMTObject *)));
+    connect(eitHelper, SIGNAL(StopParsing(bool)),
+            parser,    SLOT(StopParsing(bool)));
 }
 
 /** \fn EITScanner::StopPassiveScan(void)
