Index: libs/libmythtv/hdhrchannel.h
===================================================================
--- libs/libmythtv/hdhrchannel.h	(revision 20041)
+++ libs/libmythtv/hdhrchannel.h	(working copy)
@@ -1,6 +1,6 @@
 /** -*- Mode: c++ -*-
- *  Dbox2Channel
- *  Copyright (c) 2006 by Silicondust Engineering Ltd.
+ *  HDHRChannel
+ *  Copyright (c) 2006-2009 by Silicondust Engineering Ltd.
  *  Distributed as part of MythTV under GPL v2 and later.
  */
 
@@ -52,7 +52,7 @@
     bool DelAllPIDs(void);
     bool UpdateFilters(void);
 
-    // ATSC scanning stuff
+    // ATSC/DVB scanning/tuning stuff
     bool TuneMultiplex(uint mplexid, QString inputname);
     bool Tune(const DTVMultiplex &tuning, QString inputname);
 
Index: libs/libmythtv/hdhrrecorder.h
===================================================================
--- libs/libmythtv/hdhrrecorder.h	(revision 20041)
+++ libs/libmythtv/hdhrrecorder.h	(working copy)
@@ -18,11 +18,11 @@
 typedef vector<uint>        uint_vec_t;
 
 class HDHRRecorder : public DTVRecorder,
+                     public DVBMainStreamListener,
+                     public ATSCMainStreamListener,
                      public MPEGStreamListener,
                      public MPEGSingleProgramStreamListener
 {
-    friend class ATSCStreamData;
-
   public:
     HDHRRecorder(TVRec *rec, HDHRChannel *channel);
     ~HDHRRecorder();
@@ -52,13 +52,16 @@
     void HandleSingleProgramPAT(ProgramAssociationTable *pat);
     void HandleSingleProgramPMT(ProgramMapTable *pmt);
 
-    /*
     // ATSC
     void HandleSTT(const SystemTimeTable*) {}
-    void HandleMGT(const MasterGuideTable *mgt);
+    void HandleMGT(const MasterGuideTable*) {}
     void HandleVCT(uint, const VirtualChannelTable*) {}
-    */
 
+    // DVB
+    void HandleTDT(const TimeDateTable*) {}
+    void HandleNIT(const NetworkInformationTable*) {}
+    void HandleSDT(uint /*tsid*/, const ServiceDescriptionTable*) {}
+
   private:
     bool AdjustFilters(void);
     bool AdjustEITPIDs(void);
Index: libs/libmythtv/hdhrchannel.cpp
===================================================================
--- libs/libmythtv/hdhrchannel.cpp	(revision 20041)
+++ libs/libmythtv/hdhrchannel.cpp	(working copy)
@@ -1,6 +1,6 @@
 /**
- *  DBox2Channel
- *  Copyright (c) 2006 by Silicondust Engineering Ltd.
+ *  HDHRChannel
+ *  Copyright (c) 2006-2009 by Silicondust Engineering Ltd.
  *  Distributed as part of MythTV under GPL v2 and later.
  */
 
@@ -24,7 +24,6 @@
 #include "hdhrchannel.h"
 #include "videosource.h"
 #include "channelutil.h"
-#include "frequencytables.h"
 
 #define DEBUG_PID_FILTERS
 
@@ -384,29 +383,56 @@
 
 bool HDHRChannel::Tune(const DTVMultiplex &tuning, QString inputname)
 {
+    QString modulation;
+    QString si_std = tuning.sistandard;
+
+
+    switch (tuning.modulation)
+    {
+        case DTVModulation::kModulation8VSB:   modulation = "8vsb";   break;
+        case DTVModulation::kModulationQAM16:  modulation = "qam16";  break;
+        case DTVModulation::kModulationQAM32:  modulation = "qam32";  break;
+        case DTVModulation::kModulationQAM64:  modulation = "qam64";  break;
+        case DTVModulation::kModulationQAM128: modulation = "qam128"; break;
+        case DTVModulation::kModulationQAM256: modulation = "qam256"; break;
+        default:                               modulation = "auto";
+    }
+
+    if (modulation == "auto" && si_std == "dvb")
+        switch (tuning.bandwidth)
+        {
+            case DTVBandwidth::kBandwidth6MHz: modulation = "auto6t"; break;
+            case DTVBandwidth::kBandwidth7MHz: modulation = "auto7t"; break;
+            case DTVBandwidth::kBandwidth8MHz: modulation = "auto8t"; break;
+        }
+    //else if (modulation == "auto" && si_std == "atsc")
+    else if (si_std == "dvb")
+        switch (tuning.bandwidth)
+        {
+            case DTVBandwidth::kBandwidth6MHz: modulation.prepend("t6"); break;
+            case DTVBandwidth::kBandwidth7MHz: modulation.prepend("t7"); break;
+            case DTVBandwidth::kBandwidth8MHz: modulation.prepend("t8"); break;
+        }
+
+
     return Tune(tuning.frequency, inputname,
-                tuning.modulation.toString(), tuning.sistandard);
+                modulation, si_std);
 }
 
 bool HDHRChannel::Tune(uint frequency, QString /*input*/,
                        QString modulation, QString si_std)
 {
-    bool ok = false;
+    QString channel = modulation + ':' + QString::number(frequency);
 
-    VERBOSE(VB_CHANNEL, LOC +
-            QString("TuneTo(%1,%2)").arg(frequency).arg(modulation));
+    VERBOSE(VB_CHANNEL, LOC + "Tune() to " + channel);
 
-    if (modulation == "8vsb")
-        ok = TunerSet("channel", QString("8vsb:%1").arg(frequency));
-    else if (modulation == "qam_64")
-        ok = TunerSet("channel", QString("qam64:%1").arg(frequency));
-    else if (modulation == "qam_256")
-        ok = TunerSet("channel", QString("qam256:%1").arg(frequency));
-
-    if (ok)
+    if (TunerSet("channel", channel).length())
+    {
         SetSIStandard(si_std);
+        return true;
+    }
 
-    return ok;
+    return false;
 }
 
 bool HDHRChannel::AddPID(uint pid, bool do_update)
Index: libs/libmythtv/hdhrrecorder.cpp
===================================================================
--- libs/libmythtv/hdhrrecorder.cpp	(revision 20041)
+++ libs/libmythtv/hdhrrecorder.cpp	(working copy)
@@ -27,6 +27,7 @@
 #include "hdhrrecorder.h"
 #include "atsctables.h"
 #include "atscstreamdata.h"
+#include "dvbstreamdata.h"
 #include "eithelper.h"
 #include "tv_rec.h"
 
@@ -176,10 +177,13 @@
         data->AddMPEGListener(this);
 
         ATSCStreamData *atsc = dynamic_cast<ATSCStreamData*>(data);
+        DVBStreamData  *dvb  = dynamic_cast<DVBStreamData*>(data);
 
         if (atsc && atsc->DesiredMinorChannel())
             atsc->SetDesiredChannel(atsc->DesiredMajorChannel(),
                                     atsc->DesiredMinorChannel());
+        else if (dvb)
+            dvb->AddDVBMainListener(this);
         else if (data->DesiredProgram() >= 0)
             data->SetDesiredProgram(data->DesiredProgram());
     }
Index: libs/libmythtv/scanwizardhelpers.cpp
===================================================================
--- libs/libmythtv/scanwizardhelpers.cpp	(revision 20041)
+++ libs/libmythtv/scanwizardhelpers.cpp	(working copy)
@@ -394,8 +394,14 @@
         addSelection(tr("Import channels.conf"),
                      QString::number(DVBUtilsImport));
         break;
+    case CardUtil::HDHOMERUN:
+        addSelection(tr("Full Scan (ATSC)"),
+                     QString::number(FullScan_ATSC), true);
+        addSelection(tr("Full Scan (DVB)"),
+                     QString::number(FullScan_OFDM), true);
+        addSelection(tr("Full Scan (DVB, tuned)"),
+                     QString::number(NITAddScan_OFDM));
     case CardUtil::ATSC:
-    case CardUtil::HDHOMERUN:
         addSelection(tr("Full Scan"),
                      QString::number(FullScan_ATSC), true);
         addSelection(tr("Import channels.conf"),
