Index: libs/libmythtv/eithelper.cpp
===================================================================
--- libs/libmythtv/eithelper.cpp        (revision 9357)
+++ libs/libmythtv/eithelper.cpp        (working copy)
@@ -6,7 +6,7 @@
 
 const uint EITHelper::kChunkSize = 20;
 
-static int get_chan_id_from_db(int tid_db, const Event&);
+static int get_chan_id_from_db(int tid_db, const Event&, bool ignore_source);
 static uint update_eit_in_db(MSqlQuery&, MSqlQuery&, int, const Event&);
 static uint delete_overlapping_in_db(MSqlQuery&, MSqlQuery&,
                                      int, const Event&);
@@ -65,7 +65,7 @@
  *  \param mplexid multiplex we are inserting events for.
  *  \return Returns number of events inserted into DB.
  */
-uint EITHelper::ProcessEvents(uint sourceid)
+uint EITHelper::ProcessEvents(uint sourceid, bool ignore_source)
 {
     QMutexLocker locker(&eitList_lock);
 
@@ -79,7 +79,7 @@
         eitList.pop_front();
 
         eitList_lock.unlock();
-        insertCount += UpdateEITList(sourceid, *events);
+        insertCount += UpdateEITList(sourceid, *events, ignore_source);
         QList_Events::iterator it = events->begin();
         for (; it != events->end(); ++it)
             delete *it;
@@ -97,7 +97,7 @@
         events->erase(events->begin(), subset_end);
         
         eitList_lock.unlock();
-        insertCount += UpdateEITList(sourceid, subset);
+        insertCount += UpdateEITList(sourceid, subset, ignore_source);
         QList_Events::iterator it = subset.begin();
         for (; it != subset.end(); ++it)
             delete *it;
@@ -112,7 +112,7 @@
     return insertCount;
 }
 
-int EITHelper::GetChanID(uint sourceid, const Event &event) const
+int EITHelper::GetChanID(uint sourceid, const Event &event, bool ignore_source) const
 {
     unsigned long long srv;
     srv  = ((unsigned long long) sourceid);
@@ -122,11 +122,12 @@
 
     int chanid = srv_to_chanid[srv];
     if (chanid == 0)
-        srv_to_chanid[srv] = chanid = get_chan_id_from_db(sourceid, event);
+        srv_to_chanid[srv] = chanid = get_chan_id_from_db(sourceid, event, ignore_source);
     return chanid;
 }
 
-uint EITHelper::UpdateEITList(uint sourceid, const QList_Events &events) const
+uint EITHelper::UpdateEITList(uint sourceid, const QList_Events &events,
+                              bool ignore_source) const
 {
     MSqlQuery query1(MSqlQuery::InitCon());
     MSqlQuery query2(MSqlQuery::InitCon());
@@ -136,14 +137,14 @@
 
     QList_Events::const_iterator e = events.begin();
     for (; e != events.end(); ++e)
-        if ((chanid = GetChanID(sourceid, **e)) > 0)
+        if ((chanid = GetChanID(sourceid, **e, ignore_source)) > 0)
             counter += update_eit_in_db(query1, query2, chanid, **e);
 
     return counter;
 }
 
 // Figure out the chanid for this channel
-static int get_chan_id_from_db(int sourceid, const Event &event)
+static int get_chan_id_from_db(int sourceid, const Event &event, bool ignore_source)
 {
     MSqlQuery query(MSqlQuery::InitCon());
 
@@ -156,23 +157,38 @@
             "WHERE atscsrcid = :ATSCSRCID AND "
             "      sourceid  = :SOURCEID");
         query.bindValue(":ATSCSRCID", event.ServiceID);
+        query.bindValue(":SOURCEID", sourceid);
     }
     else
     {
         // DVB Link to chanid
-        query.prepare(
-            "SELECT chanid, useonairguide "
-            "FROM channel, dtv_multiplex "
-            "WHERE serviceid        = :SERVICEID   AND "
-            "      networkid        = :NETWORKID   AND "
-            "      transportid      = :TRANSPORTID AND "
-            "      channel.sourceid = :SOURCEID    AND "
-            "      channel.mplexid = dtv_multiplex.mplexid");
+       if (!ignore_source)
+        {
+            query.prepare(
+                "SELECT chanid, useonairguide "
+                "FROM channel, dtv_multiplex "
+                "WHERE serviceid        = :SERVICEID   AND "
+                "      networkid        = :NETWORKID   AND "
+                "      transportid      = :TRANSPORTID AND "
+                "      channel.sourceid = :SOURCEID    AND " 
+                "      channel.mplexid = dtv_multiplex.mplexid");
+            query.bindValue(":SOURCEID", sourceid);
+        }
+        else
+        {
+            query.prepare(
+                "SELECT chanid, useonairguide "
+                "FROM channel, dtv_multiplex "
+                "WHERE serviceid        = :SERVICEID   AND "
+                "      networkid        = :NETWORKID   AND "
+                "      transportid      = :TRANSPORTID AND "
+                "      channel.mplexid = dtv_multiplex.mplexid");
+        }
+
         query.bindValue(":SERVICEID",   event.ServiceID);
         query.bindValue(":NETWORKID",   event.NetworkID);
         query.bindValue(":TRANSPORTID", event.TransportID);
     }
-    query.bindValue(":SOURCEID", sourceid);
 
     if (!query.exec() || !query.isActive())
         MythContext::DBError("Looking up chanID", query);
@@ -183,10 +199,16 @@
         return (useOnAirGuide) ? query.value(0).toInt() : -1;        
     }
 
-    VERBOSE(VB_EIT, "EITHelper: " +
-            QString("chanid not found for service %1 on source %2,")
-            .arg(event.ServiceID).arg(sourceid) +
-            "\n\t\t\tso event updates were skipped.");
+    if (event.ATSC || !ignore_source)
+        VERBOSE(VB_EIT, "EITHelper: " +
+                QString("chanid not found for service %1 on source %2,")
+                .arg(event.ServiceID).arg(sourceid) +
+                "\n\t\t\tso event updates were skipped.");
+    else
+        VERBOSE(VB_EIT, "EITHelper: " +
+                QString("chanid not found for service %1 on network %2,")
+                .arg(event.ServiceID).arg(event.NetworkID) +
+                "\n\t\t\tso event updates were skipped.");
 
     return -1;
 }
Index: libs/libmythtv/eithelper.h
===================================================================
--- libs/libmythtv/eithelper.h  (revision 9357)
+++ libs/libmythtv/eithelper.h  (working copy)
@@ -25,14 +25,15 @@
 
     void ClearList(void);
     uint GetListSize(void) const;
-    uint ProcessEvents(uint sourceid);
+    uint ProcessEvents(uint sourceid, bool ignore_source=false);
 
   public slots:
     void HandleEITs(QMap_Events* events);
 
   private:
-    int  GetChanID(uint sourceid, const Event &event) const;
-    uint UpdateEITList(uint sourceid, const QList_Events &events) const;
+    int  GetChanID(uint sourceid, const Event &event, bool ignore_source) const;
+    uint UpdateEITList(uint sourceid, const QList_Events &events,
+                       bool ignore_source) const;
 
     QListList_Events  eitList;      ///< Event Information Tables List
     mutable QMutex    eitList_lock; ///< EIT List lock
Index: libs/libmythtv/eitscanner.h
===================================================================
--- libs/libmythtv/eitscanner.h (revision 9357)
+++ libs/libmythtv/eitscanner.h (working copy)
@@ -24,10 +24,12 @@
     EITScanner();
     ~EITScanner() { TeardownAll(); }
 
-    void StartPassiveScan(DVBChannel*, DVBSIParser*);
+    void StartPassiveScan(DVBChannel*, DVBSIParser*, 
+                          bool ignore_source=false);
     void StopPassiveScan(void);
 
-    void StartActiveScan(TVRec*, uint max_seconds_per_source);
+    void StartActiveScan(TVRec*, uint max_seconds_per_source,
+                         bool ignore_source=false);
     void StopActiveScan(void);        
 
   private:
@@ -50,6 +52,8 @@
     QStringList      activeScanChannels;
     QStringList::iterator activeScanNextChan;
 
+    bool             ignore_source;
+
     static QMutex    resched_lock;
     static QDateTime resched_next_time;
 
Index: libs/libmythtv/tv_rec.cpp
===================================================================
--- libs/libmythtv/tv_rec.cpp   (revision 9357)
+++ libs/libmythtv/tv_rec.cpp   (working copy)
@@ -1098,7 +1098,10 @@
     }
 
     if (scanner)
-        scanner->StartPassiveScan(dvbc, dvbsiparser);
+    {
+        uint ignore = gContext->GetNumSetting("EITIgnoresSource", 0);
+        scanner->StartPassiveScan(dvbc, dvbsiparser, (ignore ? true : false));
+    }
 #endif // USING_DVB_EIT
 
 #endif // USING_DVB
@@ -1326,7 +1329,8 @@
             else
             {
                 uint ttMin = gContext->GetNumSetting("EITTransportTimeout", 5);
-                scanner->StartActiveScan(this, ttMin * 60);
+                uint ignore = gContext->GetNumSetting("EITIgnoresSource", 0);
+                scanner->StartActiveScan(this, ttMin * 60, (ignore ? true : false));
                 SetFlags(kFlagEITScannerRunning);
                 eitScanStartTime = QDateTime::currentDateTime().addYears(1);
             }
Index: libs/libmythtv/eitscanner.cpp
===================================================================
--- libs/libmythtv/eitscanner.cpp       (revision 9357)
+++ libs/libmythtv/eitscanner.cpp       (working copy)
@@ -82,7 +82,7 @@
             uint sourceid = channel->GetCurrentSourceID();
             if (sourceid && parser && eitHelper->GetListSize())
             {
-                eitCount += eitHelper->ProcessEvents(sourceid);
+                eitCount += eitHelper->ProcessEvents(sourceid, ignore_source);
                 t.start();
             }
         }
@@ -155,11 +155,17 @@
  *  \brief Start inserting Event Information Tables from the multiplex
  *         we happen to be tuned to into the database.
  */
-void EITScanner::StartPassiveScan(DVBChannel *_channel, DVBSIParser *_parser)
+void EITScanner::StartPassiveScan(DVBChannel *_channel, DVBSIParser *_parser,
+                                  bool _ignore_source)
 {
     eitHelper->ClearList();
-    parser  = _parser;
-    channel = _channel;
+    parser        = _parser;
+    channel       = _channel;
+    ignore_source = _ignore_source;
+
+    if (ignore_source)
+        VERBOSE(VB_EIT, LOC + "EIT scan ignoring sourceid..");
+
     QObject::connect(parser,    SIGNAL(EventsReady(QMap_Events*)),
                      eitHelper, SLOT(HandleEITs(QMap_Events*)));
 }
@@ -176,9 +182,11 @@
     parser  = NULL;
 }
 
-void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source)
+void EITScanner::StartActiveScan(TVRec *_rec, uint max_seconds_per_source,
+                                 bool _ignore_source)
 {
-    rec = _rec;
+    rec           = _rec;
+    ignore_source = _ignore_source;
 
     if (!activeScanChannels.size())
     {
Index: setup/backendsettings.cpp
===================================================================
--- setup/backendsettings.cpp   (revision 9357)
+++ setup/backendsettings.cpp   (working copy)
@@ -238,6 +238,21 @@
     return gc;
 };
 
+static GlobalCheckBox *EITIgnoresSource()
+{
+    GlobalCheckBox *gc = new GlobalCheckBox("EITIgnoresSource");
+    gc->setLabel(QObject::tr("DVB EIT Scan not Limited to Source Input"));
+    gc->setValue(false);
+    gc->setHelpText(QObject::tr("If set, DVB EIT scan will not be limited to "
+                                "channels which are on the same input "
+                                "source as the channel being viewed. "
+                                "If your provider delivers EIT for "
+                                "multiple orbital locations on a single "
+                                "transport, enable this."));
+    return gc;
+};
+
+
 static GlobalSpinBox *WOLbackendReconnectWaitTime()
 {
     GlobalSpinBox *gc = new GlobalSpinBox("WOLbackendReconnectWaitTime", 0, 1200, 5);
@@ -647,11 +662,16 @@
     group2->addChild(VbiFormat());
     group2->addChild(FreqTable());
     group2->addChild(TimeOffset());
-    group2->addChild(EITTransportTimeout());
     group2->addChild(MasterBackendOverride());
     group2->addChild(DeletesFollowLinks());
     addChild(group2);
 
+    VerticalConfigurationGroup* group2a1 = new VerticalConfigurationGroup(false);
+    group2a1->setLabel(QObject::tr("EIT Scanner Options"));                
+    group2a1->addChild(EITTransportTimeout());
+    group2a1->addChild(EITIgnoresSource());
+    addChild(group2a1);
+
     VerticalConfigurationGroup* group3 = new VerticalConfigurationGroup(false);
     group3->setLabel(QObject::tr("Shutdown/Wakeup Options"));
     group3->addChild(startupCommand());
