diff -Naurp vdr-1.7.17-orig/recording.c vdr-1.7.17/recording.c
--- vdr-1.7.17-orig/recording.c	2011-02-27 14:35:20.000000000 +0100
+++ vdr-1.7.17/recording.c	2011-03-20 20:46:01.000000000 +0100
@@ -1270,19 +1270,30 @@ bool cMarks::Load(const char *RecordingF
 {
   fileName = AddDirectory(RecordingFileName, IsPesRecording ? MARKSFILESUFFIX ".vdr" : MARKSFILESUFFIX);
   framesPerSecond = FramesPerSecond;
-  lastUpdate = 0;
+  nextUpdate = 0;
   lastFileTime = -1; // the first call to Load() must take place!
+  lastChange = 0;
   return Update();
 }
 
 bool cMarks::Update(void)
 {
   time_t t = time(NULL);
-  if (t - lastUpdate > MARKSUPDATEDELTA) {
-     lastUpdate = t;
-     t = LastModifiedTime(fileName);
-     if (t > lastFileTime) {
-        lastFileTime = t;
+  if (t > nextUpdate) {
+     time_t LastModified = LastModifiedTime(fileName);
+     if (LastModified != lastFileTime) // Change detected, or first run
+        lastChange = LastModified>0 ? LastModified : t;
+     if (t - lastChange < 60)
+        nextUpdate = t + 1; // check frequently if the file has just been modified
+     else if (t - lastChange < 3600)
+        nextUpdate = t + 10; // older files are checked less frequently
+     else
+        nextUpdate = t + (t - lastChange)/360; // phase out checking for very old files
+   
+     if (LastModified != lastFileTime) { // Change detected, or first run
+        lastFileTime = LastModified;
+        if (lastFileTime == t)
+           lastFileTime--; // Make sure we don't miss updates in the remaining second
         cMutexLock MutexLock(&MutexMarkFramesPerSecond);
         MarkFramesPerSecond = framesPerSecond;
         if (cConfig<cMark>::Load(fileName)) {
diff -Naurp vdr-1.7.17-orig/recording.h vdr-1.7.17/recording.h
--- vdr-1.7.17-orig/recording.h	2011-02-27 13:48:21.000000000 +0100
+++ vdr-1.7.17/recording.h	2011-03-20 19:35:27.000000000 +0100
@@ -192,8 +192,9 @@ class cMarks : public cConfig<cMark> {
 private:
   cString fileName;
   double framesPerSecond;
-  time_t lastUpdate;
+  time_t nextUpdate;
   time_t lastFileTime;
+  time_t lastChange;
 public:
   bool Load(const char *RecordingFileName, double FramesPerSecond = DEFAULTFRAMESPERSECOND, bool IsPesRecording = false);
   bool Update(void);
