Index: libs/libmythtv/previewgenerator.cpp
===================================================================
--- libs/libmythtv/previewgenerator.cpp	(revision 17961)
+++ libs/libmythtv/previewgenerator.cpp	(working copy)
@@ -463,7 +463,7 @@
     QByteArray fname = filename.toAscii();
     if (small_img.save(fname.constData(), "PNG"))
     {
-        chmod(fname.constData(), 0666); // Let anybody update it
+        makeFileAccessible(fname.constData()); // Let anybody update it
 
         VERBOSE(VB_PLAYBACK, LOC +
                 QString("Saved preview '%0' %1x%2")
@@ -478,7 +478,7 @@
     if (QFileInfo(fname.constData()).exists() &&
         small_img.save(newfilea.constData(), "PNG"))
     {
-        chmod(newfilea.constData(), 0666);
+        makeFileAccessible(newfilea.constData());
         rename(newfilea.constData(), fname.constData());
 
         VERBOSE(VB_PLAYBACK, LOC +
Index: libs/libmythtv/datadirect.cpp
===================================================================
--- libs/libmythtv/datadirect.cpp	(revision 17961)
+++ libs/libmythtv/datadirect.cpp	(working copy)
@@ -1639,7 +1639,7 @@
 
     VERBOSE(VB_GENERAL, "SaveLineupToCache("<<lineupid<<") -- success");
 
-    chmod(fna.constData(), 0666); // Let anybody update it
+    makeFileAccessible(fna.constData()); // Let anybody update it
 
     return true;
 }
Index: libs/libmyth/util.h
===================================================================
--- libs/libmyth/util.h	(revision 17961)
+++ libs/libmyth/util.h	(working copy)
@@ -58,6 +58,7 @@
 MPUBLIC long long copy(QFile &dst, QFile &src, uint block_size = 0);
 MPUBLIC QString createTempFile(QString name_template = "/tmp/mythtv_XXXXXX",
                                bool dir = false);
+MPUBLIC void makeFileAccessible(QString filename);
 MPUBLIC unsigned long long myth_get_approximate_large_file_size(
     const QString &fname);
 
Index: libs/libmyth/util.cpp
===================================================================
--- libs/libmyth/util.cpp	(revision 17961)
+++ libs/libmyth/util.cpp	(working copy)
@@ -804,6 +804,30 @@
     return tmpFileName;
 }
 
+/** \fn makeFileAccessible(QString)
+ *  \brief Makes a file accessible to all frontends/backends.
+ *
+ *   This function abstracts the functionality of making a file accessible to
+ *   all frontends and backends.  Currently it contains a permissions hack that
+ *   makes a file accessible even on a system with an improperly configured
+ *   environment (umask/group) where the frontend and backend are being run as
+ *   different users or where a NFS share is used but UID's/GID's differ on
+ *   different hosts.
+ *
+ *   Though the function currently only changes the file mode to 0666, by
+ *   abstracting the functionality, it will be easier to make changes in the
+ *   future if a better approach is chosen.  Similarly, using this function
+ *   allows the hack to be applied only when required if code is written to
+ *   detect or allow the user to specify their system is misconfigured.
+ *
+ *  \param filename   Path of file to make accessible
+ */
+void makeFileAccessible(QString filename)
+{
+    QByteArray fname = filename.toAscii();
+    chmod(fname.constData(), 0666);
+}
+
 double MythGetPixelAspectRatio(void)
 {
     float pixelAspect = 1.0;
Index: programs/mythbackend/mythxml.cpp
===================================================================
--- programs/mythbackend/mythxml.cpp	(revision 17961)
+++ programs/mythbackend/mythxml.cpp	(working copy)
@@ -1236,6 +1236,8 @@
     QByteArray fname = pRequest->m_sFileName.toAscii();
     img.save( fname.constData(), "PNG" );
 
+    makeFileAccessible(fname.constData());
+
     delete pImage;
 }
 
