Index: libs/libmythtv/mpeg/dvbtables.cpp
===================================================================
--- libs/libmythtv/mpeg/dvbtables.cpp	(revision 9143)
+++ libs/libmythtv/mpeg/dvbtables.cpp	(working copy)
@@ -159,6 +159,9 @@
     // Standard Future Event Information Tables for other transports
     is_eit |= (TableID::SC_EITbego <= table_id &&
                TableID::SC_EITendo >= table_id);
+    // Dish Network Long Term Future Event Information for all transports
+    is_eit |= (TableID::DN_EITbego <= table_id &&
+               TableID::DN_EITendo >= table_id);
 
     return is_eit;
 }
Index: libs/libmythtv/mpeg/mpegtables.h
===================================================================
--- libs/libmythtv/mpeg/mpegtables.h	(revision 9143)
+++ libs/libmythtv/mpeg/mpegtables.h	(working copy)
@@ -183,6 +183,9 @@
     DVB_RST_PID   = 0x0013,
     DVB_TOT_PID   = 0x0013,
 
+				// Dishnet longterm EIT is on pid 0x300
+    DVB_DNLONG_EIT_PID = 0x0300,
+
     ATSC_PSIP_PID = 0x1ffb,
 };
 
@@ -225,6 +228,10 @@
         DIT      = 0x7e, // always on pid 0x1e
         SIT      = 0x7f, // always on pid 0x1f
 
+                         // Dishnet Longterm EIT data
+        DN_EITbego = 0x80, // always on pid 0x300
+        DN_EITendo = 0xfe, // always on pid 0x300
+
         // ATSC
         STUFFING = 0x80,
         CAPTION  = 0x86,
Index: libs/libmythtv/dvbsiparser.cpp
===================================================================
--- libs/libmythtv/dvbsiparser.cpp	(revision 9143)
+++ libs/libmythtv/dvbsiparser.cpp	(working copy)
@@ -91,6 +91,13 @@
     SIParser::deleteLater();
 }
 
+#ifdef USING_DVB_EIT
+void DVBSIParser::SetDishNetEIT(bool onoff)
+{
+    SIParser::SetDishNetEIT(onoff);
+}
+#endif
+
 /** \fn DVBSIParser::SystemInfoThread(void*)
  *  \brief Thunk that allows siparser_thread pthread to
  *         call DVBSIParser::StartSectionReader().
Index: libs/libmythtv/siparser.cpp
===================================================================
--- libs/libmythtv/siparser.cpp	(revision 9143)
+++ libs/libmythtv/siparser.cpp	(working copy)
@@ -73,6 +73,9 @@
 
     Reset();
 
+    // Default to not watch for Dishnet longterm EIT events
+    eit_dn_long = false;
+
     // Get a list of wanted languages and set up their priorities
     // (Lowest number wins)
     QStringList langPref = iso639_get_language_list();
@@ -127,6 +130,13 @@
     QObject::deleteLater();
 }
 
+#ifdef USING_DVB_EIT
+void SIParser::SetDishNetEIT(bool onoff)
+{
+    eit_dn_long = onoff;
+}
+#endif
+
 /* Resets all trackers, and closes all section filters */
 void SIParser::Reset()
 {
@@ -1085,6 +1095,12 @@
     Table[EVENTS]->DependencyMet(SERVICES);
     //Table[EVENTS]->AddPid(0x12,0x00,0x00,true); // see ticket #755
     Table[EVENTS]->AddPid(0x12,0x7F,0x80,0x12); // see ticket #755
+    // This should only be added based on the user enabling 7-9day dishnet
+    // EIT events
+
+    if (eit_dn_long)
+        Table[EVENTS]->AddPid(0x300,0x00,0x00,true);
+
 #endif // USING_DVB_EIT
 }
 
@@ -1150,9 +1166,11 @@
         // Event to use temporarily to fill in data
         Event event;
         event.ServiceID   = eit->ServiceID();
+        event.TableID     = eit->TableID();
         event.TransportID = eit->TSID();
         event.NetworkID   = eit->OriginalNetworkID();
         event.EventID     = eit->EventID(i);
+
         event.StartTime   = MythUTCToLocal(eit->StartTimeUTC(i));
         event.EndTime     = event.StartTime.addSecs(eit->DurationInSeconds(i));
 
@@ -1349,6 +1367,27 @@
         }
         break;
 
+        case DescriptorID::dish_ename:
+        {
+            int ht = (event.TableID > 0x80) ? 2 : 1;
+            if (data[1] > 1)
+                event.Event_Name = atsc_huffman2_to_string(data+3, data[1]-1, ht);
+        }
+        break;
+
+        case DescriptorID::dish_edescription:
+        {
+            int ht = (event.TableID > 0x80) ? 2 : 1;
+            if (data[1] > 2) 
+            {
+                if ((data[3] & 0xf8) == 0x80)
+                    event.Description = atsc_huffman2_to_string(data+4, data[1]-2, ht);
+                else
+                    event.Description = atsc_huffman2_to_string(data+3, data[1]-1, ht);
+            }
+        }
+        break;
+
         default:
             ProcessUnusedDescriptor(pid, data, descriptorLength + 2);
             break;
Index: libs/libmythtv/eit.h
===================================================================
--- libs/libmythtv/eit.h	(revision 9143)
+++ libs/libmythtv/eit.h	(working copy)
@@ -31,6 +31,7 @@
     uint    SourcePID;
     uint    TransportID;
     uint    NetworkID;
+    uint    TableID;
     uint    ServiceID;    ///< NOT the Virtual Channel Number used by ATSC
     uint    EventID;
     bool    Stereo;
Index: libs/libmythtv/videosource.cpp
===================================================================
--- libs/libmythtv/videosource.cpp	(revision 9143)
+++ libs/libmythtv/videosource.cpp	(working copy)
@@ -1353,6 +1353,17 @@
 private:
 };
 
+class DishNetEIT: public CheckBoxSetting, public CISetting
+{
+  public:
+    DishNetEIT(const CardInput& parent):
+        CISetting(parent, "dishnet_eit")
+    {
+        setLabel(QObject::tr("Gather DishNet LongTerm EIT Data"));
+        setValue(false);
+    };
+};
+
 CardInput::CardInput(bool isDVBcard)
 {
     addChild(id = new ID());
@@ -1397,24 +1408,32 @@
     group->addChild(startchan);
     group->addChild(new InputPreference(*this));
 
+    addChild(group);
+
 #ifdef USING_DVB
     if (isDVBcard)
     {
-        group->addChild(diseqcpos    = new DiSEqCPos(*this));
-        group->addChild(diseqcport   = new DiSEqCPort(*this));
-        group->addChild(lnblofswitch = new LNBLofSwitch(*this));
-        group->addChild(lnblofhi = new LNBLofHi(*this));
-        group->addChild(lnbloflo = new LNBLofLo(*this));
+        ConfigurationGroup *dvbgroup =
+          new VerticalConfigurationGroup(false, false, true, true);
+   
+        dvbgroup->addChild(diseqcpos    = new DiSEqCPos(*this));
+        dvbgroup->addChild(diseqcport   = new DiSEqCPort(*this));
+        dvbgroup->addChild(lnblofswitch = new LNBLofSwitch(*this));
+        dvbgroup->addChild(lnblofhi = new LNBLofHi(*this));
+        dvbgroup->addChild(lnbloflo = new LNBLofLo(*this));
+
         HorizontalConfigurationGroup *h1 =
             new HorizontalConfigurationGroup(false, false, true, true);
         h1->addChild(new FreeToAir(*this));
         h1->addChild(new RadioServices(*this));
-        group->addChild(h1);
+        dvbgroup->addChild(h1);
+
+        dvbgroup->addChild(new DishNetEIT(*this));
+        addChild(dvbgroup);
+
     }
 #endif
 
-    addChild(group);
-
     childid = new ChildID(*this);
     addChild(childid);
 
@@ -1423,6 +1442,7 @@
     connect(srcfetch, SIGNAL(pressed()), SLOT(sourceFetch()));
     connect(sourceid, SIGNAL(valueChanged(const QString&)),
             startchan,SLOT(  SetSourceID (const QString&)));
+   
 }
 
 QString CardInput::getSourceName(void) const
Index: libs/libmythtv/dbcheck.cpp
===================================================================
--- libs/libmythtv/dbcheck.cpp	(revision 9143)
+++ libs/libmythtv/dbcheck.cpp	(working copy)
@@ -10,7 +10,7 @@
 #include "mythdbcon.h"
 
 /// This is the DB schema version expected by the running MythTV instance.
-const QString currentDatabaseVersion = "1127";
+const QString currentDatabaseVersion = "1128";
 
 static bool UpdateDBVersionNumber(const QString &newnumber);
 static bool performActualUpdate(const QString updates[], QString version,
@@ -2048,6 +2048,16 @@
             return false;
     }
 
+    if(dbver == "1128")
+    {
+       const QString updates[] = {
+"ALTER TABLE cardinput ADD COLUMN dishnet_eit TINYINT(1) NOT NULL DEFAULT 0;",
+""
+};
+        if (!performActualUpdate(updates, "1128", dbver))
+            return false;
+    }
+
 //"ALTER TABLE capturecard DROP COLUMN dvb_recordts;" in 0.21
 //"ALTER TABLE capturecard DROP COLUMN dvb_hw_decoder;" in 0.21
 
Index: libs/libmythtv/tv_rec.cpp
===================================================================
--- libs/libmythtv/tv_rec.cpp	(revision 9143)
+++ libs/libmythtv/tv_rec.cpp	(working copy)
@@ -1064,6 +1064,24 @@
 #endif // USING_V4L
 }
 
+#ifdef USING_DVB_EIT
+bool TVRec::WantDishNetEIT(int cardnum)
+{
+    MSqlQuery query(MSqlQuery::InitCon());
+    QString theQuery = QString("SELECT dishnet_eit FROM cardinput "
+                               "WHERE cardid = %1")
+                       .arg(cardnum);
+    query.exec(theQuery);
+
+    // If we can pull the value, return it whatever it might be
+    if (query.next())
+        return query.value(0).toBool();
+
+    // Default to false
+    return false;
+}
+#endif
+
 void TVRec::CreateSIParser(int program_num)
 {
     (void) program_num;
@@ -1088,6 +1106,12 @@
             (program_num >= 0) ? program_num : service_id);
 
 #ifdef USING_DVB_EIT
+        if (WantDishNetEIT(GetCaptureCardNum()))
+        {
+            VERBOSE(VB_EIT, "Enabling DishNet Long Term EIT Support");
+            dvbsiparser->SetDishNetEIT(true);
+        }
+
         if (scanner)
             scanner->StartPassiveScan(dvbc, dvbsiparser);
 #endif // USING_DVB_EIT
Index: libs/libmythtv/tv_rec.h
===================================================================
--- libs/libmythtv/tv_rec.h	(revision 9143)
+++ libs/libmythtv/tv_rec.h	(working copy)
@@ -257,6 +257,10 @@
     void TeardownSignalMonitor(void);
     DTVSignalMonitor *GetDTVSignalMonitor(void);
 
+#ifdef USING_DVB_EIT
+    bool WantDishNetEIT(int cardnum);
+#endif
+
     void CreateSIParser(int num);
     void TeardownSIParser(void);
 
Index: libs/libmythtv/dvbsiparser.h
===================================================================
--- libs/libmythtv/dvbsiparser.h	(revision 9143)
+++ libs/libmythtv/dvbsiparser.h	(working copy)
@@ -76,6 +76,10 @@
     void StartSectionReader();
     void StopSectionReader();
 
+#ifdef USING_DVB_EIT
+    void SetDishNetEIT(bool onoff);
+#endif
+
 public slots:
     void deleteLater(void);
 
Index: libs/libmythtv/siparser.h
===================================================================
--- libs/libmythtv/siparser.h	(revision 9143)
+++ libs/libmythtv/siparser.h	(working copy)
@@ -121,6 +121,9 @@
     void ParseTable(uint8_t* buffer, int size, uint16_t pid);
     void CheckTrackers(void);
 
+#ifdef USING_DVB_EIT
+    void SetDishNetEIT(bool onoff);
+#endif
   public slots:
     virtual void deleteLater(void);
 
@@ -239,6 +242,8 @@
 #ifdef USING_DVB_EIT
     /// EITFixUp instance
     EITFixUp            eitfixup;
+
+    bool                eit_dn_long;
 #endif
 
     // statistics
