diff -rupN b/zappilotosd.c a/zappilotosd.c
--- b/zappilotosd.c	2015-06-24 14:32:15.000000000 +0200
+++ a/zappilotosd.c	2015-10-22 18:39:36.000000000 +0200
@@ -69,7 +69,7 @@ cZappilotOsd::~cZappilotOsd(void)
 
 void cZappilotOsd::DisplayChannel(const cChannel *Channel)
 {
-   int BufSize = 255;
+   int BufSize = 1020;
    if (Channel)
    {
       if (Channel->GroupSep())
@@ -172,11 +172,11 @@ void cZappilotOsd::UpdateEPGInfo(int Now
    titleFollowingInfo = NULL;
    subtitlePresentInfo = NULL;
    subtitleFollowingInfo = NULL;
-   cSchedulesLock SchedulesLock;
-   const cSchedules *Schedules = cSchedules::Schedules(SchedulesLock);
+   LOCK_SCHEDULES_READ;
+   LOCK_CHANNELS_READ;
    if (Schedules)
    {
-      const cSchedule *Schedule = Schedules->GetSchedule(Channels.GetByNumber(PilotChannelNumber)->GetChannelID());
+      const cSchedule *Schedule = Schedules->GetSchedule(Channels->GetByNumber(PilotChannelNumber)->GetChannelID());
       if (Schedule)
       {
          // Get Present event
@@ -267,9 +267,9 @@ void cZappilotOsd::UpdateEPGInfo(int Now
 void cZappilotOsd::Show()
 {
    // find the actual current
-   cChannel *Channel =  Channels.GetByNumber(cDevice::PrimaryDevice()->CurrentChannel());
-   currentChannel = Channels.GetByNumber(cDevice::PrimaryDevice()->CurrentChannel());
-
+   LOCK_CHANNELS_READ;
+   const cChannel *Channel =  Channels->GetByNumber(cDevice::PrimaryDevice()->CurrentChannel());
+   currentChannel = Channel;
    if (Channel)
    {
       PilotChannelNumber = Channel->Number();
@@ -333,13 +333,14 @@ eOSState cZappilotOsd::ProcessKey(eKeys
          case k1 ... k9:
             if (number >= 0)
             {
-               if (number > Channels.MaxNumber())
+               LOCK_CHANNELS_READ;
+               if (number > Channels->MaxNumber())
                   number = Key - k0;
                else
                   number = number * 10 + Key - k0;
                if (number > 0)
                {
-                  cChannel *channel = Channels.GetByNumber(number);
+                  const cChannel *channel = Channels->GetByNumber(number);
                   if (channel)
                   {
                      PilotChannelNumber = channel->Number();
@@ -363,7 +364,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys
             if (config.fastbrowse)
             {
                CursorDown();
-               cChannel *channel = Channels.GetByNumber(PilotChannelNumber);
+               LOCK_CHANNELS_READ;
+               const cChannel *channel = Channels->GetByNumber(PilotChannelNumber);
                if (channel)
                   group = channel->Index()-1;
                break;
@@ -380,7 +382,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys
             if (config.fastbrowse)
             {
                CursorUp();
-               cChannel *channel = Channels.GetByNumber(PilotChannelNumber);
+               LOCK_CHANNELS_READ;
+               const cChannel *channel = Channels->GetByNumber(PilotChannelNumber);
                if (channel)
                   group = channel->Index()-1;
                break;
@@ -396,7 +399,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys
             {
                if (group < 0)
                {
-                  cChannel *channel = Channels.GetByNumber(PilotChannelNumber);
+                  LOCK_CHANNELS_READ;
+                  const cChannel *channel = Channels->GetByNumber(PilotChannelNumber);
                   if (channel)
                      group = channel->Index();
                }
@@ -405,15 +409,18 @@ eOSState cZappilotOsd::ProcessKey(eKeys
                   int SaveGroup = group;
                   if (NORMALKEY(Key) == kRight)
                   {
-                     group = Channels.GetNextGroup(group);
+                     LOCK_CHANNELS_READ;
+                     group = Channels->GetNextGroup(group);
                   }
                   else
                   {
-                     group = Channels.GetPrevGroup(group < 1 ? 1 : group);
+                   LOCK_CHANNELS_READ;
+                   group = Channels->GetPrevGroup(group < 1 ? 1 : group);
                   }
                   if (group < 0)
                      group = SaveGroup;
-                  cChannel *channel = Channels.Get(group);
+                  LOCK_CHANNELS_READ;
+                  const cChannel *channel = Channels->Get(group);
                   if (channel)
                   {
                      //DisplayChannel(channel);
@@ -449,7 +456,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys
             else
             {
                CursorUp();
-               cChannel *channel = Channels.GetByNumber(PilotChannelNumber);
+               LOCK_CHANNELS_READ;
+               const cChannel *channel = Channels->GetByNumber(PilotChannelNumber);
                if (channel)
                   group = channel->Index()-1;
                break;
@@ -466,20 +474,22 @@ eOSState cZappilotOsd::ProcessKey(eKeys
             else
             {
                CursorDown();
-               cChannel *channel = Channels.GetByNumber(PilotChannelNumber);
+               LOCK_CHANNELS_READ;
+               const cChannel *channel = Channels->GetByNumber(PilotChannelNumber);
                if (channel)
-                  group = channel->Index()-1;
+                 group = channel->Index()-1;
                break;
             }
          case kNone:
             if (number && (int)cTimeMs::Now() - lastTime > 1000)
             {
-               if (Channels.GetByNumber(number))
+               LOCK_CHANNELS_READ;
+               if (Channels->GetByNumber(number))
                {
                   PilotChannelNumber = number;
                   lastTime = cTimeMs::Now();
                   number = 0;
-                  cChannel *channel = Channels.GetByNumber(PilotChannelNumber);
+                  const cChannel *channel = Channels->GetByNumber(PilotChannelNumber);
                   if (channel)
                      group = channel->Index()-1;
                }
@@ -553,7 +563,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys
             {
                if (group < 0)
                {
-                  cChannel *channel = Channels.GetByNumber(PilotChannelNumber);
+                  LOCK_CHANNELS_READ;
+                  const cChannel *channel = Channels->GetByNumber(PilotChannelNumber);
                   if (channel)
                      group = channel->Index();
                }
@@ -562,15 +573,18 @@ eOSState cZappilotOsd::ProcessKey(eKeys
                   int SaveGroup = group;
                   if (NORMALKEY(Key) == kBlue)
                   {
-                     group = Channels.GetNextGroup(group);
+                     LOCK_CHANNELS_READ;
+                     group = Channels->GetNextGroup(group);
                   }
                   else
                   {
-                     group = Channels.GetPrevGroup(group < 1 ? 1 : group);
+                     LOCK_CHANNELS_READ;                  
+                     group = Channels->GetPrevGroup(group < 1 ? 1 : group);
                   }
                   if (group < 0)
                      group = SaveGroup;
-                  cChannel *channel = Channels.Get(group);
+                  LOCK_CHANNELS_READ;                                       
+                  const cChannel *channel = Channels->Get(group);
                   if (channel)
                   {
                      //DisplayChannel(channel);
@@ -663,8 +677,8 @@ eOSState cZappilotOsd::ProcessKey(eKeys
 void cZappilotOsd::CursorUp()
 {
    int n = PilotChannelNumber + 1;
-   cChannel *channel;
-   channel = Channels.GetByNumber(n, 1);
+   LOCK_CHANNELS_READ;
+   const cChannel *channel = Channels->GetByNumber(n, 1);
    if (channel)
    {
       n = channel->Number();
@@ -678,8 +692,8 @@ void cZappilotOsd::CursorUp()
 void cZappilotOsd::CursorDown()
 {
    int n = PilotChannelNumber - 1;
-   cChannel *channel;
-   channel = Channels.GetByNumber(n, -1);
+   LOCK_CHANNELS_READ;
+   const cChannel *channel = Channels->GetByNumber(n, -1);
    if (channel)
    {
       n = channel->Number();
@@ -693,9 +707,13 @@ void cZappilotOsd::CursorDown()
 void cZappilotOsd::CursorOK()
 {
    DrawMenu(0,2);
-   if (currentChannel != Channels.GetByNumber(PilotChannelNumber))
+   LOCK_CHANNELS_READ;
+   const cChannel* chan = Channels->GetByNumber(PilotChannelNumber);
+
+   if (currentChannel != chan)
    {
-     cChannel *Channel =  Channels.GetByNumber(PilotChannelNumber);
+     LOCK_CHANNELS_READ;
+     const cChannel *Channel =  Channels->GetByNumber(PilotChannelNumber);
      if (Channel)
      {
         cDevice::PrimaryDevice()->SwitchChannel(Channel, true);
@@ -750,7 +768,8 @@ void cZappilotOsd::DisplayInfo(int delta
       displayTimer = NULL;
       displayChannel = Skins.Current()->DisplayChannel(true);
    }
-   cChannel *channel = Channels.GetByNumber(PilotChannelNumber);
+   LOCK_CHANNELS_READ;
+   const cChannel *channel = Channels->GetByNumber(PilotChannelNumber);
 
    if (!isempty(titlePresentInfo))
    {
@@ -778,14 +797,17 @@ void cZappilotOsd::DisplayExtraInfo()
       displayEvent = NULL;
    }
 
-   displayEvent = new cMenuEvent(Present,false,true);
+
+   LOCK_TIMERS_READ;
+   LOCK_CHANNELS_READ;
+   displayEvent = new cMenuEvent(Timers, Channels, Present,false,true);
    displayEvent->Display();
 }
 
 
 void cZappilotOsd::DisplayTimer()
 {
-
+ 
    if (displayChannel)
    {
       delete displayChannel;
@@ -797,13 +819,17 @@ void cZappilotOsd::DisplayTimer()
       displayEvent = NULL;
    }
 
+   LOCK_TIMERS_WRITE;
+
    cTimer *timer = new cTimer(Present);
-   cTimer *t = Timers.GetTimer(timer);
+   cTimer *t = Timers->GetMatch(Present);
+
    if (t)
    {
       delete timer;
       timer = t;
    }
+
    displayTimer=new cMenuEditTimer(timer, !t);
    displayTimer->Display();
 }
diff -rupN b/zappilotosd.h a/zappilotosd.h
--- b/zappilotosd.h	2015-06-24 14:32:15.000000000 +0200
+++ a/zappilotosd.h	2015-10-22 18:40:02.000000000 +0200
@@ -39,7 +39,7 @@ class cZappilotOsd : public cOsdObject
       int offset;
       int lines;
       int type;
-      cChannel* currentChannel;
+      const cChannel* currentChannel;
 
    public:
       cZappilotOsd(void);
