diff --git a/src/osmo_gsm_tester/bts_osmotrx.py b/src/osmo_gsm_tester/bts_osmotrx.py
index 78c17cc..1322a74 100644
--- a/src/osmo_gsm_tester/bts_osmotrx.py
+++ b/src/osmo_gsm_tester/bts_osmotrx.py
@@ -287,14 +287,14 @@
         rem_host.scp('scp-cfg-to-remote', self.config_file, remote_config_file)
 
         if have_inst:
-            remote_lib = self.remote_inst.child('lib')
+            remote_env = { 'LD_LIBRARY_PATH': self.remote_inst.child('lib') }
             remote_binary = self.remote_inst.child('bin', self.binary_name())
             args = (remote_binary, '-C', remote_config_file)
         else: # Use whatever is available i nremote system PATH:
-            remote_lib = None
+            remote_env = {}
             remote_binary = self.binary_name()
         args = (remote_binary, '-C', remote_config_file)
-        self.proc_trx = rem_host.RemoteProcessFixIgnoreSIGHUP(self.binary_name(), remote_run_dir, args, prepend_ldlibpath=remote_lib)
+        self.proc_trx = rem_host.RemoteProcessFixIgnoreSIGHUP(self.binary_name(), remote_run_dir, args, remote_env=remote_env)
         self.suite_run.remember_to_stop(self.proc_trx, keepalive)
         self.proc_trx.launch()
 
diff --git a/src/osmo_gsm_tester/process.py b/src/osmo_gsm_tester/process.py
index 1c2f592..3880630 100644
--- a/src/osmo_gsm_tester/process.py
+++ b/src/osmo_gsm_tester/process.py
@@ -353,26 +353,28 @@
 
 class RemoteProcess(Process):
 
-    def __init__(self, name, run_dir, remote_user, remote_host, remote_cwd, popen_args, **popen_kwargs):
+    def __init__(self, name, run_dir, remote_user, remote_host, remote_cwd, popen_args, remote_env={}, **popen_kwargs):
         super().__init__(name, run_dir, popen_args, **popen_kwargs)
         self.remote_user = remote_user
         self.remote_host = remote_host
         self.remote_cwd = remote_cwd
+        self.remote_env = remote_env
 
         # hacky: instead of just prepending ssh, i.e. piping stdout and stderr
         # over the ssh link, we should probably run on the remote side,
         # monitoring the process remotely.
         if self.remote_cwd:
-            cd = 'cd "%s"; ' % self.remote_cwd
+            cd = 'cd "%s";' % self.remote_cwd
         else:
             cd = ''
         # We need double -t to force tty and be able to forward signals to
         # processes (SIGHUP) when we close ssh on the local side. As a result,
         # stderr seems to be merged into stdout in ssh client.
         self.popen_args = ['ssh', '-t', '-t', self.remote_user+'@'+self.remote_host,
-                           '%s%s' % (cd,
-                                     ' '.join(self.popen_args))]
-        self.dbg(self.popen_args, dir=self.run_dir, conf=self.popen_kwargs)
+                           '%s %s %s' % (cd,
+                                         ' '.join(['%s=%r'%(k,v) for k,v in self.remote_env.items()]),
+                                         ' '.join(self.popen_args))]
+        self.dbg(self.popen_args, dir=self.run_dir, conf=self.popen_kwargs, remote_env=self.remote_env)
 
 class NetNSProcess(Process):
     NETNS_EXEC_BIN = 'osmo-gsm-tester_netns_exec.sh'
diff --git a/src/osmo_gsm_tester/remote.py b/src/osmo_gsm_tester/remote.py
index 92dd113..6be0a5e 100644
--- a/src/osmo_gsm_tester/remote.py
+++ b/src/osmo_gsm_tester/remote.py
@@ -34,6 +34,7 @@
         self.remote_user = remote_user
         self.remote_host = remote_host
         self.remote_cwd = remote_cwd
+        self.remote_env = {}
 
     def user(self):
         return self.remote_user
@@ -44,9 +45,15 @@
     def cwd(self):
         return self.remote_cwd
 
-    def RemoteProcess(self, name, popen_args, **popen_kwargs):
+    def set_remote_env(self, remote_env_dict):
+        self.remote_env = remote_env_dict
+
+    def get_remote_env(self):
+        return self.remote_env
+
+    def RemoteProcess(self, name, popen_args, remote_env={}, **popen_kwargs):
         run_dir = self.run_dir.new_dir(name)
-        return process.RemoteProcess(name, run_dir, self.user(), self.host(), self.cwd(), popen_args, **popen_kwargs)
+        return process.RemoteProcess(name, run_dir, self.user(), self.host(), self.cwd(), popen_args, remote_env=remote_env, **popen_kwargs)
 
     def generate_wrapper_script(self):
         wrapper_script = self.run_dir.new_file(RemoteHost.WRAPPER_SCRIPT)
@@ -72,7 +79,7 @@
         os.chmod(wrapper_script, st.st_mode | stat.S_IEXEC)
         return wrapper_script
 
-    def RemoteProcessFixIgnoreSIGHUP(self, name, remote_dir, popen_args,  prepend_ldlibpath=None, **popen_kwargs):
+    def RemoteProcessFixIgnoreSIGHUP(self, name, remote_dir, popen_args, remote_env={}, **popen_kwargs):
         # Run remotely through ssh. We need to run binary under a wrapper
         # script since osmo-trx ignores SIGHUP and will keep running after
         # we close local ssh session. The wrapper script catches SIGHUP and
@@ -83,15 +90,11 @@
         remote_wrapper_script = remote_dir.child(RemoteHost.WRAPPER_SCRIPT)
         self.scp('scp-wrapper-to-remote', wrapper_script, remote_wrapper_script)
 
-        # Used fi to run stuff from an osmo-gsm-tester copied inst
-        if prepend_ldlibpath is not None:
-            args = ('LD_LIBRARY_PATH=%s' % prepend_ldlibpath, remote_wrapper_script,) + popen_args
-        else:
-            args = (remote_wrapper_script,) + popen_args
-        return self.RemoteProcess(name, args, **popen_kwargs)
+        args = (remote_wrapper_script,) + popen_args
+        return self.RemoteProcess(name, args, remote_env, **popen_kwargs)
 
     def run_remote_sync(self, name, popen_args):
-        proc = self.RemoteProcess(name, popen_args)
+        proc = self.RemoteProcess(name, popen_args, remote_env=self.remote_env)
         proc.launch_sync()
         return proc
 
