diff --git a/mythtv/libs/libmythtv/mythplayer.cpp b/mythtv/libs/libmythtv/mythplayer.cpp
index 5b80c452a3b..d7f6b6859c2 100644
--- a/mythtv/libs/libmythtv/mythplayer.cpp
+++ b/mythtv/libs/libmythtv/mythplayer.cpp
@@ -2249,10 +2249,21 @@ 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;
+                rtcbase -= (int64_t)1000000 * fix_amount * sign / playspeed1000;
                 LOG(VB_PLAYBACK, LOG_INFO, LOC +
                     QString("AV Sync, audio ahead by %1 ms").arg(audio_adjustment));
             }
