Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.cpp	(revision 9772)
+++ libs/libmythtv/NuppelVideoPlayer.cpp	(working copy)
@@ -328,6 +328,7 @@
 
 void NuppelVideoPlayer::SetWatchingRecording(bool mode)
 {
+    QMutexLocker locker(&decoder_change_lock);
     watchingrecording = mode;
     if (GetDecoder())
         GetDecoder()->setWatchingRecording(mode);
@@ -5857,6 +5858,12 @@
 void NuppelVideoPlayer::SetDecoder(DecoderBase *dec)
 {
     //VERBOSE(VB_IMPORTANT, "SetDecoder("<<dec<<") was "<<decoder);
+    if (decoder_change_lock.locked())
+    {
+        fprintf(stderr, "*****SetDecoder - decoder is in use!!!\n");
+    }
+    QMutexLocker locker(&decoder_change_lock);
+
     if (!decoder)
         decoder = dec;
     else
Index: libs/libmythtv/NuppelVideoPlayer.h
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.h	(revision 9772)
+++ libs/libmythtv/NuppelVideoPlayer.h	(working copy)
@@ -489,6 +489,7 @@
     VideoOutputType forceVideoOutput;
 
     DecoderBase   *decoder;
+    QMutex        decoder_change_lock;
     VideoOutput   *videoOutput;
     RemoteEncoder *nvr_enc;
     ProgramInfo   *m_playbackinfo;
Index: libs/libmythtv/decoderbase.cpp
===================================================================
--- libs/libmythtv/decoderbase.cpp	(revision 9772)
+++ libs/libmythtv/decoderbase.cpp	(working copy)
@@ -281,6 +281,7 @@
     VERBOSE(VB_PLAYBACK, "Resyncing position map. posmapStarted = "
             << (int) posmapStarted << " livetv(" << livetv << ") "
             << "watchingRec(" << watchingrecording << ")");
+    sleep(5);
 
     unsigned int old_posmap_size = m_positionMap.size();
     
