diff --git a/mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp b/mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp
index 797efb8944..ce9b628454 100644
--- a/mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp
+++ b/mythtv/libs/libmythtv/channelscan/channelscan_sm.cpp
@@ -347,7 +347,7 @@ void ChannelScanSM::LogLines(const QString& string) const
 {
     QStringList lines = string.split('\n');
     for (int i = 0; i < lines.size(); ++i)
-        LOG(VB_CHANSCAN, LOG_INFO, lines[i]);
+        LOG(VB_CHANSCAN, LOG_DEBUG, lines[i]);
 }
 
 void ChannelScanSM::HandlePAT(const ProgramAssociationTable *pat)
@@ -695,8 +695,14 @@ void ChannelScanSM::UpdateScanTransports(const NetworkInformationTable *nit)
             uint64_t frequency = 0;
             const MPEGDescriptor desc(list[j]);
             uint tag = desc.DescriptorTag();
+            uint length = desc.DescriptorLength();
+            QString tagString = desc.DescriptorTagString();
+
             DTVTunerType tt(DTVTunerType::kTunerTypeUnknown);
 
+            LOG(VB_CHANSCAN, LOG_DEBUG, LOC + QString("ts-loop j:%1 tag:%2 %3 length:%4")
+                .arg(j).arg(tag).arg(tagString).arg(length));
+
             switch (tag)
             {
                 case DescriptorID::terrestrial_delivery_system:
@@ -920,11 +926,11 @@ bool ChannelScanSM::UpdateChannelInfo(bool wait_until_complete)
         }
     }
 
-    // append transports from the NIT to the scan list
+    // Append transports from the NIT to the scan list
     if (transport_tune_complete && m_extendScanList &&
         !m_currentInfo->m_nits.empty())
     {
-        // append delivery system descriptos to scan list
+        // Update transport with delivery system descriptors from the NIT
         nit_vec_t::const_iterator it = m_currentInfo->m_nits.begin();
         while (it != m_currentInfo->m_nits.end())
         {
@@ -953,10 +959,11 @@ bool ChannelScanSM::UpdateChannelInfo(bool wait_until_complete)
             TransportScanItem &item = *m_current;
             item.m_tuning.m_frequency = item.freq_offset(m_current.offset());
 
-            if (m_scanDTVTunerType == DTVTunerType::kTunerTypeDVBT)
-            {
-                item.m_tuning.m_mod_sys = DTVModulationSystem::kModulationSystem_DVBT;
-            }
+            item.m_tuning.m_mod_sys.Parse(m_inputName);
+            LOG(VB_CHANSCAN, LOG_DEBUG, LOC +
+                QString("%1(%2) m_inputName: %3 ").arg(__FUNCTION__).arg(__LINE__).arg(m_inputName) +
+                QString("m_mod_sys:%1 %2").arg(item.m_tuning.m_mod_sys).arg(item.m_tuning.m_mod_sys.toString()));
+
             if (m_scanDTVTunerType == DTVTunerType::kTunerTypeDVBT2)
             {
                 if (m_dvbt2Tried)
@@ -1918,6 +1925,15 @@ bool ChannelScanSM::ScanTransports(
     const QString &table_start,
     const QString &table_end)
 {
+    LOG(VB_CHANSCAN, LOG_DEBUG, LOC +
+        QString("%1: ").arg(__FUNCTION__) +
+        QString("SourceID:%1 ").arg(SourceID) +
+        QString("std:%1 ").arg(std) +
+        QString("modulation:%1 ").arg(modulation) +
+        QString("country:%1 ").arg(country) +
+        QString("table_start:%1 ").arg(table_start) +
+        QString("table_end:%1 ").arg(table_end));
+
     QString name("");
     if (m_scanning)
         return false;
diff --git a/mythtv/libs/libmythtv/dtvmultiplex.cpp b/mythtv/libs/libmythtv/dtvmultiplex.cpp
index 5b1e83258f..26f2310000 100644
--- a/mythtv/libs/libmythtv/dtvmultiplex.cpp
+++ b/mythtv/libs/libmythtv/dtvmultiplex.cpp
@@ -218,6 +218,46 @@ bool DTVMultiplex::ParseDVB_S_and_C(
     return ok;
 }
 
+bool DTVMultiplex::ParseDVB_S(
+    const QString &_frequency,   const QString &_inversion,
+    const QString &_symbol_rate, const QString &_fec_inner,
+    const QString &_modulation,  const QString &_polarity)
+{
+    bool ok = ParseDVB_S_and_C(_frequency, _inversion, _symbol_rate,
+                               _fec_inner, _modulation, _polarity);
+    return ok;
+}
+
+bool DTVMultiplex::ParseDVB_C(
+    const QString &_frequency,   const QString &_inversion,
+    const QString &_symbol_rate, const QString &_fec_inner,
+    const QString &_modulation,  const QString &_polarity,
+    const QString &_mod_sys)
+{
+    bool ok = ParseDVB_S_and_C(_frequency, _inversion, _symbol_rate,
+                               _fec_inner, _modulation, _polarity);
+
+    m_mod_sys.Parse(_mod_sys);
+    if (DTVModulationSystem::kModulationSystem_UNDEFINED == m_mod_sys)
+        m_mod_sys = DTVModulationSystem::kModulationSystem_DVBC_ANNEX_A;
+
+    LOG(VB_GENERAL, LOG_DEBUG, LOC +
+        QString("%1 ").arg(__FUNCTION__) +
+        QString("_mod_sys:%1 ok:%2 ").arg(_mod_sys).arg(ok) +
+        QString("m_mod_sys:%1 %2 ").arg(m_mod_sys).arg(m_mod_sys.toString()));
+
+    if ((DTVModulationSystem::kModulationSystem_DVBC_ANNEX_A != m_mod_sys) &&
+        (DTVModulationSystem::kModulationSystem_DVBC_ANNEX_B != m_mod_sys) &&
+        (DTVModulationSystem::kModulationSystem_DVBC_ANNEX_C != m_mod_sys))
+    {
+        LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-C modulation system " +
+            QString("parameter '%1', aborting.").arg(_mod_sys));
+        return false;
+    }
+
+    return ok;
+}
+
 bool DTVMultiplex::ParseDVB_S2(
     const QString &_frequency,   const QString &_inversion,
     const QString &_symbol_rate, const QString &_fec_inner,
@@ -229,7 +269,7 @@ bool DTVMultiplex::ParseDVB_S2(
 
     if (!m_mod_sys.Parse(_mod_sys))
     {
-        LOG(VB_GENERAL, LOG_ERR, LOC + "Invalid S2 modulation system " +
+        LOG(VB_GENERAL, LOG_ERR, LOC + "Invalid DVB-S2 modulation system " +
                 QString("parameter '%1', aborting.").arg(_mod_sys));
         return false;
     }
@@ -245,7 +285,7 @@ bool DTVMultiplex::ParseDVB_S2(
     if ((DTVModulationSystem::kModulationSystem_DVBS  != m_mod_sys) &&
         (DTVModulationSystem::kModulationSystem_DVBS2 != m_mod_sys))
     {
-        LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported S2 modulation system " +
+        LOG(VB_GENERAL, LOG_ERR, LOC + "Unsupported DVB-S2 modulation system " +
             QString("parameter '%1', aborting.").arg(_mod_sys));
         return false;
     }
@@ -268,18 +308,23 @@ bool DTVMultiplex::ParseDVB_T2(
                          _trans_mode, _guard_interval, _hierarchy);
 
     QString l_mod_sys = _mod_sys;
+
+    // Accept "0" for "DVB-T" and "1" for "DVB-T2"
     if (_mod_sys == "1")
     {
         LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T2 modulation system " +
                 QString("parameter '%1', using DVB-T2.").arg(_mod_sys));
-        l_mod_sys = "DVB-T2";
+        m_mod_sys = DTVModulationSystem::kModulationSystem_DVBT2;
+        l_mod_sys = m_mod_sys.toString();
     }
     else if (_mod_sys == "0")
     {
         LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T modulation system " +
                 QString("parameter '%1', using DVB-T.").arg(_mod_sys));
-        l_mod_sys = "DVB-T";
+        m_mod_sys = DTVModulationSystem::kModulationSystem_DVBT;
+        l_mod_sys = m_mod_sys.toString();
     }
+
     if (!m_mod_sys.Parse(l_mod_sys))
     {
         LOG(VB_GENERAL, LOG_WARNING, LOC + "Invalid DVB-T/T2 modulation system " +
@@ -313,33 +358,41 @@ bool DTVMultiplex::ParseTuningParams(
     if (DTVTunerType::kTunerTypeDVBT == type)
     {
         return ParseDVB_T(
-            _frequency,       _inversion,       _bandwidth,    _hp_code_rate,
-            _lp_code_rate,    _ofdm_modulation, _trans_mode,   _guard_interval,
-            _hierarchy);
+            _frequency,       _inversion,       _bandwidth,
+            _hp_code_rate,    _lp_code_rate,    _ofdm_modulation,
+            _trans_mode,      _guard_interval,  _hierarchy);
     }
 
-    if ((DTVTunerType::kTunerTypeDVBS1 == type) ||
-        (DTVTunerType::kTunerTypeDVBC  == type))
+    if (DTVTunerType::kTunerTypeDVBC  == type)
+    {
+        return ParseDVB_C(
+            _frequency,       _inversion,       _symbolrate,
+            _fec,             _modulation,      _polarity,
+            _mod_sys);
+    }
+
+    if (DTVTunerType::kTunerTypeDVBS1 == type)
     {
-        return ParseDVB_S_and_C(
-            _frequency,       _inversion,     _symbolrate,
-            _fec,             _modulation,    _polarity);
+        return ParseDVB_S(
+            _frequency,       _inversion,       _symbolrate,
+            _fec,             _modulation,      _polarity);
     }
 
     if (DTVTunerType::kTunerTypeDVBS2 == type)
     {
         return ParseDVB_S2(
-            _frequency,       _inversion,     _symbolrate,
-            _fec,             _modulation,    _polarity,
+            _frequency,       _inversion,       _symbolrate,
+            _fec,             _modulation,      _polarity,
             _mod_sys,         _rolloff);
     }
 
     if (DTVTunerType::kTunerTypeDVBT2 == type)
     {
         return ParseDVB_T2(
-            _frequency,       _inversion,       _bandwidth,    _hp_code_rate,
-            _lp_code_rate,    _ofdm_modulation, _trans_mode,   _guard_interval,
-            _hierarchy, _mod_sys);
+            _frequency,       _inversion,       _bandwidth,
+            _hp_code_rate,    _lp_code_rate,    _ofdm_modulation,
+            _trans_mode,      _guard_interval,  _hierarchy,
+            _mod_sys);
     }
 
     if (DTVTunerType::kTunerTypeATSC == type)
diff --git a/mythtv/libs/libmythtv/dtvmultiplex.h b/mythtv/libs/libmythtv/dtvmultiplex.h
index 176ad90df3..39ec86ede9 100644
--- a/mythtv/libs/libmythtv/dtvmultiplex.h
+++ b/mythtv/libs/libmythtv/dtvmultiplex.h
@@ -54,6 +54,17 @@ class MTV_PUBLIC DTVMultiplex
         const QString &symbol_rate,  const QString &fec_inner,
         const QString &modulation,   const QString &polarity);
 
+    bool ParseDVB_S(
+        const QString &frequency,    const QString &inversion,
+        const QString &symbol_rate,  const QString &fec_inner,
+        const QString &modulation,   const QString &polarity);
+
+    bool ParseDVB_C(
+        const QString &frequency,    const QString &inversion,
+        const QString &symbol_rate,  const QString &fec_inner,
+        const QString &modulation,   const QString &polarity,
+        const QString &mod_sys);
+
     bool ParseDVB_S2(
         const QString &frequency,    const QString &inversion,
         const QString &symbol_rate,  const QString &fec_inner,
@@ -84,15 +95,15 @@ class MTV_PUBLIC DTVMultiplex
     uint64_t         m_symbolrate {0};
     DTVInversion     m_inversion;
     DTVBandwidth     m_bandwidth;
-    DTVCodeRate      m_hp_code_rate;  ///< High Priority FEC rate
-    DTVCodeRate      m_lp_code_rate;  ///< Low Priority FEC rate
+    DTVCodeRate      m_hp_code_rate;    ///< High Priority FEC rate
+    DTVCodeRate      m_lp_code_rate;    ///< Low Priority FEC rate
     DTVModulation    m_modulation;
     DTVTransmitMode  m_trans_mode;
     DTVGuardInterval m_guard_interval;
     DTVHierarchy     m_hierarchy;
     DTVPolarity      m_polarity;
-    DTVCodeRate      m_fec; ///< Inner Forward Error Correction rate
-    DTVModulationSystem m_mod_sys; ///< modulation system (only DVB-S or DVB-S2 atm)
+    DTVCodeRate      m_fec;             ///< Inner Forward Error Correction rate
+    DTVModulationSystem m_mod_sys;      ///< Modulation system
     DTVRollOff       m_rolloff;
 
     // Optional additional info
