diff --git a/mythtv/libs/libmythtv/iptv/iptvfeederhls.cpp b/mythtv/libs/libmythtv/iptv/iptvfeederhls.cpp
index a2701be..eeb3722 100644
--- a/mythtv/libs/libmythtv/iptv/iptvfeederhls.cpp
+++ b/mythtv/libs/libmythtv/iptv/iptvfeederhls.cpp
@@ -30,6 +30,7 @@ IPTVFeederHLS::IPTVFeederHLS() :
 IPTVFeederHLS::~IPTVFeederHLS()
 {
     Close();
+    QMutexLocker locker(&m_hlsbufferlock);
     delete[] m_buffer;
 }
 
@@ -41,6 +42,7 @@ bool IPTVFeederHLS::IsHLS(const QString &url)
 
 bool IPTVFeederHLS::IsOpen(void) const
 {
+    QMutexLocker locker(&m_hlsbufferlock);
     if (m_hls == NULL)
         return false;
     return m_hls->IsOpen();
@@ -50,7 +52,7 @@ bool IPTVFeederHLS::Open(const QString &url)
 {
     LOG(VB_RECORD, LOG_INFO, LOC + QString("Open(%1) -- begin").arg(url));
 
-    QMutexLocker locker(&_lock);
+    QMutexLocker locker(&m_hlsbufferlock);
 
     if (m_hls)
     {
@@ -67,16 +69,19 @@ bool IPTVFeederHLS::Open(const QString &url)
 
 void IPTVFeederHLS::Run(void)
 {
-    m_lock.lock();
+    QMutexLocker runlocker(&m_runlock);
     m_running = true;
     m_interrupted = false;
-    m_lock.unlock();
 
     while (!m_interrupted)
     {
+        runlocker.unlock();
+
+        QMutexLocker hlslocker(&m_hlsbufferlock);
+
         if (m_hls == NULL)
             break;
-        m_lock.lock();
+
         uint size = m_hls->Read((void *)m_buffer, BUFFER_SIZE);
         if (m_buffer[0] != 0x47)
         {
@@ -90,23 +95,22 @@ void IPTVFeederHLS::Run(void)
         for (; it != _listeners.end(); ++it)
             (*it)->AddData(m_buffer, size);
         _lock.unlock();
-        m_lock.unlock();
+
+        runlocker.relock();
     }
 
     m_running = false;
-    m_lock.lock();
     m_waitcond.wakeAll();
-    m_lock.unlock();
 }
 
 void IPTVFeederHLS::Stop(void)
 {
     LOG(VB_RECORD, LOG_INFO, LOC + "Stop() -- begin");
-    QMutexLocker locker(&m_lock);
+    QMutexLocker locker(&m_runlock);
     m_interrupted = true;
 
     while (m_running)
-        m_waitcond.wait(&m_lock, 500);
+        m_waitcond.wait(&m_runlock, 500);
 
     LOG(VB_RECORD, LOG_INFO, LOC + "Stop() -- end");
 }
@@ -116,7 +120,7 @@ void IPTVFeederHLS::Close(void)
     LOG(VB_RECORD, LOG_INFO, LOC + "Close() -- begin");
     Stop();
 
-    QMutexLocker lock(&m_lock);
+    QMutexLocker lock(&m_hlsbufferlock);
     delete m_hls;
     m_hls = NULL;
 
diff --git a/mythtv/libs/libmythtv/iptv/iptvfeederhls.h b/mythtv/libs/libmythtv/iptv/iptvfeederhls.h
index 8bd68a7..705ca78 100644
--- a/mythtv/libs/libmythtv/iptv/iptvfeederhls.h
+++ b/mythtv/libs/libmythtv/iptv/iptvfeederhls.h
@@ -16,6 +16,8 @@
 class TSDataListener;
 class HLSRingBuffer;
 
+// m_hlsbufferlock->_lock
+
 class IPTVFeederHLS : public IPTVFeederLive
 {
 public:
@@ -33,9 +35,11 @@ public:
     static bool IsHLS(const QString &url);
 
 private:
+    mutable QMutex  m_hlsbufferlock;
     uint8_t        *m_buffer;
     HLSRingBuffer  *m_hls;
-    mutable QMutex  m_lock;
+
+    mutable QMutex  m_runlock;
     QWaitCondition  m_waitcond;
     bool            m_interrupted;
     bool            m_running;
