Index: libs/libmythtv/mpeg/mpegstreamdata.cpp
===================================================================
--- libs/libmythtv/mpeg/mpegstreamdata.cpp	(revision 12577)
+++ libs/libmythtv/mpeg/mpegstreamdata.cpp	(working copy)
@@ -792,7 +792,26 @@
 
     if (IsEncryptionTestPID(tspacket.PID()))
     {
+#if 0
         ProcessEncryptedPacket(tspacket);
+#else
+	pmt_cache_t::const_iterator it = _cached_pmts.begin();
+	for (; it != _cached_pmts.end(); ++it)
+	{
+	    ProgramMapTable* pmt = *it;
+	    if (pmt->PCRPID() == tspacket.PID())
+	    {
+		if (ProcessEncryptedPacket(tspacket))
+		{
+		    pmt->ScrambledPCR = 1;
+		}
+		else
+		{
+		    pmt->ScrambledPCR = 0;
+		}
+	    }
+	}
+#endif
     }
     else
     if (ok && !tspacket.ScramplingControl() && tspacket.HasPayload() &&
@@ -1333,6 +1352,7 @@
     //        QString("Setting up decryption monitoring "
     //                "for program %1").arg(pmt->ProgramNumber()));
 
+#if 0
     bool encrypted = pmt->IsProgramEncrypted();
     for (uint i = 0; i < pmt->StreamCount(); i++)
     {
@@ -1347,6 +1367,9 @@
                 pmt->ProgramNumber(), pmt->StreamPID(i), is_vid);
         }
     }
+#else
+    AddEncryptionTestPID(pmt->ProgramNumber(), pmt->PCRPID(), 1);
+#endif
 }
 
 void MPEGStreamData::ResetDecryptionMonitoringState(void)
@@ -1383,7 +1406,7 @@
 /** \fn MPEGStreamData::ProcessEncryptedPacket(const TSPacket& tspacket)
  *  \brief counts en/decrypted packets to decide if a stream is en/decrypted
  */
-void MPEGStreamData::ProcessEncryptedPacket(const TSPacket& tspacket)
+bool MPEGStreamData::ProcessEncryptedPacket(const TSPacket& tspacket)
 {
     QMutexLocker locker(&_encryption_lock);
 
@@ -1409,7 +1432,7 @@
     }
 
     if (status == info.status)
-        return; // pid encryption status unchanged
+        return(!(info.status == kEncDecrypted)); // pid encryption status unchanged
 
     info.status = status;
 
@@ -1464,4 +1487,6 @@
 
     for (uint i = 0; i < pnum_del_list.size(); i++)
         RemoveEncryptionTestPIDs(pnums[i]);
+
+    return(!(info.status == kEncDecrypted));
 }
Index: libs/libmythtv/mpeg/mpegtables.h
===================================================================
--- libs/libmythtv/mpeg/mpegtables.h	(revision 12577)
+++ libs/libmythtv/mpeg/mpegtables.h	(working copy)
@@ -513,12 +513,14 @@
     {
         assert(TableID::PMT == TableID());
         Parse();
+        ScrambledPCR = 1;
     }
 
     ProgramMapTable(const PSIPTable& table) : PSIPTable(table)
     {
         assert(TableID::PMT == TableID());
         Parse();
+        ScrambledPCR = 1;
     }
 
     static ProgramMapTable* Create(uint programNumber, uint basepid,
@@ -652,6 +654,8 @@
 
     static const uint pmt_header = 4; // minimum PMT header offset
     mutable vector<unsigned char*> _ptrs; // used to parse
+    public:
+    uint ScrambledPCR;
 };
 
 /** \class ConditionalAccessTable
Index: libs/libmythtv/mpeg/mpegstreamdata.h
===================================================================
--- libs/libmythtv/mpeg/mpegstreamdata.h	(revision 12577)
+++ libs/libmythtv/mpeg/mpegstreamdata.h	(working copy)
@@ -254,7 +254,7 @@
     void DeletePartialPES(uint pid);
     void ProcessPAT(const ProgramAssociationTable *pat);
     void ProcessPMT(const ProgramMapTable *pmt);
-    void ProcessEncryptedPacket(const TSPacket&);
+    bool ProcessEncryptedPacket(const TSPacket&);
 
     static int ResyncStream(unsigned char *buffer, int curr_pos, int len);
 
Index: libs/libmythtv/mpeg/mpegtables.cpp
===================================================================
--- libs/libmythtv/mpeg/mpegtables.cpp	(revision 12577)
+++ libs/libmythtv/mpeg/mpegtables.cpp	(working copy)
@@ -451,12 +451,16 @@
  */
 bool ProgramMapTable::IsEncrypted(void) const
 {
+#if 0
     bool encrypted = IsProgramEncrypted();
 
     for (uint i = 0; !encrypted && i < StreamCount(); i++)
         encrypted |= IsStreamEncrypted(i);
 
     return encrypted;
+#else
+    return ScrambledPCR;
+#endif
 }
 
 /** \fn ProgramMapTable::IsProgramEncrypted(void) const
Index: libs/libmythtv/dtvsignalmonitor.cpp
===================================================================
--- libs/libmythtv/dtvsignalmonitor.cpp	(revision 12577)
+++ libs/libmythtv/dtvsignalmonitor.cpp	(working copy)
@@ -312,7 +312,12 @@
     AddFlags(kDTVSigMon_PMTSeen);
 
     if (programNumber < 0)
+    {
+#if 1
+        GetStreamData()->TestDecryption(pmt);
+#endif
         return; // don't print error messages during channel scan.
+    }
 
     if (pmt->ProgramNumber() != (uint)programNumber)
     {
@@ -322,7 +327,9 @@
         return; // Not the PMT we are looking for...
     }
 
+#if 0
     if (pmt->IsEncrypted())
+#endif
         GetStreamData()->TestDecryption(pmt);
 
     // if PMT contains audio and/or video stream set as matching.
@@ -338,7 +345,9 @@
     if ((hasVideo >= GetStreamData()->GetVideoStreamsRequired()) &&
         (hasAudio >= GetStreamData()->GetAudioStreamsRequired()))
     {
+#if 0
         if (pmt->IsEncrypted())
+#endif
             AddFlags(kDTVSigMon_WaitForCrypt);
 
         AddFlags(kDTVSigMon_PMTMatch);
