Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.cpp	(revision 11497)
+++ libs/libmythtv/NuppelVideoPlayer.cpp	(working copy)
@@ -396,15 +396,9 @@
 void NuppelVideoPlayer::Pause(bool waitvideo)
 {
+    assert(waitvideo); /* nothing seems to call this with waitvideo == false */
+
     PauseDecoder();
 
     //cout << "stopping other threads" << endl;
-    PauseVideo(waitvideo);
-    if (audioOutput)
-    {
-        audio_paused = true;
-        audioOutput->Pause(true);
-    }
-    if (ringBuffer)
-        ringBuffer->Pause();
 
     QMutexLocker locker(&decoder_change_lock);
@@ -426,9 +420,6 @@
             .arg(speed,5,'f',1).arg(normal).arg(unpauseaudio));
 
-    UnpauseVideo();
     if (audioOutput && unpauseaudio)
         audio_paused = false;
-    if (ringBuffer)
-        ringBuffer->Unpause();
 
     decoder_lock.lock();
@@ -3182,4 +3173,13 @@
             decoder_lock.lock();
 
+            /* If old play_speed was 0, then we were paused */
+            if (play_speed == 0.0)
+            {
+                UnpauseVideo();
+
+                if (ringBuffer)
+                    ringBuffer->Unpause();
+            }
+
             play_speed = next_play_speed;
             normal_speed = next_normal_speed;
@@ -3189,7 +3189,19 @@
                 GetDecoder()->UpdateDVDFramesPlayed();
 
+            /* If new play_speed is 0, then we are paused */
             if (play_speed == 0.0)
             {
                 DoPause();
+                PauseVideo(true);
+
+                if (audioOutput)
+                {
+                    audio_paused = true;
+                    audioOutput->Pause(true);
+                }
+
+                if (ringBuffer)
+                    ringBuffer->Pause();
+
                 decoderThreadPaused.wakeAll();
             }
Index: libs/libmythtv/NuppelVideoPlayer.h
===================================================================
