Index: libs/libmythtv/dvbcam.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/dvbcam.cpp,v
retrieving revision 1.16
diff -u -r1.16 dvbcam.cpp
--- libs/libmythtv/dvbcam.cpp	2 Feb 2005 21:01:02 -0000	1.16
+++ libs/libmythtv/dvbcam.cpp	25 Apr 2005 09:27:02 -0000
@@ -280,12 +280,12 @@
         const unsigned short *casids = ciHandler->GetCaSystemIds(s);
         if (!casids)
         {
-            ERROR(QString("CA: GetCaSystemIds returned NULL!"));
+            ERROR(QString("CA: GetCaSystemIds returned NULL! (Slot #%1)").arg(s));
             continue;
         }
         if (!*casids)
         {
-            ERROR(QString("CA: CAM supports no CA systems!"));
+            ERROR(QString("CA: CAM supports no CA systems! (Slot #%1)").arg(s));
             continue;
         }
 
@@ -293,13 +293,16 @@
         cCiCaPmt capmt(pmt.ServiceID, cplm);
 
         // Add CA descriptors for the service
-        for (int q = 0; casids[q]; q++)
+        CAList::Iterator ca;
+        for (ca = pmt.CA.begin(); ca!= pmt.CA.end(); ++ca)
         {
-            CAMap::Iterator ca = pmt.CA.find(casids[q]);
-            if (ca != pmt.CA.end())
+            for (int q = 0; casids[q]; q++)
             {
-                GENERAL(QString("CA: Adding CA descriptor: CASID=0x%1, ECM PID=%2").arg((*ca).CASystemID, 0, 16).arg((*ca).PID));
-                capmt.AddCaDescriptor((*ca).CASystemID, (*ca).PID, (*ca).Data_Length, (*ca).Data);
+                if ((*ca).CASystemID == casids[q])
+                {
+                    GENERAL(QString("CA: Adding CA descriptor: CASID=0x%1, ECM PID=%2").arg((*ca).CASystemID, 0, 16).arg((*ca).PID));
+                    capmt.AddCaDescriptor((*ca).CASystemID, (*ca).PID, (*ca).Data_Length, (*ca).Data);
+                }
             }
         }
 
@@ -309,16 +312,18 @@
         {
             if ((*es).Record)
             {
-                GENERAL(QString("CA: Adding stream: %1, PID=%2").arg((*es).Description).arg((*es).PID));
+                GENERAL(QString("CA: Adding elementary stream: %1, PID=%2").arg((*es).Description).arg((*es).PID));
                 capmt.AddElementaryStream((*es).Orig_Type, (*es).PID);
 
-                for (int q = 0; casids[q]; q++)
+                for (ca = (*es).CA.begin(); ca != (*es).CA.end(); ++ca)
                 {
-                    CAMap::Iterator ca = (*es).CA.find(casids[q]);
-                    if (ca != (*es).CA.end())
+                    for (int q = 0; casids[q]; q++)
                     {
-                        GENERAL(QString("CA: Adding CA descriptor: CASID=0x%1,ECM PID=%2").arg((*ca).CASystemID, 0, 16).arg((*ca).PID));
-                        capmt.AddCaDescriptor((*ca).CASystemID, (*ca).PID, (*ca).Data_Length, (*ca).Data);
+                        if ((*ca).CASystemID == casids[q])
+                        {
+                            GENERAL(QString("CA: Adding elementary CA descriptor: CASID=0x%1, ECM PID=%2").arg((*ca).CASystemID, 0, 16).arg((*ca).PID));
+                            capmt.AddCaDescriptor((*ca).CASystemID, (*ca).PID, (*ca).Data_Length, (*ca).Data);
+                        }
                     }
                 }
             }
Index: libs/libmythtv/sitypes.h
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/sitypes.h,v
retrieving revision 1.5
diff -u -r1.5 sitypes.h
--- libs/libmythtv/sitypes.h	27 Mar 2005 18:18:56 -0000	1.5
+++ libs/libmythtv/sitypes.h	25 Apr 2005 09:27:02 -0000
@@ -273,7 +275,7 @@
     uint8_t  Data_Length;
     uint8_t  Data[256];
 };
-typedef QMap<uint16_t, CAPMTObject> CAMap;
+typedef QValueList<CAPMTObject> CAList;
 
 class Descriptor
 {
@@ -299,7 +301,7 @@
     uint16_t PID;
     QString Description;
     QString Language;
-    CAMap CA;
+    CAList CA;
     DescriptorList Descriptors;
     bool Record;
 };
@@ -429,7 +432,7 @@
     uint16_t PCRPID;
     uint16_t ServiceID;
     uint16_t PMTPID;
-    CAMap CA;
+    CAList CA;
     DescriptorList Descriptors;
     QValueList<ElementaryPIDObject> Components;
 
Index: libs/libmythtv/siparser.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/siparser.cpp,v
retrieving revision 1.16
diff -u -r1.16 siparser.cpp
--- libs/libmythtv/siparser.cpp	15 Apr 2005 00:46:08 -0000	1.16
+++ libs/libmythtv/siparser.cpp	25 Apr 2005 09:27:03 -0000
@@ -679,7 +679,7 @@
             case 0x09:
                 {
                     CAPMTObject cad = ParseDescriptorCA(&buffer[pos], buffer[pos+1]);
-                    p.CA.insert(cad.CASystemID, cad);
+                    p.CA.append(cad);
                     p.hasCA = true;
                 }
                 break;
@@ -753,7 +753,7 @@
                 // so any CA descriptors should *not* be added to the descriptor list.
                 // We need a CAPMTObject to send to the CAM though.
                 CAPMTObject cad = ParseDescriptorCA(descriptor, descriptor_len);
-                e.CA.insert(cad.CASystemID, cad);
+                e.CA.append(cad);
                 p.hasCA = true;
             }
             else
