diff -Nurp -x '*~' vdr-1.4.0/device.c vdr-1.4.0-fix2/device.c
--- vdr-1.4.0/device.c	2006-04-14 17:34:43.000000000 +0300
+++ vdr-1.4.0-fix2/device.c	2006-05-14 01:10:25.000000000 +0300
@@ -293,18 +293,16 @@ cDevice *cDevice::GetDevice(const cChann
             pri = 1; // free and fewer Ca's
          else if (!device[i]->Receiving() && !device[i]->HasDecoder())
             pri = 2; // free and not a full featured card
-         else if (!device[i]->Receiving() && device[i] != ActualDevice())
-            pri = 3; // free and not the actual device
          else if (!device[i]->Receiving() && !device[i]->IsPrimaryDevice())
-            pri = 4; // free and not the primary device
+            pri = 3; // free and not the primary device
          else if (!device[i]->Receiving())
-            pri = 5; // free
+            pri = 4; // free
          else if (d && device[i]->Priority() < d->Priority())
-            pri = 6; // receiving but priority is lower
+            pri = 5; // receiving but priority is lower
          else if (d && device[i]->Priority() == d->Priority() && device[i]->ProvidesCa(Channel) < d->ProvidesCa(Channel))
-            pri = 7; // receiving with same priority but fewer Ca's
+            pri = 6; // receiving with same priority but fewer Ca's
          else
-            pri = 8; // all others
+            pri = 7; // all others
          if (pri <= select) {
             select = pri;
             d = device[i];
@@ -1183,6 +1181,8 @@ int cDevice::ProvidesCa(const cChannel *
 
 bool cDevice::Receiving(bool CheckAny) const
 {
+  if (this == cTransferControl::ReceiverDevice())
+      return true;
   for (int i = 0; i < MAXRECEIVERS; i++) {
       if (receiver[i] && (CheckAny || receiver[i]->priority >= 0)) // cReceiver with priority < 0 doesn't count
          return true;
