--- device.c.orig	2007-08-01 14:19:35.000000000 +0200
+++ device.c	2007-08-01 14:31:58.000000000 +0200
@@ -1171,10 +1171,14 @@
 int cDevice::ProvidesCa(const cChannel *Channel) const
 {
   int Ca = Channel->Ca();
-  if (Ca == CardIndex() + 1)
-     return 1; // exactly _this_ card was requested
-  if (Ca && Ca <= CA_DVB_MAX)
+  if (Ca && Ca <= CA_DVB_MAX) {
+     for (int i = 0; i < MAXCAIDS && Channel->Ca(i) != 0; i++)
+     {
+	 if (Channel->Ca(i) == CardIndex() + 1)
+	     return 1; // _this_ card was requested
+     }
      return 0; // a specific card was requested, but not _this_ one
+  }
   return !Ca; // by default every card can provide FTA
 }
 
--- channels.c.orig	2007-08-01 16:36:31.000000000 +0200
+++ channels.c	2007-08-01 16:37:16.000000000 +0200
@@ -790,8 +790,8 @@
               while ((q = strtok_r(p, ",", &strtok_next)) != NULL) {
                     if (NumCaIds < MAXCAIDS) {
                        caids[NumCaIds++] = strtol(q, NULL, 16) & 0xFFFF;
-                       if (NumCaIds == 1 && caids[0] <= 0x00FF)
-                          break;
+//                     if (NumCaIds == 1 && caids[0] <= 0x00FF)
+//                        break;
                        }
                     else
                        esyslog("ERROR: too many CA ids!"); // no need to set ok to 'false'
