Index: libs/libmythtv/NuppelVideoPlayer.cpp
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.cpp	(revision 9799)
+++ libs/libmythtv/NuppelVideoPlayer.cpp	(working copy)
@@ -1556,6 +1556,8 @@
 {
     uint origMode = textDisplayMode;
 
+    textDesired = enable;
+
     if (!enable)
     {
         DisableCaptions(origMode);
@@ -5496,6 +5498,20 @@
     return ret;
 }
 
+/** \fn NuppelVideoPlayer::TracksChanged(uint)
+ *  \brief This tries to re-enables captions/subtitles if the user
+ *         wants them and one of the captions/subtitles tracks has
+ *         changed.
+ */
+void NuppelVideoPlayer::TracksChanged(uint trackType)
+{
+    if (trackType >= kTrackTypeSubtitle &&
+        trackType <= kTrackTypeTeletextCaptions && textDesired)
+    {
+	SetCaptionsEnabled(textDesired);
+    }
+}
+
 InteractiveTV *NuppelVideoPlayer::GetInteractiveTV(void)
 {
     if (!interactiveTV && osd && itvEnabled)
Index: libs/libmythtv/NuppelVideoPlayer.h
===================================================================
--- libs/libmythtv/NuppelVideoPlayer.h	(revision 9799)
+++ libs/libmythtv/NuppelVideoPlayer.h	(working copy)
@@ -345,6 +345,7 @@
     int GetTrack(uint type) const;
     int ChangeTrack(uint type, int dir);
     void ChangeCaptionTrack(int dir);
+    void TracksChanged(uint trackType);
 
     // MHEG/MHI stream selection
     bool ITVHandleAction(const QString &action);
@@ -604,6 +605,9 @@
 
     // Support for captions, teletext, etc. decoded by libav
     QMutex    subtitleLock;
+    /// This allows us to enable captions/subtitles later if the streams
+    /// are not immediately available when the video starts playing.
+    bool      textDesired;
     bool      osdHasSubtitles;
     long long osdSubtitlesExpireAt;
     MythDeque<AVSubtitle> nonDisplayedSubtitles;
Index: libs/libmythtv/decoderbase.cpp
===================================================================
--- libs/libmythtv/decoderbase.cpp	(revision 9799)
+++ libs/libmythtv/decoderbase.cpp	(working copy)
@@ -824,13 +824,17 @@
             return false;
 
     tracks[type].push_back(info);
+
+    if (GetNVP())
+	GetNVP()->TracksChanged(type);
+
     return true;
 }
 
 /** \fn DecoderBase::AutoSelectTrack(uint)
  *  \brief Select best track.
  *
- *   If case there's only one track available, always choose it.
+ *   In case there's only one track available, always choose it.
  *
  *   If there is a user selected track we try to find it.
  *
@@ -904,6 +908,7 @@
         selTrack = 0;
     }
 
+    int oldTrack = currentTrack[type];
     currentTrack[type] = (selTrack < 0) ? -1 : selTrack;
     StreamInfo tmp = tracks[type][currentTrack[type]];
     selectedTrack[type] = tmp;
@@ -917,6 +922,9 @@
             .arg(currentTrack[type]+1)
             .arg(iso639_key_toName(lang)).arg(lang));
 
+    if (GetNVP() && (oldTrack != currentTrack[type]))
+        GetNVP()->TracksChanged(type);
+
     return selTrack;
 }
 
