diff --git a/mythtv/libs/libmythtv/mythplayer.cpp b/mythtv/libs/libmythtv/mythplayer.cpp
index 5b80c452a3..acf1d16193 100644
--- a/mythtv/libs/libmythtv/mythplayer.cpp
+++ b/mythtv/libs/libmythtv/mythplayer.cpp
@@ -2170,7 +2170,7 @@ void wait_for_time(int64_t framedue)
         QThread::usleep(delay);
 }
 
-#define AVSYNC_MAX_LATE 1000000
+#define AVSYNC_MAX_LATE 10000000
 void MythPlayer::AVSync2(VideoFrame *buffer)
 {
     if (videoOutput->IsErrored())
@@ -2249,10 +2249,22 @@ void MythPlayer::AVSync2(VideoFrame *buffer)
             // Get video in sync with audio
             audio_adjustment = audiotimecode - videotimecode;
             int sign = audio_adjustment < 0 ? -1 : 1;
+            int64_t fix_amount = avsync2adjustms;
+            // Faster catch-up when off by more than 200 ms
+            if (audio_adjustment * sign > 200)
+            {
+                fix_amount = audio_adjustment * sign - 200;
+                if (fix_amount < avsync2adjustms)
+                    fix_amount = avsync2adjustms;
+            }
+            // If there is excess audio - throw it away.
+            // if (audio_adjustment < -300)
+            //     audio.Reset();
             if (audio_adjustment * sign > 40)
             {
                 // adjust by AVSyncIncrementMS milliseconds at a time (range 1-40)
-                rtcbase -= (int64_t)1000000 * avsync2adjustms * sign / playspeed1000;
+                int64_t speedup1000 = (float)1000 * play_speed;
+                rtcbase -= (int64_t)1000000 * fix_amount * sign / speedup1000;
                 LOG(VB_PLAYBACK, LOG_INFO, LOC +
                     QString("AV Sync, audio ahead by %1 ms").arg(audio_adjustment));
             }
