diff -Nru vdr-1.7.21-patched-4/eit.c vdr-1.7.21-patched-5/eit.c --- vdr-1.7.21-patched-4/eit.c 2010-05-14 17:08:35.000000000 +0300 +++ vdr-1.7.21-patched-5/eit.c 2011-10-11 14:59:33.208087853 +0300 @@ -65,7 +65,7 @@ SegmentEnd = StartTime + Duration; cEvent *newEvent = NULL; cEvent *rEvent = NULL; - cEvent *pEvent = (cEvent *)pSchedule->GetEvent(SiEitEvent.getEventId(), StartTime); + cEvent *pEvent = (cEvent *)pSchedule->GetEvent(SiEitEvent.getEventId(), StartTime, Duration / 2); if (!pEvent) { if (OnlyRunningStatus) continue; diff -Nru vdr-1.7.21-patched-4/epg.c vdr-1.7.21-patched-5/epg.c --- vdr-1.7.21-patched-4/epg.c 2011-02-25 17:16:05.000000000 +0200 +++ vdr-1.7.21-patched-5/epg.c 2011-10-11 15:02:06.756087852 +0300 @@ -915,12 +915,16 @@ return p; } -const cEvent *cSchedule::GetEvent(tEventID EventID, time_t StartTime) const +const cEvent *cSchedule::GetEvent(tEventID EventID, time_t StartTime, int Around) const { // Returns the event info with the given StartTime or, if no actual StartTime // is given, the one with the given EventID. - if (StartTime > 0) // 'StartTime < 0' is apparently used with NVOD channels - return eventsHashStartTime.Get(StartTime); + if (StartTime > 0) { // 'StartTime < 0' is apparently used with NVOD channels + if (Around) + return GetEventAround(StartTime + Around); + else + return eventsHashStartTime.Get(StartTime); + } else return eventsHashID.Get(EventID); } diff -Nru vdr-1.7.21-patched-4/epg.h vdr-1.7.21-patched-5/epg.h --- vdr-1.7.21-patched-4/epg.h 2011-02-25 16:14:38.000000000 +0200 +++ vdr-1.7.21-patched-5/epg.h 2011-10-11 15:01:10.984087852 +0300 @@ -170,7 +170,7 @@ const cList *Events(void) const { return &events; } const cEvent *GetPresentEvent(void) const; const cEvent *GetFollowingEvent(void) const; - const cEvent *GetEvent(tEventID EventID, time_t StartTime = 0) const; + const cEvent *GetEvent(tEventID EventID, time_t StartTime = 0, int Around = 0) const; const cEvent *GetEventAround(time_t Time) const; void Dump(FILE *f, const char *Prefix = "", eDumpMode DumpMode = dmAll, time_t AtTime = 0) const; static bool Read(FILE *f, cSchedules *Schedules); diff -Nru vdr-1.7.21-patched-4/svdrp.c vdr-1.7.21-patched-5/svdrp.c --- vdr-1.7.21-patched-4/svdrp.c 2011-09-12 18:48:57.768895001 +0300 +++ vdr-1.7.21-patched-5/svdrp.c 2011-10-11 12:02:06.248087853 +0300 @@ -585,8 +585,14 @@ } } if (Schedule) { - Schedule->Cleanup(INT_MAX); cEitFilter::SetDisableUntil(time(NULL) + EITDISABLETIME); + for (cTimer *Timer = Timers.First(); Timer; Timer = Timers.Next(Timer)) { + tChannelID TimerChannelID = Timer->Channel()->GetChannelID(); + TimerChannelID.ClrRid(); + if (ChannelID == TimerChannelID) + Timer->SetEvent(NULL); + } + Schedule->Cleanup(INT_MAX); Reply(250, "EPG data of channel \"%s\" cleared", Option); } else {