--- /dev/null
+diff --git a/gpsd_report.c b/gpsd_report.c
+index 956b5f0..5870692 100644
+--- a/gpsd_report.c
++++ b/gpsd_report.c
+@@ -9,16 +9,27 @@
+
+
+ # if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+-void gpsd_report(int errlevel UNUSED, const char *fmt, ...)
++void gpsd_report(int errlevel, const char *fmt, ...)
+ __attribute__ ((weak));
+ #endif
+
+-void gpsd_report(int errlevel UNUSED, const char *fmt, ...)
++static int verbose = LOG_WARN;
++
++void gpsd_report(int errlevel, const char *fmt, ...)
+ /* stub logger for clients that don't supply one */
+ {
+- va_list ap;
++ if (errlevel <= verbose) {
++ va_list ap;
++
++ va_start(ap, fmt);
++ (void)vfprintf(stderr, fmt, ap);
++ va_end(ap);
++ }
++}
+
+- va_start(ap, fmt);
+- (void)vfprintf(stderr, fmt, ap);
+- va_end(ap);
++int gpsd_report_set_level(int errlevel, const char *fmt, ...)
++{
++ int oldlevel = verbose;
++ verbose = errlevel;
++ return oldlevel;
+ }