Index: libs/libmythtv/jobqueue.cpp
===================================================================
--- libs/libmythtv/jobqueue.cpp	(revision 11748)
+++ libs/libmythtv/jobqueue.cpp	(working copy)
@@ -1776,7 +1776,9 @@
         ChangeJobStatus(jobID, JOB_STARTING);
         program_info->SetTranscoded(TRANSCODING_RUNNING);
 
-        QString filename = program_info->GetPlaybackURL();
+        // I need to get the filesize, 
+        // // so we need to use the file (RW=true)
+        QString filename = program_info->GetPlaybackURL(true);
 
         origfilesize = 0;
         filesize = 0;
@@ -1839,7 +1841,9 @@
                 // Clear the pathname to force rechecking the DB in case 
                 // mythtranscode renamed the file.
                 program_info->pathname = "";
-                filename = program_info->GetPlaybackURL();
+                // I need to get the filesize, 
+                // so we need to use the file (RW=true)
+                filename = program_info->GetPlaybackURL(true);
 
                 if (stat(filename.ascii(), &st) == 0)
                 {
Index: libs/libmythtv/previewgenerator.cpp
===================================================================
--- libs/libmythtv/previewgenerator.cpp	(revision 11748)
+++ libs/libmythtv/previewgenerator.cpp	(working copy)
@@ -69,7 +69,7 @@
     if (!QFileInfo(localFN).exists())
     {
         // GetPlaybackURL tries to return a local filename if one exists
-        localFN = programInfo.GetPlaybackURL();
+        localFN = programInfo.GetPlaybackURL(true);
         if (!(localFN.left(1) == "/" && QFileInfo(localFN).exists()))
             return; // didn't find file locally, must use remote backend
     }
Index: libs/libmythtv/RingBuffer.cpp
===================================================================
--- libs/libmythtv/RingBuffer.cpp	(revision 11748)
+++ libs/libmythtv/RingBuffer.cpp	(working copy)
@@ -168,20 +168,26 @@
     if ((filename.left(7) == "myth://") &&
         (filename.length() > 7 ))
     {
-        QString local_pathname = gContext->GetSetting("RecordFilePrefix");
-        int hostlen = filename.find(QRegExp("/"), 7);
-
-        if (hostlen != -1)
+        //If we don't prefer the myth proto, check to see if the file is 
+        //availible locally
+        if (!gContext->GetSetting("PreferMythProto") )
         {
-            local_pathname += filename.right(filename.length() - hostlen);
+            QString local_pathname = gContext->GetSetting("RecordFilePrefix");
+            int hostlen = filename.find(QRegExp("/"), 7);
 
-            QFile checkFile(local_pathname);
-            if (checkFile.exists())
+            if (hostlen != -1)
             {
-                is_local = true;
-                filename = local_pathname;
+                local_pathname += filename.right(filename.length() - hostlen);
+
+                QFile checkFile(local_pathname);
+                if (checkFile.exists())
+                {
+                    is_local = true;
+                    filename = local_pathname;
+                }
             }
         }
+
     }
 #ifdef USING_FRONTEND
     else if (filename.left(4) == "dvd:")
Index: libs/libmythtv/programinfo.h
===================================================================
--- libs/libmythtv/programinfo.h	(revision 11748)
+++ libs/libmythtv/programinfo.h	(working copy)
@@ -160,7 +160,7 @@
     bool SetRecordBasename(QString basename);
     QString GetRecordBasename(bool fromDB = false) const;
     QString GetRecordFilename(const QString &prefix, bool fromDB = false) const;
-    QString GetPlaybackURL(QString playbackHost = "") const;
+    QString GetPlaybackURL(bool needRW = false) const;
     QString MakeUniqueKey(void) const;
     int CalculateLength(void) const;
     int SecsTillStart() const;
Index: libs/libmythtv/programinfo.cpp
===================================================================
--- libs/libmythtv/programinfo.cpp	(revision 11748)
+++ libs/libmythtv/programinfo.cpp	(working copy)
@@ -1467,25 +1467,30 @@
     return QString("%1/%2").arg(prefix).arg(GetRecordBasename(fromDB));
 }               
 
-/** \fn ProgramInfo::GetPlaybackURL(QString) const
+/** \fn ProgramInfo::GetPlaybackURL(bool) const
  *  \brief Returns URL to where %MythTV would stream the
  *         this program from, were it to be streamed.
+ *  \param needRW boolean to request that file needs to be
+ *         writeable or otherwise not a mythstream (default =
+ *         false)
  */
-QString ProgramInfo::GetPlaybackURL(QString playbackHost) const
+QString ProgramInfo::GetPlaybackURL(bool needRW) const
 {
     QString tmpURL;
     QString m_hostname = gContext->GetHostName();
 
-    if (playbackHost == "")
-        playbackHost = m_hostname;
-
     tmpURL = GetRecordFilename(gContext->GetSettingOnHost("RecordFilePrefix",
                                                           hostname));
+    bool preferMythProto = gContext->GetSettingOnHost("PreferMythProtocol",
+                                                          m_hostname);
 
-    if (playbackHost == hostname)
+    //If this is local, use the file path
+    if (m_hostname == hostname)
         return tmpURL;
 
-    if (playbackHost == m_hostname)
+    // I'd rather not use the mythproto, or I need to Read & Write
+    // Check my local recording dir, see if this recording is there
+    if (!preferMythProto || needRW)
     {
         QFile checkFile(tmpURL);
 
@@ -1500,6 +1505,8 @@
             return tmpURL;
     }
 
+    //Otherwise I prefer the myth protocol, or the file is not avail locally
+    //so stream the file
     tmpURL = QString("myth://") +
              gContext->GetSettingOnHost("BackendServerIP", hostname) + ":" +
              gContext->GetSettingOnHost("BackendServerPort", hostname) + "/" +
Index: programs/mythtranscode/main.cpp
===================================================================
--- programs/mythtranscode/main.cpp	(revision 11748)
+++ programs/mythtranscode/main.cpp	(working copy)
@@ -395,7 +395,8 @@
             return TRANSCODE_EXIT_NO_RECORDING_DATA;
         }
 
-        infile = pginfo->GetPlaybackURL();
+        // We can't transcode if we can't write
+        infile = pginfo->GetPlaybackURL(true);
     }
     else
     {
@@ -584,7 +585,8 @@
         return;
     }
 
-    QString filename = pginfo->GetPlaybackURL();
+    // We need to write the new file, so we need RW
+    QString filename = pginfo->GetPlaybackURL(true);
 
     if (status == JOB_STOPPING)
     {
