diff --git a/src/osmo-gsm-tester.py b/src/osmo-gsm-tester.py
index 80fec4f..b6e22f1 100755
--- a/src/osmo-gsm-tester.py
+++ b/src/osmo-gsm-tester.py
@@ -115,6 +115,9 @@
 
         if combination_strs:
             print('Running default suites:\n  ' + ('\n  '.join(combination_strs)))
+        else:
+            print('No default suites configured (%r)' % config.DEFAULT_SUITES_CONF)
+
 
     if not combination_strs:
         raise RuntimeError('Need at least one suite:scenario or series to run')
diff --git a/src/osmo_gsm_tester/bts_osmotrx.py b/src/osmo_gsm_tester/bts_osmotrx.py
index 5880870..cff63ab 100644
--- a/src/osmo_gsm_tester/bts_osmotrx.py
+++ b/src/osmo_gsm_tester/bts_osmotrx.py
@@ -51,7 +51,10 @@
         self.configure()
 
         self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-bts-trx')))
-        self.env = { 'LD_LIBRARY_PATH': str(self.inst) }
+        lib = self.inst.child('lib')
+        if not os.path.isdir(lib):
+            raise RuntimeError('No lib/ in %r' % self.inst)
+        self.env = { 'LD_LIBRARY_PATH': lib }
 
         self.launch_process(OsmoBtsTrx.BIN_TRX)
         self.launch_process(OsmoBtsTrx.BIN_BTS_TRX, '-r', '1', '-c', os.path.abspath(self.config_file))
diff --git a/src/osmo_gsm_tester/config.py b/src/osmo_gsm_tester/config.py
index 6275a47..cbbfa6f 100644
--- a/src/osmo_gsm_tester/config.py
+++ b/src/osmo_gsm_tester/config.py
@@ -61,9 +61,9 @@
 
 DEFAULT_CONFIG_LOCATIONS = [
     '.',
-    os.path.join(os.getenv('HOME'), '.config', 'osmo_gsm_tester'),
-    '/usr/local/etc/osmo_gsm_tester',
-    '/etc/osmo_gsm_tester'
+    os.path.join(os.getenv('HOME'), '.config', 'osmo-gsm-tester'),
+    '/usr/local/etc/osmo-gsm-tester',
+    '/etc/osmo-gsm-tester'
     ]
 
 PATHS_CONF = 'paths.conf'
@@ -81,7 +81,7 @@
 
 PATHS = None
 
-def get_config_file(basename, fail_if_missing=True):
+def _get_config_file(basename, fail_if_missing=True):
     if ENV_CONF:
         locations = [ ENV_CONF ]
     else:
@@ -90,17 +90,23 @@
     for l in locations:
         p = os.path.join(l, basename)
         if os.path.isfile(p):
-            return p
+            return (p, l)
     if not fail_if_missing:
-        return None
+        return None, None
     raise RuntimeError('configuration file not found: %r in %r' % (basename,
         [os.path.abspath(p) for p in locations]))
 
+def get_config_file(basename, fail_if_missing=True):
+    path, found_in = _get_config_file(basename, fail_if_missing)
+    return path
+
 def read_config_file(basename, validation_schema=None, if_missing_return=False):
     fail_if_missing = True
     if if_missing_return is not False:
         fail_if_missing = False
     path = get_config_file(basename, fail_if_missing=fail_if_missing)
+    if path is None:
+        return if_missing_return
     return read(path, validation_schema=validation_schema, if_missing_return=if_missing_return)
 
 def get_configured_path(label, allow_unset=False):
@@ -112,8 +118,11 @@
         return env_path
 
     if PATHS is None:
-        paths_file = get_config_file(PATHS_CONF)
+        paths_file, found_in = _get_config_file(PATHS_CONF)
         PATHS = read(paths_file, PATHS_SCHEMA)
+        for key, path in PATHS.items():
+            if not path.startswith(os.pathsep):
+                PATHS[key] = os.path.join(found_in, path)
     p = PATHS.get(label)
     if p is None and not allow_unset:
         raise RuntimeError('missing configuration in %s: %r' % (PATHS_CONF, label))
diff --git a/src/osmo_gsm_tester/osmo_nitb.py b/src/osmo_gsm_tester/osmo_nitb.py
index 3d5fc6a..7cdc124 100644
--- a/src/osmo_gsm_tester/osmo_nitb.py
+++ b/src/osmo_gsm_tester/osmo_nitb.py
@@ -43,11 +43,14 @@
         self.log('Starting osmo-nitb')
         self.run_dir = util.Dir(self.suite_run.trial.get_run_dir().new_dir(self.name()))
         self.configure()
-        inst = util.Dir(self.suite_run.trial.get_inst('openbsc'))
-        binary = os.path.abspath(inst.child('bin', 'osmo-nitb'))
+        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-nitb')))
+        binary = inst.child('bin', 'osmo-nitb')
         if not os.path.isfile(binary):
             raise RuntimeError('Binary missing: %r' % binary)
-        env = { 'LD_LIBRARY_PATH': os.path.abspath(str(inst)) }
+        lib = inst.child('lib')
+        if not os.path.isdir(lib):
+            raise RuntimeError('No lib/ in %r' % inst)
+        env = { 'LD_LIBRARY_PATH': lib }
         self.dbg(run_dir=self.run_dir, binary=binary, env=env)
         self.process = process.Process(self.name(), self.run_dir,
                                        (binary, '-c',
diff --git a/src/osmo_gsm_tester/trial.py b/src/osmo_gsm_tester/trial.py
index a938971..0a882f8 100644
--- a/src/osmo_gsm_tester/trial.py
+++ b/src/osmo_gsm_tester/trial.py
@@ -50,7 +50,7 @@
 
     def __init__(self, trial_dir):
         self.path = trial_dir
-        self.set_name(self.path)
+        self.set_name(os.path.basename(self.path))
         self.set_log_category(log.C_TST)
         self.dir = util.Dir(self.path)
         self.inst_dir = util.Dir(self.dir.child('inst'))
@@ -133,7 +133,7 @@
     def get_inst(self, bin_name):
         bin_tar = self.has_bin_tar(bin_name)
         if not bin_tar:
-            return None
+            raise RuntimeError('No such binary available: %r' % bin_name)
         inst_dir = self.inst_dir.child(bin_name)
 
         if os.path.isdir(inst_dir):
