diff -Naur vdr-1.5.8.org/device.c vdr-1.5.8/device.c --- vdr-1.5.8.org/device.c 2009-01-09 20:29:11.566636114 -0500 +++ vdr-1.5.8/device.c 2009-01-09 20:39:59.374745508 -0500 @@ -331,6 +331,9 @@ // difference, because it results in the most significant bit of the result. uint32_t imp = 0; imp <<= 1; imp |= LiveView ? !device[i]->IsPrimaryDevice() || ndr : 0; // prefer the primary device for live viewing if we don't need to detach existing receivers + if (Channel->Modulation() == 0) { + imp <<= 3; imp |= i; + } imp <<= 1; imp |= !device[i]->Receiving() && (device[i] != cTransferControl::ReceiverDevice() || device[i]->IsPrimaryDevice()) || ndr; // use receiving devices if we don't need to detach existing receivers, but avoid primary device in local transfer mode imp <<= 1; imp |= device[i]->Receiving(); // avoid devices that are receiving imp <<= 1; imp |= device[i] == cTransferControl::ReceiverDevice(); // avoid the Transfer Mode receiver device @@ -343,6 +346,7 @@ imp <<= 1; imp |= NumUsableSlots ? !ChannelCamRelations.CamDecrypt(Channel->GetChannelID(), j + 1) : 0; // prefer CAMs that are known to decrypt this channel if (imp < Impact) { // This device has less impact than any previous one, so we take it. + printf("choosing device %d\n",i); Impact = imp; d = device[i]; NeedsDetachReceivers = ndr; diff -Naur vdr-1.5.8.org/dvbdevice.c vdr-1.5.8/dvbdevice.c --- vdr-1.5.8.org/dvbdevice.c 2009-01-09 20:29:11.567620317 -0500 +++ vdr-1.5.8/dvbdevice.c 2009-01-09 20:35:49.441870515 -0500 @@ -807,7 +807,7 @@ bool hasPriority = Priority < 0 || Priority > this->Priority(); bool needsDetachReceivers = false; - if (ProvidesSource(Channel->Source()) && ProvidesModulation(Channel)) { + if (ProvidesSource(Channel->Source()) && cDvbDevice::ProvidesModulation(Channel)) { result = hasPriority; if (Priority >= 0 && Receiving(true)) { if (dvbTuner->IsTunedTo(Channel)) {