diff -Nru vdr-1.4.7-org/channels.c vdr-1.4.7/channels.c --- vdr-1.4.7-org/channels.c 2006-05-28 17:03:40.000000000 +0200 +++ vdr-1.4.7/channels.c 2007-07-04 21:28:36.000000000 +0200 @@ -1007,6 +1007,18 @@ } return NULL; } +cChannel *cChannels::GetByTransponderID(tChannelID ChannelID) +{ + int source = ChannelID.Source(); + int nid = ChannelID.Nid(); // networkd + int tid = ChannelID.Tid(); // transponderId + + for (cChannel *channel = Channels.First(); channel; channel = Channels.Next(channel)) { + if (channel->Tid() == tid && channel->Nid() == nid && channel->Source() == source) + return channel; + } + return NULL; +} bool cChannels::HasUniqueChannelID(cChannel *NewChannel, cChannel *OldChannel) { diff -Nru vdr-1.4.7-org/channels.h vdr-1.4.7/channels.h --- vdr-1.4.7-org/channels.h 2006-05-28 17:03:56.000000000 +0200 +++ vdr-1.4.7/channels.h 2007-07-04 21:29:24.000000000 +0200 @@ -238,6 +238,7 @@ cChannel *GetByNumber(int Number, int SkipGap = 0); cChannel *GetByServiceID(int Source, int Transponder, unsigned short ServiceID); cChannel *GetByChannelID(tChannelID ChannelID, bool TryWithoutRid = false, bool TryWithoutPolarization = false); + cChannel *cChannels::GetByTransponderID(tChannelID ChannelID); int BeingEdited(void) { return beingEdited; } void IncBeingEdited(void) { beingEdited++; } void DecBeingEdited(void) { beingEdited--; } diff -Nru vdr-1.4.7-org/eit.c vdr-1.4.7/eit.c --- vdr-1.4.7-org/eit.c 2006-10-09 18:14:36.000000000 +0200 +++ vdr-1.4.7/eit.c 2007-07-04 21:27:20.000000000 +0200 @@ -196,7 +196,12 @@ link->SetName(linkName, "", ""); } else if (Setup.UpdateChannels >= 4) { - link = Channels.NewChannel(channel, linkName, "", "", ld->getOriginalNetworkId(), ld->getTransportStreamId(), ld->getServiceId()); + if (channel->Tid() != ld->getTransportStreamId()) { + cChannel *transponder = Channels.GetByTransponderID(linkID); + link = Channels.NewChannel(transponder, linkName, "", "", ld->getOriginalNetworkId(), ld->getTransportStreamId(), ld->getServiceId()); + } + else + link = Channels.NewChannel(channel, linkName, "", "", ld->getOriginalNetworkId(), ld->getTransportStreamId(), ld->getServiceId()); //XXX patFilter->Trigger(); } if (link) {