diff -u -r -p mythtv.102/libs/libmythtv/fileringbuffer.cpp mythtv/libs/libmythtv/fileringbuffer.cpp
--- mythtv.102/libs/libmythtv/fileringbuffer.cpp	2011-01-25 11:15:16.000000000 +0100
+++ mythtv/libs/libmythtv/fileringbuffer.cpp	2011-01-26 20:16:54.151126001 +0100
@@ -349,7 +349,6 @@ bool FileRingBuffer::OpenFile(const QStr
         }
     }
 
-    setswitchtonext = false;
     ateof = false;
     commserror = false;
     numfailures = 0;
diff -u -r -p mythtv.102/libs/libmythtv/mythplayer.cpp mythtv/libs/libmythtv/mythplayer.cpp
--- mythtv.102/libs/libmythtv/mythplayer.cpp	2011-01-25 03:29:00.000000000 +0100
+++ mythtv/libs/libmythtv/mythplayer.cpp	2011-01-26 22:50:54.950126001 +0100
@@ -2271,6 +2271,11 @@ void MythPlayer::SwitchToProgram(void)
 
     bool newIsDummy = player_ctx->tvchain->GetCardType(newid) == "DUMMY";
 
+    if (!newIsDummy)
+    {
+	player_ctx->buffer->OpenFile(
+    	    pginfo->GetPlaybackURL(), RingBuffer::kDefaultOpenTimeout);
+    }
     SetPlayingInfo(*pginfo);
     Pause();
     ChangeSpeed();
@@ -2284,9 +2289,6 @@ void MythPlayer::SwitchToProgram(void)
         return;
     }
 
-    player_ctx->buffer->OpenFile(
-        pginfo->GetPlaybackURL(), RingBuffer::kDefaultOpenTimeout);
-
     if (!player_ctx->buffer->IsOpen())
     {
         VERBOSE(VB_IMPORTANT, LOC_ERR + "SwitchToProgram's OpenFile failed " +
diff -u -r -p mythtv.102/libs/libmythtv/ringbuffer.cpp mythtv/libs/libmythtv/ringbuffer.cpp
--- mythtv.102/libs/libmythtv/ringbuffer.cpp	2011-01-25 11:15:16.000000000 +0100
+++ mythtv/libs/libmythtv/ringbuffer.cpp	2011-01-26 22:09:21.635126000 +0100
@@ -450,7 +450,6 @@ void RingBuffer::ResetReadAhead(long lon
     internalreadpos = newinternal;
     ateof = false;
     readsallowed = false;
-    setswitchtonext = false;
     generalWait.wakeAll();
 
     rbwlock.unlock();
@@ -698,7 +697,7 @@ void RingBuffer::run(void)
 
         // These are conditions where we want to sleep to allow
         // other threads to do stuff.
-        if (setswitchtonext || (ateof && readsallowed))
+        if (ateof && readsallowed)
         {
             ignore_for_read_timing = true;
             generalWait.wait(&rwlock, 1000);
@@ -706,8 +705,7 @@ void RingBuffer::run(void)
         }
 
         int read_return = -1;
-        if (totfree >= readblocksize && !commserror &&
-            !ateof && !setswitchtonext)
+        if (totfree >= readblocksize && !commserror && !ateof)
         {
             // limit the read size
             totfree = readblocksize;
@@ -842,7 +840,7 @@ void RingBuffer::run(void)
 
         VERBOSE(VB_FILE|VB_EXTRA, LOC + "@ end of read ahead loop");
 
-        if (readsallowed || commserror || ateof || setswitchtonext ||
+        if (readsallowed || commserror || ateof ||
             (wanttoread <= used && wanttoread > 0))
         {
             // To give other threads a good chance to handle these
@@ -851,13 +849,13 @@ void RingBuffer::run(void)
             generalWait.wakeAll();
             rwlock.unlock();
             usleep(5 * 1000);
-            rwlock.lockForRead();            
+            rwlock.lockForRead();
         }
         else
         {
             // yield if we have nothing to do...
             if (!request_pause &&
-                (used >= fill_threshold || ateof || setswitchtonext))
+                (used >= fill_threshold || ateof))
             {
                 generalWait.wait(&rwlock, 1000);
             }
@@ -945,7 +943,7 @@ bool RingBuffer::WaitForAvail(int count)
         generalWait.wait(&rwlock, 250);
         avail = ReadBufAvail();
 
-        if ((ateof || setswitchtonext) && avail < count)
+        if (ateof && avail < count)
             count = avail;
 
         if (avail < count)
@@ -972,20 +970,11 @@ bool RingBuffer::WaitForAvail(int count)
                 }
             }
 
-            bool quit = livetvchain && (livetvchain->NeedsToSwitch() ||
-                                        livetvchain->NeedsToJump() ||
-                                        setswitchtonext);
-
-            if (elapsed > 16000 || quit)
+            if (elapsed > 16000)
             {
-                if (!quit)
-                    VERBOSE(VB_IMPORTANT, LOC_ERR + "Waited " +
+                VERBOSE(VB_IMPORTANT, LOC_ERR + "Waited " +
                             QString("%1").arg(elapsed/1000) +
                             " seconds for data, aborting.");
-                else
-                    VERBOSE(VB_IMPORTANT, LOC + "Timing out wait due to "
-                            "impending livetv switch.");
-
                 return false;
             }
         }
