diff --git a/hdhomerun_plugin.c b/hdhomerun_plugin.c
index adc2c25..6a7b1f8 100644
--- a/hdhomerun_plugin.c
+++ b/hdhomerun_plugin.c
@@ -157,7 +157,7 @@
     // channel format: xx-yy-zz
     // xx=physical channel, yy=virtual major channel, zz=virtual minor channel
     if (sscanf(channel, "%d-%d-%d", &ch, &vch_major, &vch_minor) == 3) {
-      ret = tune_vchannel(hdhr->hd, ch, vch_major, vch_minor, stream_tar);
+      ret = tune_atsc_vchannel(hdhr->hd, ch, vch_major, vch_minor, stream_tar);
       goto out;
     }
 
@@ -165,7 +165,7 @@
     // xx=physical channel, yy=virtual major channel
     if (sscanf(channel, "%d-%d", &ch, &vch_major) == 2) {
       vch_minor = 0;
-      ret = tune_vchannel(hdhr->hd, ch, vch_major, vch_minor, stream_tar);
+      ret = tune_atsc_vchannel(hdhr->hd, ch, vch_major, vch_minor, stream_tar);
       goto out;
     }
 
diff --git a/hdhomerun_tuner.c b/hdhomerun_tuner.c
index 137af3c..2bbf1d9 100644
--- a/hdhomerun_tuner.c
+++ b/hdhomerun_tuner.c
@@ -125,8 +125,8 @@
   return ret;
 }
 
-int vchan_to_prog_num(char *streaminfo, unsigned int vchan_major,
-                      unsigned int vchan_minor, unsigned int *prog_num)
+static int vchan_to_prog_num(char *streaminfo, unsigned int vchan_major,
+                             unsigned int vchan_minor, unsigned int *prog_num)
 {
   char *line;
   char *next_line;
@@ -160,9 +160,9 @@
   return 0;
 }
 
-int tune_vchannel(void *device, unsigned int channel,
-                  unsigned int vchannel_major, unsigned int vchannel_minor,
-                  char *stream_target)
+int tune_atsc_vchannel(void *device, unsigned int channel,
+                       unsigned int vchannel_major, unsigned int vchannel_minor,
+                       char *stream_target)
 {
   char channel_map[16];
   char channel_str[16];
@@ -180,7 +180,7 @@
   snprintf(channel_map, sizeof(channel_map), "us-bcast");
   ret = hdhomerun_device_set_tuner_channelmap(hd, channel_map);
   if (ret < 0) {
-    printf("hdhr:ERROR: set tuner channel map %s\n", channel_map);
+    printf("hdhr:ERROR: set_tuner_channelmap %s\n", channel_map);
     goto out;
   }
 
@@ -188,7 +188,7 @@
   snprintf(channel_str, sizeof(channel_str), "auto:%u", channel);
   ret = hdhomerun_device_set_tuner_channel(hd, channel_str);
   if (ret <= 0) {
-    printf("hdhr:ERROR: set tuner channel %s\n", channel_str);
+    printf("hdhr:ERROR: set_tuner_channel %s\n", channel_str);
     goto out;
   }
 
@@ -201,16 +201,16 @@
     }
   }
 
-  printf("hdhr:hdhomerun tuner status: lock=%s ss=%u snq=%u seq=%u\n",
-         ts.lock_str, ts.signal_strength, ts.signal_to_noise_quality,
-         ts.symbol_error_quality);
+  printf("hdhr:hdhomerun tuner status: ch=%s lock=%s ss=%u snq=%u seq=%u\n",
+         ts.channel, ts.lock_str, ts.signal_strength,
+         ts.signal_to_noise_quality, ts.symbol_error_quality);
 
   // Translate virtual channel to program number (max 2 secs)
   for (i = 0; i < 5; i++) {
     usleep(i == 0 ? 0 : 500000);
     ret = hdhomerun_device_get_tuner_streaminfo(hd, &streaminfo);
     if (ret > 0) {
-      printf("hdhr:hdhomerun streaminfo:\n%s", streaminfo);
+      printf("hdhr:hdhomerun tuner streaminfo:\n%s", streaminfo);
       ret = vchan_to_prog_num(streaminfo, vchannel_major, vchannel_minor,
                               &program);
       if (ret > 0) {
@@ -232,7 +232,7 @@
   snprintf(program_str, sizeof(program_str), "%u", program);
   ret = hdhomerun_device_set_tuner_program(hd, program_str);
   if (ret <= 0) {
-    printf("hdhr:ERROR: set tuner program %s\n", program_str);
+    printf("hdhr:ERROR: set_tuner_program %s\n", program_str);
     goto out;
   }
 
@@ -240,7 +240,7 @@
   snprintf(target_str, sizeof(target_str), "%s ttl=2", stream_target);
   ret = hdhomerun_device_set_tuner_target(hd, target_str);
   if (ret <= 0) {
-    printf("hdhr:ERROR: set tuner target %s\n", target_str);
+    printf("hdhr:ERROR: set_tuner_target %s\n", target_str);
   }
 
 out:
diff --git a/hdhomerun_tuner.h b/hdhomerun_tuner.h
index 54791ed..d788a59 100644
--- a/hdhomerun_tuner.h
+++ b/hdhomerun_tuner.h
@@ -34,9 +34,9 @@
 int scan_all(void *device, struct channel_entry_t *ce, int ce_num);
 int tune_channel(void *device, char *channel, char *program,
                  char *stream_target);
-int tune_vchannel(void *device, unsigned int channel,
-                  unsigned int vchannel_major, unsigned int vchannel_minor,
-                  char *stream_target);
+int tune_atsc_vchannel(void *device, unsigned int channel,
+                       unsigned int vchannel_major, unsigned int vchannel_minor,
+                       char *stream_target);
 int stop_channel(void *device);
 int scan_vchannel(void *device, int vchannel, struct channel_entry_t *ce);
 int tuner_input_sharing(struct hdhr_tuner_t *ht1, struct hdhr_tuner_t *ht2);
