--- a/Makefile
+++ b/Makefile
@@ -48,6 +48,8 @@ SKINFLATPLUS_WIDGETDIR ?= $(LIBDIR)/$(PLUGIN)/widgets
 export CFLAGS   = $(call PKGCFG,cflags)
 export CXXFLAGS = $(call PKGCFG,cxxflags)
 
+CXXFLAGS += -std=c++11
+
 ### Allow user defined options to overwrite defaults:
 
 -include $(PLGCFG)
--- a/baserender.c
+++ b/baserender.c
@@ -10,31 +10,7 @@
 #include FT_FREETYPE_H
 
 #if VDRVERSNUM >= 20301
-#include <vdr/thread.h>
-
-class cRecCounter : public cThread
-{
-    private:
-        int numRec;
-        cCondWait condWait;
-        cRecCounter() { numRec = 0; }
-    protected:
-        void Action(void) {
-            LOCK_TIMERS_READ;
-            for(const cTimer *ti = Timers->First(); ti; ti = Timers->Next(ti)) {
-                if( ti->HasFlags(tfRecording) ) numRec++;
-            }
-            condWait.Signal();
-        }
-    public:
-        static int Count(void) {
-            cRecCounter rc;
-            rc.Start();
-            if(rc.condWait.Wait(500))
-                return rc.numRec;
-            return 0;
-        }
-};
+    #include <future>
 #endif
 
 cFlatBaseRender::cFlatBaseRender(void) {
@@ -452,7 +428,13 @@ void cFlatBaseRender::TopBarUpdate(void) {
         if( Config.TopBarRecordingShow ) {
             // look for timers
             #if VDRVERSNUM >= 20301
-                numRec = cRecCounter::Count();
+                auto recCounterFuture = std::async([&numRec](){
+                    LOCK_TIMERS_READ;
+                    for(const cTimer *ti = Timers->First(); ti; ti = Timers->Next(ti)) {
+                        if( ti->HasFlags(tfRecording) ) numRec++;
+                    }
+                });
+                recCounterFuture.get();
             #else
                 for(cTimer *ti = Timers.First(); ti; ti = Timers.Next(ti))
                     if( ti->HasFlags(tfRecording) ) numRec++;
--- a/displaymenu.c
+++ b/displaymenu.c
@@ -6,6 +6,10 @@
 #include <fstream>
 #include <iostream>
 
+#if VDRVERSNUM >= 20301
+    #include <future>
+#endif
+
 #ifndef VDRLOGO
     #define VDRLOGO "vdrlogo_default"
 #endif
@@ -1900,10 +1904,6 @@ bool cFlatDisplayMenu::SetItemRecording(const cRecording *Recording, int Index,
     if( Config.MenuRecordingView == 0 )
         return false;
 
-#if VDRVERSNUM >= 20301
-    LOCK_RECORDINGS_READ;
-#endif
-
     cString buffer;
     cString RecName = GetRecordingName(Recording, Level, Total == 0).c_str();
 
@@ -1919,6 +1919,7 @@ bool cFlatDisplayMenu::SetItemRecording(const cRecording *Recording, int Index,
         LastRecFolder = RecFolder;
         if( RecFolder != "" && LastItemRecordingLevel > 0 ) {
 #if VDRVERSNUM >= 20301
+            LOCK_RECORDINGS_READ;
             for(const cRecording *Rec = Recordings->First(); Rec; Rec = Recordings->Next(Rec)) {
 #else
             for(cRecording *Rec = Recordings.First(); Rec; Rec = Recordings.Next(Rec)) {
@@ -1932,6 +1933,7 @@ bool cFlatDisplayMenu::SetItemRecording(const cRecording *Recording, int Index,
             }
         } else {
 #if VDRVERSNUM >= 20301
+            LOCK_RECORDINGS_READ;
             for(const cRecording *Rec = Recordings->First(); Rec; Rec = Recordings->Next(Rec)) {
 #else
             for(cRecording *Rec = Recordings.First(); Rec; Rec = Recordings.Next(Rec)) {
@@ -3218,13 +3220,18 @@ void cFlatDisplayMenu::SetRecording(const cRecording *Recording) {
     // lent from skinelchi
     if( Config.RecordingAdditionalInfoShow ) {
 #if VDRVERSNUM >= 20301
-        LOCK_CHANNELS_READ;
-        const cChannel *channel = Channels->GetByChannelID(((cRecordingInfo *)recInfo)->ChannelID());
+        auto channelFuture = std::async([&recAdditional](tChannelID channelId){
+            LOCK_CHANNELS_READ;
+            const cChannel *channel = Channels->GetByChannelID(channelId);
+            if (channel)
+                recAdditional << trVDR("Channel") << ": " << channel->Number() << " - " << channel->Name() << endl;
+        }, recInfo->ChannelID());
+        channelFuture.get();
 #else
         cChannel *channel = Channels.GetByChannelID(((cRecordingInfo *)recInfo)->ChannelID());
-#endif
         if (channel)
-            recAdditional << trVDR("Channel") << ": " << channel->Number() << " - " << channel->Name() << endl;
+            recAdditional << trVDR("Channel") << ": " << channel->Number() << " - " << channel->Name() << endl; 
+#endif   
 
         const cEvent *Event = recInfo->GetEvent();
         if( Event ) {
