Index: mythtv/libs/libmythtv/hdhrstreamhandler.cpp
===================================================================
--- mythtv/libs/libmythtv/hdhrstreamhandler.cpp	(revision 21394)
+++ mythtv/libs/libmythtv/hdhrstreamhandler.cpp	(working copy)
@@ -129,8 +129,7 @@
 
 HDHRStreamHandler::HDHRStreamHandler(const QString &devicename,
                                      hdhr_id_data  &device_data) :
-    _control_socket(NULL),
-    _video_socket(NULL),
+    _hdhomerun_device(NULL),
     _device_id(device_data.device_id),
     _device_ip(device_data.device_ip),
     _tuner(device_data.tuner),
@@ -284,21 +283,13 @@
     buffersize = max(49 * TSPacket::SIZE * 128, buffersize);
 
     /* Create TS socket. */
-    _video_socket = hdhomerun_video_create(0, buffersize, NULL);
-    if (!_video_socket)
+    if (!hdhomerun_device_stream_start(_hdhomerun_device))
     {
-        VERBOSE(VB_IMPORTANT, LOC + "Open() failed to open socket");
-        return;
-    }
-
-    uint localPort = hdhomerun_video_get_local_port(_video_socket);
-    if (!DeviceSetTarget(localPort))
-    {
         VERBOSE(VB_IMPORTANT, LOC_ERR +
                 "Starting recording (set target failed). Aborting.");
         return;
     }
-    hdhomerun_video_flush(_video_socket);
+    hdhomerun_device_stream_flush(_hdhomerun_device);
 
     bool _error = false;
 
@@ -313,8 +304,8 @@
         read_size *= VIDEO_DATA_PACKET_SIZE;
 
         size_t data_length;
-        unsigned char *data_buffer =
-            hdhomerun_video_recv(_video_socket, read_size, &data_length);
+        unsigned char *data_buffer = hdhomerun_device_stream_recv(
+            _hdhomerun_device, read_size, &data_length);
 
         if (!data_buffer)
         {
@@ -350,20 +341,9 @@
 
     RemoveAllPIDFilters();
 
-    DeviceClearTarget();
+    hdhomerun_device_stream_stop(_hdhomerun_device);
     VERBOSE(VB_RECORD, LOC + "RunTS(): " + "end");
 
-    hdhomerun_video_sock_t* tmp_video_socket;
-    {
-        QMutexLocker locker(&_hdhr_lock);
-        tmp_video_socket = _video_socket;
-        _video_socket=NULL;
-    }
-
-    hdhomerun_video_destroy(tmp_video_socket);
-
-    VERBOSE(VB_RECORD, LOC + "RunTS(): " + "end");
-
     SetRunning(false);
 }
 
@@ -620,25 +600,25 @@
 
 void HDHRStreamHandler::Close(void)
 {
-    if (_control_socket)
+    if (_hdhomerun_device)
     {
         TuneChannel("none");
-        hdhomerun_control_destroy(_control_socket);
-        _control_socket=NULL;
+        hdhomerun_device_destroy(_hdhomerun_device);
+        _hdhomerun_device=NULL;
     }
 }
 
 bool HDHRStreamHandler::Connect(void)
 {
-    _control_socket = hdhomerun_control_create(_device_id, _device_ip, NULL);
+    _hdhomerun_device = hdhomerun_device_create(_device_id, _device_ip, _tuner, NULL);
 
-    if (!_control_socket)
+    if (!_hdhomerun_device)
     {
-        VERBOSE(VB_IMPORTANT, LOC_ERR + "Unable to create control socket");
+        VERBOSE(VB_IMPORTANT, LOC_ERR + "Unable to create hdhomerun object");
         return false;
     }
 
-    if (hdhomerun_control_get_local_addr(_control_socket) == 0)
+    if (hdhomerun_device_get_local_machine_addr(_hdhomerun_device) == 0)
     {
         VERBOSE(VB_IMPORTANT, LOC_ERR + "Unable to connect to device");
         return false;
@@ -694,7 +674,7 @@
 
 bool HDHRStreamHandler::EnterPowerSavingMode(void)
 {
-    if (_video_socket)
+    if (!hdhomerun_device_get_video_sock(_hdhomerun_device))
     {
         VERBOSE(VB_RECORD, LOC + "Ignoring request - video streaming active");
         return false;
@@ -710,7 +690,7 @@
 {
     QMutexLocker locker(&_hdhr_lock);
 
-    if (!_control_socket)
+    if (!_hdhomerun_device)
     {
         VERBOSE(VB_IMPORTANT, LOC_ERR + "Get request failed (not connected)");
         return QString::null;
@@ -718,8 +698,8 @@
 
     char *value = NULL;
     char *error = NULL;
-    if (hdhomerun_control_get(
-            _control_socket, name.toLocal8Bit().constData(),
+    if (hdhomerun_device_get_var(
+            _hdhomerun_device, name.toLocal8Bit().constData(),
             &value, &error) < 0)
     {
         VERBOSE(VB_IMPORTANT, LOC_ERR + "Get request failed" + ENO);
@@ -746,7 +726,7 @@
 {
     QMutexLocker locker(&_hdhr_lock);
 
-    if (!_control_socket)
+    if (!_hdhomerun_device)
     {
         VERBOSE(VB_IMPORTANT, LOC_ERR + "Set request failed (not connected)");
         return QString::null;
@@ -754,8 +734,8 @@
 
     char *value = NULL;
     char *error = NULL;
-    if (hdhomerun_control_set(
-            _control_socket, name.toLocal8Bit().constData(),
+    if (hdhomerun_device_set_var(
+            _hdhomerun_device, name.toLocal8Bit().constData(),
             val.toLocal8Bit().constData(), &value, &error) < 0)
     {
         VERBOSE(VB_IMPORTANT, LOC_ERR + "Set request failed" + ENO);
@@ -800,7 +780,8 @@
         return false;
     }
 
-    unsigned long localIP = hdhomerun_control_get_local_addr(_control_socket);
+    unsigned long localIP = hdhomerun_device_get_local_machine_addr(
+        _hdhomerun_device);
     if (localIP == 0)
     {
         return false;
@@ -830,14 +811,14 @@
     return !TunerSet("target", "0.0.0.0:0").isEmpty();
 }
 
-QString HDHRStreamHandler::GetTunerStatus(void) const
+void HDHRStreamHandler::GetTunerStatus(struct hdhomerun_tuner_status_t *status)
 {
-    return TunerGet("status");
+    hdhomerun_device_get_tuner_status(_hdhomerun_device, NULL, status);
 }
 
 bool HDHRStreamHandler::IsConnected(void) const
 {
-    return (_control_socket != NULL);
+    return (_hdhomerun_device != NULL);
 }
 
 bool HDHRStreamHandler::TuneChannel(const QString &chn)
Index: mythtv/libs/libmythtv/hdhrsignalmonitor.cpp
===================================================================
--- mythtv/libs/libmythtv/hdhrsignalmonitor.cpp	(revision 21388)
+++ mythtv/libs/libmythtv/hdhrsignalmonitor.cpp	(working copy)
@@ -103,16 +103,13 @@
         return;
     }
 
-    QString msg = streamHandler->GetTunerStatus();
-    //ss  = signal strength,        [0,100]
-    //snq = signal to noise quality [0,100]
-    //seq = signal error quality    [0,100]
-    int loc_sig = msg.indexOf("ss="),  loc_snq = msg.indexOf("snq=");
-    int loc_seq = msg.indexOf("seq="), loc_end = msg.length();
-    bool ok0, ok1, ok2;
-    uint sig = msg.mid(loc_sig + 3, loc_snq - loc_sig - 4).toUInt(&ok0);
-    uint snq = msg.mid(loc_snq + 4, loc_seq - loc_snq - 5).toUInt(&ok1);
-    uint seq = msg.mid(loc_seq + 4, loc_end - loc_seq - 4).toUInt(&ok2);
+    struct hdhomerun_tuner_status_t status;
+    streamHandler->GetTunerStatus(&status);
+
+    uint sig = status.signal_strength;
+    uint snq = status.signal_to_noise_quality;
+    uint seq = status.symbol_error_quality;
+
     (void) snq; // TODO should convert to S/N
     (void) seq; // TODO should report this...
 
@@ -124,9 +121,8 @@
     bool isLocked = false;
     {
         QMutexLocker locker(&statusLock);
-        if (loc_sig > 0 && loc_snq > 0 && ok0)
-            signalStrength.SetValue(sig);
-        signalLock.SetValue(signalStrength.IsGood() ? 1 : 0);
+        signalStrength.SetValue(sig);
+       	signalLock.SetValue(status.lock_supported);
         isLocked = signalLock.IsGood();
     }
 
Index: mythtv/libs/libmythtv/hdhrchannel.cpp
===================================================================
--- mythtv/libs/libmythtv/hdhrchannel.cpp	(revision 21388)
+++ mythtv/libs/libmythtv/hdhrchannel.cpp	(working copy)
@@ -27,9 +27,6 @@
 #include "channelutil.h"
 #include "hdhrstreamhandler.h"
 
-// HDHomeRun header
-#include "hdhomerun.h"
-
 #define DEBUG_PID_FILTERS
 
 #define LOC     QString("HDHRChan(%1): ").arg(GetDevice())
Index: mythtv/libs/libmythtv/hdhrstreamhandler.h
===================================================================
--- mythtv/libs/libmythtv/hdhrstreamhandler.h	(revision 21388)
+++ mythtv/libs/libmythtv/hdhrstreamhandler.h	(working copy)
@@ -22,10 +22,8 @@
 // HDHomeRun headers
 #ifdef USING_HDHOMERUN
 #include "hdhomerun.h"
-#undef max
-#undef min
 #else
-struct hdhomerun_control_sock_t { int dummy; };
+struct hdhomerun_device_t { int dummy; };
 #endif
 
 typedef QMap<uint,int> FilterMap;
@@ -50,7 +48,7 @@
     void RemoveListener(MPEGStreamData *data);
 
     bool IsRunning(void) const { return _running; }
-    QString GetTunerStatus(void) const;
+    void GetTunerStatus(struct hdhomerun_tuner_status_t *status);
     bool IsConnected(void) const;
 
     // Commands
@@ -107,8 +105,7 @@
     PIDPriority GetPIDPriority(uint pid) const;
 
   private:
-    hdhomerun_control_sock_t  *_control_socket;
-    hdhomerun_video_sock_t    *_video_socket;
+    hdhomerun_device_t  *_hdhomerun_device;
     uint                       _device_id;
     uint                       _device_ip;
     uint                       _tuner;
