diff --git a/apps/grgsm_livemon.grc b/apps/grgsm_livemon.grc
index 46b83e2..176aa6c 100644
--- a/apps/grgsm_livemon.grc
+++ b/apps/grgsm_livemon.grc
@@ -2844,7 +2844,7 @@
     </param>
     <param>
       <key>args</key>
-      <value>args</value>
+      <value>str(grgsm.device.get_default_args(args))</value>
     </param>
     <param>
       <key>_enabled</key>
diff --git a/apps/grgsm_livemon_headless.grc b/apps/grgsm_livemon_headless.grc
index a1ce284..2f3e981 100644
--- a/apps/grgsm_livemon_headless.grc
+++ b/apps/grgsm_livemon_headless.grc
@@ -2414,7 +2414,7 @@
     </param>
     <param>
       <key>args</key>
-      <value>args</value>
+      <value>str(grgsm.device.get_default_args(args))</value>
     </param>
     <param>
       <key>_enabled</key>
diff --git a/apps/grgsm_scanner b/apps/grgsm_scanner
index 32210ed..ce33a60 100755
--- a/apps/grgsm_scanner
+++ b/apps/grgsm_scanner
@@ -36,7 +36,7 @@
 import osmosdr
 import pmt
 import time
-
+import sys
 
 # from wideband_receiver import *
 
@@ -208,7 +208,8 @@
 
         # if no file name is given process data from rtl_sdr source
         print "Args=", args
-        self.rtlsdr_source = osmosdr.source(args="numchan=" + str(1) + " " + args)
+        self.rtlsdr_source = osmosdr.source(args="numchan=" + str(1) + " " +
+                str(grgsm.device.get_default_args(args)))
         #self.rtlsdr_source.set_min_output_buffer(int(sample_rate*rec_len)) #this line causes segfaults on HackRF
         self.rtlsdr_source.set_sample_rate(sample_rate)
 
@@ -387,7 +388,10 @@
     parser.add_option("-g", "--gain", dest="gain", type="eng_float", default=24.0,
                       help="Set gain [default=%default]")
     parser.add_option("", "--args", dest="args", type="string", default="",
-                      help="Set device arguments [default=%default]")
+                      help="Set device arguments [default=%default]."
+                      " Use --list-devices the view the available devices")
+    parser.add_option("-l", "--list-devices", action="store_true",
+                      help="List available SDR devices, use --args to specify hints")
     parser.add_option("--speed", dest="speed", type="intx", default=4,
                       help="Scan speed [default=%default]. Value range 0-5.")
     parser.add_option("-v", "--verbose", action="store_true",
@@ -404,6 +408,10 @@
     if options is None:
         (options, args) = argument_parser().parse_args()
 
+    if options.list_devices:
+        grgsm.device.print_devices(options.args)
+        sys.exit(0)
+
     if options.band not in grgsm.arfcn.get_bands():
         parser.error("Invalid GSM band\n")
 
diff --git a/apps/helpers/grgsm_capture b/apps/helpers/grgsm_capture
index 081544a..f3886ba 100755
--- a/apps/helpers/grgsm_capture
+++ b/apps/helpers/grgsm_capture
@@ -53,8 +53,8 @@
         # Setting up RF source
         ##################################################
 
-        self.sdr_source = \
-                    osmosdr.source(args="numchan=" + str(1) + " " + device_args)
+        self.sdr_source = osmosdr.source(args="numchan=" + str(1) + " " +
+                str(grgsm.device.get_default_args(device_args)))
 
         self.sdr_source.set_sample_rate(samp_rate)
         self.sdr_source.set_center_freq(freq, 0)
@@ -141,12 +141,19 @@
 
     osmogroup.add_option("", "--args", dest="device_args", type="string",
                       default="", help="Set device arguments "
-                      "[default=%default]")
+                      "[default=%default]. Use --list-devices the view the available devices")
+
+    osmogroup.add_option("-l", "--list-devices", action="store_true",
+                      help="List available SDR devices, use --args to specify hints")
 
     parser.add_option_group(osmogroup)
 
     (options, args) = parser.parse_args()
 
+    if options.list_devices:
+        grgsm.device.print_devices(options.device_args)
+        sys.exit(0)
+
     if not args:
         parser.error("Please provide an output file name to save the captured data\n")
 
diff --git a/python/__init__.py b/python/__init__.py
index 00d14ac..e2905e8 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -59,6 +59,7 @@
 from fn_time import *
 from txtime_bursts_tagger import *
 import arfcn
+import device
 
 
 #
diff --git a/python/misc_utils/CMakeLists.txt b/python/misc_utils/CMakeLists.txt
index ec732a4..76304ca 100644
--- a/python/misc_utils/CMakeLists.txt
+++ b/python/misc_utils/CMakeLists.txt
@@ -23,5 +23,6 @@
     clock_offset_corrector_tagged.py
     hier_block.py 
     fn_time.py
+    device.py
     DESTINATION ${GR_PYTHON_DIR}/grgsm
 )
diff --git a/python/misc_utils/device.py b/python/misc_utils/device.py
new file mode 100644
index 0000000..de967ab
--- /dev/null
+++ b/python/misc_utils/device.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# @file
+# @author (C) 2019 by Vasil Velichkov <vvvelichkov@gmail.com>
+# @section LICENSE
+#
+# Gr-gsm is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# Gr-gsm is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with gr-gsm; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+#
+
+import osmosdr
+import os
+
+def get_devices(hint=""):
+    return osmosdr.device_find(osmosdr.device_t(hint))
+
+def match(dev, filters):
+    for f in filters:
+        for k, v in f.items():
+            if (k not in dev or dev[k] != v):
+                break
+        else:
+            return True
+    return False
+
+def exclude(devices, filters = ({'driver': 'audio'},)):
+    return [dev for dev in devices if not match(dev, filters)]
+
+def get_all_args(hint="nofake"):
+    return map(lambda dev: dev.to_string(), exclude(get_devices(hint)))
+
+def get_default_args(args):
+    # The presence of GRC_BLOCKS_PATH environment variable indicates that
+    # gnuradio-companion compiles a flowgraph and in this case no exception
+    # have to be thrown otherwise the generaged python script will be invalid.
+    # This allows compilation of flowgraphs without an SDR device.
+    if args or os.getenv("GRC_BLOCKS_PATH"):
+        return args
+
+    devices = get_all_args("nofake")
+    if not devices:
+        raise RuntimeError("Unable to find any supported SDR devices")
+
+    return devices[0]
+
+def print_devices(hint=""):
+    devices = exclude(get_devices(hint))
+    if devices:
+        print("\n".join(map(lambda dev: dev.to_string(), devices)))
+    else:
+        print("Unable to find any supported SDR devices")
