diff --git a/mythtv/libs/libmythtv/mpeg/mpegtables.cpp b/mythtv/libs/libmythtv/mpeg/mpegtables.cpp
index 8a0619c..189ca5e 100644
--- a/mythtv/libs/libmythtv/mpeg/mpegtables.cpp
+++ b/mythtv/libs/libmythtv/mpeg/mpegtables.cpp
@@ -66,6 +66,77 @@ uint StreamID::Normalize(uint stream_id, const desc_list_t &desc,
     return stream_id;
 }
 
+bool PSIPTable::HasCRC(void) const
+{
+    switch (TableID())
+        {
+            case TableID::PAT:
+            case TableID::CAT:
+            case TableID::PMT:
+                return true;
+//            case TableID::TSDT
+
+            // DVB manditory
+            case TableID::NIT:
+            case TableID::SDT:
+            case TableID::PF_EIT:
+                return true;
+            case TableID::TDT:
+                return false;
+
+            // DVB optional
+            case TableID::NITo:
+            case TableID::SDTo:
+            case TableID::BAT:
+            case TableID::PF_EITo:
+                return true;
+            case TableID::RST:
+            case TableID::ST:
+                return false;
+            case TableID::TOT:
+                return true;
+//            case TableID::RNT:
+//            case TableID::CT:
+//            case TableID::RCT:
+//            case TableID::CIT:
+//            case TableID::MPEFEC:
+            case TableID::DIT:
+                return false;
+            case TableID::SIT:
+                return true;
+
+            // ATSC
+//          case TableID::STUFFING:
+//          case TableID::CAPTION:
+//          case TableID::CENSOR:
+
+//          case TableID::ECN:
+//          case TableID::SRVLOC:
+//          case TableID::TSS:
+//          case TableID::CMPNAME:
+
+//          case TableID::MGT:
+//          case TableID::TVCT:
+//          case TableID::CVCT:
+//          case TableID::RRT:
+//          case TableID::EIT:
+//          case TableID::ETT:
+//          case TableID::STT:
+
+//          case TableID::DCCT:
+//          case TableID::DCCSCT:
+        }
+
+    // DVB Longterm EIT data
+    if (TableID::SC_EITbeg <= TableID() && TableID()<= TableID::SC_EITendo)
+        return true;
+    // Dishnet Longterm EIT data
+    if (TableID::DN_EITbego <= TableID() && TableID()<= TableID::DN_EITendo)
+        return true;
+
+    return false;
+}
+
 const bool PSIPTable::VerifyPSIP(bool verify_crc) const
 {
     if (verify_crc && (CalcCRC() != CRC()))
diff --git a/mythtv/libs/libmythtv/mpeg/mpegtables.h b/mythtv/libs/libmythtv/mpeg/mpegtables.h
index b1feba5..44fd189 100644
--- a/mythtv/libs/libmythtv/mpeg/mpegtables.h
+++ b/mythtv/libs/libmythtv/mpeg/mpegtables.h
@@ -359,6 +359,8 @@ class PSIPTable : public PESPacket
     // only for real ATSC PSIP tables, not similar MPEG2 tables
     void SetProtocolVersion(int ver) { pesdata()[8] = ver; }
 
+    bool HasCRC(void) const;
+
     const bool VerifyPSIP(bool verify_crc) const;
 
     const QString toString(void) const;
@@ -627,7 +629,7 @@ class ConditionalAccessTable : public PSIPTable
     // for (i = 0; i < N; i++)      8.0      64
     //   { descriptor() }
     uint DescriptorsLength(void) const
-        { return SectionLength() - PSIP_OFFSET - (HasCRC() ? 4 : 0); }
+        { return SectionLength() - PSIP_OFFSET;}
     const unsigned char *Descriptors(void) const { return psipdata(); }
 
     // CRC_32 32 rpchof
diff --git a/mythtv/libs/libmythtv/mpeg/pespacket.h b/mythtv/libs/libmythtv/mpeg/pespacket.h
index 4df91e3..1198b1b 100644
--- a/mythtv/libs/libmythtv/mpeg/pespacket.h
+++ b/mythtv/libs/libmythtv/mpeg/pespacket.h
@@ -182,7 +182,7 @@ class PESPacket
     /// 1 bit  Additional Copy Info field is present
     bool HasACI()             const { return (_pesdata[4] & 0x4) >> 2; }
     /// 1 bit  Cyclic Redundancy Check present
-    bool HasCRC()             const { return (_pesdata[4] & 0x2) >> 1; }
+    virtual bool HasCRC()     const { return (_pesdata[4] & 0x2) >> 1; }
     /// 1 bit  Extension flags are present
     bool HasExtensionFlags()  const { return _pesdata[4] & 0x1; }
 
