diff -Naur mythtv-master-20160121-g1f389ff-old/mythtv/libs/libmythtv/eitfixup.h mythtv-master-20160121-g1f389ff-new/mythtv/libs/libmythtv/eitfixup.h
--- mythtv-master-20160121-g1f389ff-old/mythtv/libs/libmythtv/eitfixup.h	2016-01-21 15:57:00.000000000 +0100
+++ mythtv-master-20160121-g1f389ff-new/mythtv/libs/libmythtv/eitfixup.h	2016-01-21 23:45:53.816717441 +0100
@@ -70,6 +70,7 @@
         kFixGreekSubtitle    = 1 << 29,
         kFixGreekEIT         = 1 << 30,
         kFixGreekCategories  = 1 << 31,
+        kEFixForceISO6937    = 1 << 32,
     };
 
     EITFixUp();
diff -Naur mythtv-master-20160121-g1f389ff-old/mythtv/libs/libmythtv/eithelper.cpp mythtv-master-20160121-g1f389ff-new/mythtv/libs/libmythtv/eithelper.cpp
--- mythtv-master-20160121-g1f389ff-old/mythtv/libs/libmythtv/eithelper.cpp	2016-01-21 15:56:57.000000000 +0100
+++ mythtv-master-20160121-g1f389ff-new/mythtv/libs/libmythtv/eithelper.cpp	2016-01-21 23:55:32.693963084 +0100
@@ -256,9 +256,17 @@
     unsigned char enc_7[3]  = { 0x10, 0x00, 0x07 }; // Latin/Greek Alphabet
     unsigned char enc_9[3]  = { 0x10, 0x00, 0x09 }; // could use { 0x05 } instead
     unsigned char enc_15[3] = { 0x10, 0x00, 0x0f }; // could use { 0x0B } instead
+    unsigned char enc_0[1]  = { 0x20 };
     int enc_len = 0;
     const unsigned char *enc = NULL;
 
+    // Use an encoding override of ISO 6937
+    if (fix & EITFixUp::kEFixForceISO6937)
+    {
+        enc = enc_0;
+        enc_len = sizeof(enc_0);
+    }
+
     // Is this BellExpressVU EIT (Canada) ?
     // Use an encoding override of ISO 8859-1 (Latin1)
     if (fix & EITFixUp::kEFixForceISO8859_1)
@@ -290,6 +298,8 @@
         enc = enc_15;
         enc_len = sizeof(enc_15);
     }
+    
+    
 
     // Is this broken DVB provider in Greece?
     // Use an encoding override of ISO 8859-7 (Latin/Greek)
@@ -377,15 +387,25 @@
         return;
 
     uint descCompression = (eit->TableID() > 0x80) ? 2 : 1;
-    FixupValue fix = fixup.value((FixupKey)eit->OriginalNetworkID() << 16);
+    uint fix = EITFixUp::kFixGenericDVB;
+    if (eit->SourceNetworkID() && eit->SourceTransportID()) {
+        fix |= fixup[1<<15 | (FixupKey)eit->SourceNetworkID() << 16];
+        fix |= fixup[1<<15 | (((FixupKey)eit->SourceTransportID()) << 32) |
+                     ((FixupKey)eit->SourceNetworkID() << 16)];
+        fix |= fixup[1<<15 | ((FixupKey)eit->SourceNetworkID() << 16) | (FixupKey)eit->ServiceID()];
+        fix |= fixup[1<<15 | (((FixupKey)eit->SourceTransportID()) << 32) |
+                     (FixupKey)((FixupKey)eit->SourceNetworkID() << 16) |
+                     (FixupKey)(FixupKey)eit->ServiceID()];
+    }
+    fix |= fixup[eit->OriginalNetworkID() << 16];
+
     fix |= fixup.value((((FixupKey)eit->TSID()) << 32) |
                  ((FixupKey)eit->OriginalNetworkID() << 16));
     fix |= fixup.value(((FixupKey)eit->OriginalNetworkID() << 16) |
                  (FixupKey)eit->ServiceID());
     fix |= fixup.value((((FixupKey)eit->TSID()) << 32) |
                  ((FixupKey)eit->OriginalNetworkID() << 16) |
-                  (FixupKey)eit->ServiceID());
-    fix |= EITFixUp::kFixGenericDVB;
+                 (FixupKey)eit->ServiceID());
 
     uint tableid   = eit->TableID();
     uint version   = eit->Version();
@@ -1060,6 +1080,9 @@
     ///////////////////////////////////////////////////////////////////////////
     // Fixups to make EIT provided listings more useful
     // transport_id<<32 | netword_id<<16 | service_id
+    // The service_id is a 13-bit field. Free bit number 15 
+    // is used here to determine that the data releate to 
+    // transponder, which sent the EIT, and not the program.
 
     // Bell Express VU Canada
     fix[  256U << 16] = EITFixUp::kFixBell;
@@ -1369,7 +1392,13 @@
 
     // Premiere
     fix[133 << 16] = EITFixUp::kEFixForceISO8859_15;
-
+    
+    // Cyfra+ ISO-6937 (source NID)
+    fix[1<<15 | 318<<16] = EITFixUp::kEFixForceISO6937;
+    
+    // Polsat ISO-8859-2 (source NID)
+    fix[1<<15 | 113<<16] = EITFixUp::kEFixForceISO8859_2;
+    
     // DVB-S Astra 19.2E French channels
     fix[     1022LL << 32 | 1 << 16 |  6901 ] = // DIRECT 8
         fix[ 1022LL << 32 | 1 << 16 |  6905 ] = // France 24 (en Francais)
diff -Naur mythtv-master-20160121-g1f389ff-old/mythtv/libs/libmythtv/mpeg/dvbdescriptors.cpp mythtv-master-20160121-g1f389ff-new/mythtv/libs/libmythtv/mpeg/dvbdescriptors.cpp
--- mythtv-master-20160121-g1f389ff-old/mythtv/libs/libmythtv/mpeg/dvbdescriptors.cpp	2016-01-21 15:56:59.000000000 +0100
+++ mythtv-master-20160121-g1f389ff-new/mythtv/libs/libmythtv/mpeg/dvbdescriptors.cpp	2016-01-21 23:45:53.820050759 +0100
@@ -88,9 +88,20 @@
         new unsigned char[raw_length + encoding_override_length];
 
     uint length = 0;
-    if (encoding_override && src[0] >= 0x20) {
-        memcpy(dst, encoding_override, encoding_override_length);
-        length = encoding_override_length;
+    if (encoding_override) {
+        if (src[0] >= 0x20) {
+            memcpy(dst, encoding_override, encoding_override_length);
+            length = encoding_override_length;
+        } else {
+            //incorrect ISO-8859 encoding marker, 
+            //when text has been encoded using ISO-6937
+            if (src[0] >= 0x01 && src[0] <= 0x0B
+                    && encoding_override_length == 1
+                    && encoding_override[0] == 0x20) {
+                src++;
+                raw_length--;
+            }
+        }
     }
 
     // Strip formatting characters
diff -Naur mythtv-master-20160121-g1f389ff-old/mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp mythtv-master-20160121-g1f389ff-new/mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp
--- mythtv-master-20160121-g1f389ff-old/mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp	2016-01-21 15:56:58.000000000 +0100
+++ mythtv-master-20160121-g1f389ff-new/mythtv/libs/libmythtv/mpeg/dvbstreamdata.cpp	2016-01-21 23:45:53.820050759 +0100
@@ -397,7 +397,7 @@
         SetVersionEIT(psip.TableID(), service_id, psip.Version(),  psip.LastSection());
         SetEITSectionSeen(psip.TableID(), service_id, psip.Section());
 
-        DVBEventInformationTable eit(psip);
+        DVBEventInformationTable eit(psip, _desired_netid, _desired_tsid);
         for (uint i = 0; i < _dvb_eit_listeners.size(); i++)
             _dvb_eit_listeners[i]->HandleEIT(&eit);
 
diff -Naur mythtv-master-20160121-g1f389ff-old/mythtv/libs/libmythtv/mpeg/dvbtables.h mythtv-master-20160121-g1f389ff-new/mythtv/libs/libmythtv/mpeg/dvbtables.h
--- mythtv-master-20160121-g1f389ff-old/mythtv/libs/libmythtv/mpeg/dvbtables.h	2016-01-21 15:56:59.000000000 +0100
+++ mythtv-master-20160121-g1f389ff-new/mythtv/libs/libmythtv/mpeg/dvbtables.h	2016-01-21 23:45:53.820050759 +0100
@@ -285,6 +285,15 @@
 class MTV_PUBLIC DVBEventInformationTable : public PSIPTable
 {
   public:
+    DVBEventInformationTable(const PSIPTable& table,
+                             uint SourceNetworkID, 
+                             uint SourceTransportID) : PSIPTable(table)
+    {
+        _source_netid = SourceNetworkID,
+        _source_tsid  = SourceTransportID;
+        assert(IsEIT(TableID()));
+        Parse();
+    }
     DVBEventInformationTable(const PSIPTable& table) : PSIPTable(table)
     {
     // table_id                 8   0.0       0xC7
@@ -362,9 +371,20 @@
     void Parse(void) const;
 
     static bool IsEIT(uint table_id);
+    
+    uint SourceNetworkID(void)   const { return _source_netid; }
+    uint SourceTransportID(void) const { return _source_tsid;  }
+    bool ActualTS() const {
+        return (TableID() == TableID::PF_EIT)
+                || ((TableID() > TableID::SC_EITbeg) 
+                     && (TableID() < TableID::SC_EITend));
+    }
+
 
   private:
     mutable vector<const unsigned char*> _ptrs; // used to parse
+    uint _source_netid;
+    uint _source_tsid;
 };
 
 /** \class TimeDateTable
