--- libmythtv-orig/channelutil.cpp	2008-12-07 18:57:22.000000000 +0900
+++ libmythtv/channelutil.cpp	2008-12-05 11:20:33.000000000 +0900
@@ -130,6 +130,13 @@
             .arg(db_source_id).arg(sistandard)
             .arg(frequency).arg(modulation));
 
+    // some tables have extra blank entries
+    if (frequency == 0)
+    {
+       VERBOSE(VB_IMPORTANT, "insert_dtv_multiplex: will not create a multiplex with a zero frequency");
+       return 0;
+    }
+
     // If transport is already present, skip insert
     int mplex = get_dtv_multiplex(
         db_source_id,  sistandard,    frequency,
@@ -289,7 +296,7 @@
 }
 
 void handle_transport_desc(vector<uint> &muxes, const MPEGDescriptor &desc,
-                           uint sourceid, uint tsid, uint netid)
+                           uint sourceid, uint tsid, uint netid, DTVTunerType tuner_type)
 {
     uint tag = desc.DescriptorTag();
 
@@ -298,6 +305,18 @@
         const TerrestrialDeliverySystemDescriptor cd(desc);
         uint64_t freq = cd.FrequencyHz();
 
+        // some tables have extra blank entries
+        if (cd.FrequencyHz() == 0) return;
+
+        if ((DTVTunerType::kTunerTypeDVB_T != tuner_type) &&
+            (DTVTunerType::kTunerTypeOFDM  != tuner_type)
+           )
+        {
+           VERBOSE(VB_IMPORTANT, QString("handle_transport_desc: DVB-T descriptor on %1 tuner").
+                                         arg(tuner_type.toString()));
+           return;
+        }
+
         // Use the frequency we already have for this mplex
         // as it may be one of the other_frequencies for this mplex
         int mux = ChannelUtil::GetMplexID(sourceid, tsid, netid);
@@ -342,6 +361,19 @@
     {
         const SatelliteDeliverySystemDescriptor cd(desc);
 
+        // some tables have extra blank entries
+        if (cd.FrequencyHz() == 0) return;
+
+        if ((DTVTunerType::kTunerTypeDVB_S  != tuner_type) &&
+            (DTVTunerType::kTunerTypeDVB_S2 != tuner_type) &&
+            (DTVTunerType::kTunerTypeQPSK   != tuner_type)
+           )
+        {
+           VERBOSE(VB_IMPORTANT, QString("handle_transport_desc: DVB-S descriptor on %1 tuner").
+                                         arg(tuner_type.toString()));
+           return;
+        }
+
         uint mux = ChannelUtil::CreateMultiplex(
             sourceid,             "dvb",
             cd.FrequencyHz(),     cd.ModulationString(),
@@ -366,6 +398,18 @@
     {
         const CableDeliverySystemDescriptor cd(desc);
 
+        // some tables have extra blank entries
+        if (cd.FrequencyHz() == 0) return;
+
+        if ((DTVTunerType::kTunerTypeDVB_C != tuner_type) &&
+            (DTVTunerType::kTunerTypeQAM   != tuner_type)
+           )
+        {
+           VERBOSE(VB_IMPORTANT, QString("handle_transport_desc: DVB-C descriptor on %1 tuner").
+                                         arg(tuner_type.toString()));
+           return;
+        }
+
         uint mux = ChannelUtil::CreateMultiplex(
             sourceid,             "dvb",
             cd.FrequencyHz(),     cd.ModulationString(),
@@ -450,7 +494,7 @@
  *
  */
 vector<uint> ChannelUtil::CreateMultiplexes(
-    int sourceid, const NetworkInformationTable *nit)
+    DTVTunerType tuner_type, int sourceid, const NetworkInformationTable *nit)
 {
     vector<uint> muxes;
 
@@ -468,7 +512,8 @@
         for (uint j = 0; j < list.size(); ++j)
         {
             const MPEGDescriptor desc(list[j]);
-            handle_transport_desc(muxes, desc, sourceid, tsid, netid);
+
+            handle_transport_desc(muxes, desc, sourceid, tsid, netid, tuner_type);
         }
     }
     return muxes;
Index: libmythtv/siscan.cpp
===================================================================
--- libmythtv/siscan.cpp	(revision 19262)
+++ libmythtv/siscan.cpp	(working copy)
@@ -330,7 +330,7 @@
             tr("Network %1 Processing").arg(nit->NetworkName()));
 
         vector<uint> mp;
-        mp = ChannelUtil::CreateMultiplexes(sourceID, nit);
+        mp = ChannelUtil::CreateMultiplexes(GetDVBChannel()->GetCardType(), sourceID, nit);
         VERBOSE(VB_SIPARSER, QString("Created %1 multiplexes from NIT")
                 .arg(mp.size()));
 
--- libmythtv-orig/channelutil.h	2008-12-07 18:57:21.000000000 +0900
+++ libmythtv/channelutil.h	2008-12-05 10:51:16.000000000 +0900
@@ -74,7 +74,7 @@
                                    int transport_id, int network_id);
 
     static vector<uint> CreateMultiplexes(
-        int sourceid, const NetworkInformationTable *nit);
+        DTVTunerType tuner_type, int sourceid, const NetworkInformationTable *nit);
 
     static uint    GetMplexID(uint sourceid, const QString &channum);
     static int     GetMplexID(uint sourceid,     uint frequency);

