diff --git a/mythtv/libs/libmythbase/logging.cpp b/mythtv/libs/libmythbase/logging.cpp
index d48a3a2..de06e4e 100644
--- a/mythtv/libs/libmythbase/logging.cpp
+++ b/mythtv/libs/libmythbase/logging.cpp
@@ -88,6 +88,7 @@ typedef struct {
 
 LogPropagateOpts        logPropagateOpts;
 QString                 logPropagateArgs;
+QStringList             logPropagateArgList;
 
 #define TIMESTAMP_MAX 30
 #define MAX_STRING_LENGTH (LOGLINE_MAX+120)
@@ -776,22 +777,35 @@ void LogPrintLine( uint64_t mask, LogLevel_t level, const char *file, int line,
 ///        spawned from this one.
 void logPropagateCalc(void)
 {
+    logPropagateArgList.clear();
+
     QString mask = verboseString.trimmed();
     mask.replace(QRegExp(" "), ",");
     mask.remove(QRegExp("^,"));
     logPropagateArgs = " --verbose " + mask;
+    logPropagateArgList << "--verbose" << mask;
 
     if (logPropagateOpts.propagate)
+    {
         logPropagateArgs += " --logpath " + logPropagateOpts.path;
+        logPropagateArgList << "--logpath" << logPropagateOpts.path;
+    }
 
     QString name = logLevelGetName(logLevel);
     logPropagateArgs += " --loglevel " + name;
+    logPropagateArgList << "--loglevel" << name;
 
     for (int i = 0; i < logPropagateOpts.quiet; i++)
+    {
         logPropagateArgs += " --quiet";
+        logPropagateArgList << "--quiet";
+    }
 
     if (!logPropagateOpts.dblog)
+    {
         logPropagateArgs += " --nodblog";
+        logPropagateArgList << "--nodblog";
+    }
 
 #ifndef _WIN32
     if (logPropagateOpts.facility >= 0)
@@ -803,6 +817,7 @@ void logPropagateCalc(void)
               syslogname->c_val != logPropagateOpts.facility); syslogname++);
 
         logPropagateArgs += QString(" --syslog %1").arg(syslogname->c_name);
+        logPropagateArgList << "--syslog" << syslogname->c_name;
     }
 #endif
 }
diff --git a/mythtv/libs/libmythbase/mythlogging.h b/mythtv/libs/libmythbase/mythlogging.h
index 3473ea2..7d3a791 100644
--- a/mythtv/libs/libmythbase/mythlogging.h
+++ b/mythtv/libs/libmythbase/mythlogging.h
@@ -3,6 +3,7 @@
 
 #ifdef __cplusplus
 #include <QString>
+#include <QStringList>
 #endif
 #include <stdint.h>
 #include <errno.h>
@@ -60,8 +61,9 @@ extern MBASE_PUBLIC uint64_t   verboseMask;
 #ifdef __cplusplus
 }
 
-extern MBASE_PUBLIC QString    logPropagateArgs;
-extern MBASE_PUBLIC QString    verboseString;
+extern MBASE_PUBLIC QStringList logPropagateArgList;
+extern MBASE_PUBLIC QString     logPropagateArgs;
+extern MBASE_PUBLIC QString     verboseString;
 
 MBASE_PUBLIC void logStart(QString logfile, int progress = 0, int quiet = 0,
                            int facility = 0, LogLevel_t level = LOG_INFO,
diff --git a/mythtv/libs/libmythbase/mythsystem.cpp b/mythtv/libs/libmythbase/mythsystem.cpp
index 9ec5c45..52c8e0c 100644
--- a/mythtv/libs/libmythbase/mythsystem.cpp
+++ b/mythtv/libs/libmythbase/mythsystem.cpp
@@ -105,6 +105,23 @@ void MythSystem::SetCommand(const QString &command,
 
     ProcessFlags(flags);
 
+    // add logging arguments
+    if (GetSetting("PropagateLogs"))
+    {
+        if (m_args.isEmpty())
+        {
+            m_command += logPropagateArgs;
+            if (!logPropagateQuiet())
+                m_command += " --quiet";
+        }
+        else
+        {
+            m_args << logPropagateArgList;
+            if (!logPropagateQuiet())
+                m_args << "--quiet";
+        }
+    }
+
     // check for execute rights
     if (!GetSetting("UseShell") && access(command.toUtf8().constData(), X_OK))
     {
@@ -320,6 +337,8 @@ void MythSystem::ProcessFlags(uint flags)
         m_settings["AnonLog"] = true;
     if( flags & kMSLowExitVal )
         m_settings["OnlyLowExitVal"] = true;
+    if( flags & kMSPropagateLogs )
+        m_settings["PropagateLogs"] = true;
 }
 
 QByteArray  MythSystem::Read(int size)
diff --git a/mythtv/libs/libmythbase/mythsystem.h b/mythtv/libs/libmythbase/mythsystem.h
index 31ddd1b..6762fd5 100644
--- a/mythtv/libs/libmythbase/mythsystem.h
+++ b/mythtv/libs/libmythbase/mythsystem.h
@@ -26,6 +26,8 @@ typedef enum MythSystemMask {
     kMSLowExitVal         = 0x00008000, ///< allow exit values 0-127 only
     kMSDisableUDPListener = 0x00010000, ///< disable MythMessage UDP listener
                                         ///  for the duration of application.
+    kMSPropagateLogs      = 0x00020000, ///< add arguments for MythTV log
+                                        ///  propagation
 } MythSystemFlag;
 
 #ifdef __cplusplus
diff --git a/mythtv/libs/libmythtv/previewgenerator.cpp b/mythtv/libs/libmythtv/previewgenerator.cpp
index 20b4f2e..38e7c08 100644
--- a/mythtv/libs/libmythtv/previewgenerator.cpp
+++ b/mythtv/libs/libmythtv/previewgenerator.cpp
@@ -224,30 +224,41 @@ bool PreviewGenerator::Run(void)
     else
     {
         // This is where we fork and run mythpreviewgen to actually make preview
-        command += QString(" --size %1x%2")
-            .arg(outSize.width()).arg(outSize.height());
+        QStringList cmdargs;
+
+        cmdargs << "--size"
+                << QString("%1x%2").arg(outSize.width()).arg(outSize.height());
         if (captureTime >= 0)
         {
             if (timeInSeconds)
-                command += QString(" --seconds %1").arg(captureTime);
+                cmdargs << "--seconds";
             else
-                command += QString(" --frame %1").arg(captureTime);
+                cmdargs << "--frame";
+            cmdargs << QString::number(captureTime);
         }
-        command += QString(" --chanid %1").arg(programInfo.GetChanID());
-        command += QString(" --starttime %1")
-            .arg(programInfo.GetRecordingStartTime(MythDate::kFilename));
+        cmdargs << "--chanid"
+                << QString::number(programInfo.GetChanID())
+                << "--starttime"
+                << programInfo.GetRecordingStartTime(MythDate::kFilename);
 
         if (!outFileName.isEmpty())
-            command += QString(" --outfile \"%1\"").arg(outFileName);
-
-        command += logPropagateArgs;
-        if (!logPropagateQuiet())
-            command += " --quiet";
+            cmdargs << "--outfile" << outFileName;
 
         // Timeout in 30s
-        uint ret = myth_system(command, kMSDontBlockInputDevs |
+        MythSystem *ms = new MythSystem(command, cmdargs,
+                                        kMSDontBlockInputDevs |
                                         kMSDontDisableDrawing |
-                                        kMSProcessEvents, 30);
+                                        kMSProcessEvents      |
+                                        kMSNoRunShell         |
+                                        kMSAutoCleanup        |
+                                        kMSPropagateLogs);
+        ms->SetNice(10);
+        ms->SetIOPrio(7);
+
+        ms->Run(30);
+        uint ret = ms->Wait();
+        delete ms;
+
         if (ret != GENERIC_EXIT_OK)
         {
             LOG(VB_GENERAL, LOG_ERR, LOC + 
