diff -Nup vdr-1.5.12/channels.c vdr-1.5.12mod/channels.c --- vdr-1.5.12/channels.c 2007-10-13 01:40:53.000000000 +1100 +++ vdr-1.5.12mod/channels.c 2008-01-08 23:41:56.000000000 +1000 @@ -876,6 +876,7 @@ cChannels::cChannels(void) modified = CHANNELSMOD_NONE; } + void cChannels::DeleteDuplicateChannels(void) { cList ChannelSorter; @@ -887,12 +888,21 @@ void cChannels::DeleteDuplicateChannels( cChannelSorter *cs = ChannelSorter.First(); while (cs) { cChannelSorter *next = ChannelSorter.Next(cs); - if (next && cs->channelID == next->channelID) { + if (next && cs->channelID == next->channelID && cs->channel->Transponder() == next->channel->Transponder() && !strcmp(cs->channel->PluginParam(), next->channel->PluginParam()) ) { dsyslog("deleting duplicate channel %s", *next->channel->ToText()); Del(next->channel); } - cs = next; - } + else if (next && cs->channelID == next->channelID) { + dsyslog("deleting duplicate id %s", *next->channel->ToText()); + int sid = cs->channel->Sid(); + int nid = cs->channel->Nid(); + int tid = cs->channel->Tid(); + int rid = cs->channel->Rid(); + next->channel->SetId(nid, tid, sid, rid+1); + } + cs = next; + } + Channels.Save(); } bool cChannels::Load(const char *FileName, bool AllowComments, bool MustExist) diff -Nup vdr-1.5.12/nit.c vdr-1.5.12mod/nit.c --- vdr-1.5.12/nit.c 2007-08-18 01:02:45.000000000 +1100 +++ vdr-1.5.12mod/nit.c 2007-12-29 13:39:39.000000000 +1000 @@ -143,7 +143,7 @@ void cNitFilter::Process(u_short Pid, u_ if (Setup.UpdateChannels >= 5) { bool found = false; for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { - if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { + if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Transponder() == Transponder() && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { int transponder = Channel->Transponder(); if (!ISTRANSPONDER(cChannel::Transponder(Frequency, Polarization), transponder)) { for (int n = 0; n < NumFrequencies; n++) { diff -Nup vdr-1.5.12/sdt.c vdr-1.5.12mod/sdt.c --- vdr-1.5.12/sdt.c 2007-06-10 19:50:49.000000000 +1100 +++ vdr-1.5.12mod/sdt.c 2008-01-08 23:48:59.000000000 +1000 @@ -78,7 +78,7 @@ void cSdtFilter::Process(u_short Pid, u_ char *pp = compactspace(ProviderNameBuf); if (channel) { channel->SetId(sdt.getOriginalNetworkId(), sdt.getTransportStreamId(), SiSdtService.getServiceId()); - if (Setup.UpdateChannels == 1 || Setup.UpdateChannels >= 3) + if ((Setup.UpdateChannels == 1 || Setup.UpdateChannels >= 3) && channel->Transponder() == Transponder()) channel->SetName(pn, ps, pp); // Using SiSdtService.getFreeCaMode() is no good, because some // tv stations set this flag even for non-encrypted channels :-(