diff -ur vdr-1.7.10.orig/dvbdevice.c vdr-1.7.10/dvbdevice.c
--- vdr-1.7.10.orig/dvbdevice.c	2009-06-06 07:17:20.000000000 -0400
+++ vdr-1.7.10/dvbdevice.c	2009-11-22 13:26:57.000000000 -0500
@@ -319,6 +319,16 @@
      tuneTimeout = DVBT_TUNE_TIMEOUT;
      lockTimeout = DVBT_LOCK_TIMEOUT;
      }
+  else if (frontendType == SYS_ATSC) {
+     // ATSC
+     SETCMD(DTV_DELIVERY_SYSTEM, frontendType);
+     SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency()));
+     SETCMD(DTV_INVERSION, channel.Inversion());
+     SETCMD(DTV_MODULATION, channel.Modulation());
+     
+     tuneTimeout = DVBT_TUNE_TIMEOUT;
+     lockTimeout = DVBT_LOCK_TIMEOUT;     
+     }
   else {
      esyslog("ERROR: attempt to set channel with unknown DVB frontend type");
      return false;
@@ -904,7 +914,7 @@
   return type == cSource::stNone
       || type == cSource::stCable && (frontendType == SYS_DVBC_ANNEX_AC || frontendType == SYS_DVBC_ANNEX_B)
       || type == cSource::stSat   && (frontendType == SYS_DVBS || frontendType == SYS_DVBS2)
-      || type == cSource::stTerr  && (frontendType == SYS_DVBT);
+      || type == cSource::stTerr  && (frontendType == SYS_DVBT || frontendType == SYS_ATSC);
 }
 
 bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
diff -ur vdr-1.7.10.orig/pat.c vdr-1.7.10/pat.c
--- vdr-1.7.10.orig/pat.c	2009-08-16 11:01:03.000000000 -0400
+++ vdr-1.7.10/pat.c	2009-11-22 13:31:37.000000000 -0500
@@ -389,6 +389,7 @@
                       break;
               case 5: // STREAMTYPE_13818_PRIVATE
               case 6: // STREAMTYPE_13818_PES_PRIVATE
+              case 0x81: // ATSC AC-3
               //XXX case 8: // STREAMTYPE_13818_DSMCC
                       {
                       int dpid = 0;
@@ -397,6 +398,7 @@
                       for (SI::Loop::Iterator it; (d = stream.streamDescriptors.getNext(it)); ) {
                           switch (d->getDescriptorTag()) {
                             case SI::AC3DescriptorTag:
+                            case 0x81: // ATSC AC-3 descriptor tag
                                  dpid = esPid;
                                  break;
                             case SI::SubtitlingDescriptorTag:
diff -ur vdr-1.7.10.orig/remux.c vdr-1.7.10/remux.c
--- vdr-1.7.10.orig/remux.c	2009-11-22 06:23:27.000000000 -0500
+++ vdr-1.7.10/remux.c	2009-11-22 13:31:28.000000000 -0500
@@ -532,6 +532,7 @@
                       }
                       break;
            case 0x06: // STREAMTYPE_13818_PES_PRIVATE
+           case 0x81: // ATSC AC-3
                       {
                       int dpid = 0;
                       char lang[MAXLANGCODE1] = "";
@@ -539,6 +540,7 @@
                       for (SI::Loop::Iterator it; (d = stream.streamDescriptors.getNext(it)); ) {
                           switch (d->getDescriptorTag()) {
                             case SI::AC3DescriptorTag:
+                            case 0x81: // ATSC AC-3 descriptor tag
                                  dbgpatpmt(" AC3");
                                  dpid = stream.getPid();
                                  break;
