diff --git a/src/osmo_gsm_tester/obj/enb.py b/src/osmo_gsm_tester/obj/enb.py
index 9db0d69..7004805 100644
--- a/src/osmo_gsm_tester/obj/enb.py
+++ b/src/osmo_gsm_tester/obj/enb.py
@@ -20,13 +20,12 @@
 from abc import ABCMeta, abstractmethod
 from ..core import log, config
 from ..core import schema
+from . import run_node
 
 def on_register_schemas():
     resource_schema = {
         'label': schema.STR,
         'type': schema.STR,
-        'remote_user': schema.STR,
-        'addr': schema.IPV4,
         'gtp_bind_addr': schema.IPV4,
         'id': schema.UINT,
         'num_prb': schema.UINT,
@@ -60,6 +59,8 @@
         'cell_list[].dl_rfemu.addr': schema.IPV4,
         'cell_list[].dl_rfemu.ports[]': schema.UINT,
         }
+    for key, val in run_node.RunNode.schema().items():
+        resource_schema['run_node.%s' % key] = val
     schema.register_resource_schema('enb', resource_schema)
 
 class eNodeB(log.Origin, metaclass=ABCMeta):
@@ -70,13 +71,11 @@
     def __init__(self, testenv, conf, name):
         super().__init__(log.C_RUN, '%s' % name)
         self._conf = conf
-        self._addr = conf.get('addr', None)
-        if self._addr is None:
-            raise log.Error('addr not set')
+        self._run_node = run_node.RunNode.from_conf(conf.get('run_node', {}))
         self._gtp_bind_addr = conf.get('gtp_bind_addr', None)
         if self._gtp_bind_addr is None:
-            self._gtp_bind_addr = self._addr
-        self.set_name('%s_%s' % (name, self._addr))
+            self._gtp_bind_addr = self._run_node.run_addr()
+        self.set_name('%s_%s' % (name, self._run_node.run_addr()))
         self._txmode = 0
         self._id = None
         self._num_prb = 0
@@ -99,6 +98,7 @@
         assert self._txmode
         config.overlay(values, dict(enb={ 'num_ports': self.num_ports() }))
         assert self._epc is not None
+        config.overlay(values, dict(enb={ 'addr': self.addr() }))
         config.overlay(values, dict(enb={ 'mme_addr': self._epc.addr() }))
         config.overlay(values, dict(enb={ 'gtp_bind_addr': self._gtp_bind_addr }))
         self._num_cells = int(values['enb'].get('num_cells', None))
@@ -235,7 +235,7 @@
         pass
 
     def addr(self):
-        return self._addr
+        return self._run_node.run_addr()
 
     def ue_max_rate(self, downlink=True):
         # The max rate for a single UE per PRB configuration in TM1 with MCS 28 QAM64
diff --git a/src/osmo_gsm_tester/obj/enb_amarisoft.py b/src/osmo_gsm_tester/obj/enb_amarisoft.py
index fa79cbf..c331cd8 100644
--- a/src/osmo_gsm_tester/obj/enb_amarisoft.py
+++ b/src/osmo_gsm_tester/obj/enb_amarisoft.py
@@ -69,7 +69,6 @@
         self.remote_log_file = None
         self.enable_measurements = False
         self.testenv = testenv
-        self.remote_user = conf.get('remote_user', None)
         if not rf_type_valid(conf.get('rf_dev_type', None)):
             raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))
 
@@ -83,7 +82,7 @@
     def cleanup(self):
         if self.process is None:
             return
-        if self.setup_runs_locally():
+        if self._run_node.is_local():
             return
         # copy back files (may not exist, for instance if there was an early error of process):
         try:
@@ -91,10 +90,6 @@
         except Exception as e:
             self.log(repr(e))
 
-
-    def setup_runs_locally(self):
-        return self.remote_user is None
-
     def start(self, epc):
         self.log('Starting AmarisoftENB')
         self._epc = epc
@@ -107,7 +102,7 @@
         self.process.stdin_write('t\n')
 
     def _start(self):
-        if self.setup_runs_locally():
+        if self._run_node.is_local():
             env = { 'LD_LIBRARY_PATH': util.prepend_library_path(self.inst) }
             binary = self.inst.child('.', AmarisoftENB.BINFILE)
             self.dbg(run_dir=self.run_dir, binary=binary, env=env)
@@ -141,8 +136,8 @@
         self.config_drb_file = self.run_dir.child(AmarisoftENB.CFGFILE_DRB)
         self.log_file = self.run_dir.child(AmarisoftENB.LOGFILE)
 
-        if not self.setup_runs_locally():
-            self.rem_host = remote.RemoteHost(self.run_dir, self.remote_user, self._addr)
+        if not self._run_node.is_local():
+            self.rem_host = remote.RemoteHost(self.run_dir, self._run_node.ssh_user(), self._run_node.ssh_addr())
             remote_prefix_dir = util.Dir(AmarisoftENB.REMOTE_DIR)
             self.remote_inst = util.Dir(remote_prefix_dir.child(os.path.basename(str(self.inst))))
             remote_run_dir = util.Dir(remote_prefix_dir.child(AmarisoftENB.BINFILE))
@@ -186,7 +181,7 @@
 
                 config.overlay(values, dict(enb=dict(rf_dev_args=rf_dev_args)))
 
-        logfile = self.log_file if self.setup_runs_locally() else self.remote_log_file
+        logfile = self.log_file if self._run_node.is_local() else self.remote_log_file
         config.overlay(values, dict(enb=dict(log_filename=logfile)))
 
         # rf driver is shared between amarisoft enb and ue, so it has a
@@ -205,7 +200,7 @@
         self.gen_conf_file(self.config_rf_file, AmarisoftENB.CFGFILE_RF, values)
         self.gen_conf_file(self.config_drb_file, AmarisoftENB.CFGFILE_DRB, values)
 
-        if not self.setup_runs_locally():
+        if not self._run_node.is_local():
             self.rem_host.recreate_remote_dir(self.remote_inst)
             self.rem_host.scp('scp-inst-to-remote', str(self.inst), remote_prefix_dir)
             self.rem_host.recreate_remote_dir(remote_run_dir)
diff --git a/src/osmo_gsm_tester/obj/enb_srs.py b/src/osmo_gsm_tester/obj/enb_srs.py
index 47b373e..9e93541 100644
--- a/src/osmo_gsm_tester/obj/enb_srs.py
+++ b/src/osmo_gsm_tester/obj/enb_srs.py
@@ -68,7 +68,6 @@
         self.remote_pcap_file = None
         self.enable_pcap = False
         self.testenv = testenv
-        self.remote_user = conf.get('remote_user', None)
         self._additional_args = []
         if not rf_type_valid(conf.get('rf_dev_type', None)):
             raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))
@@ -76,7 +75,7 @@
     def cleanup(self):
         if self.process is None:
             return
-        if self.setup_runs_locally():
+        if self._run_node.is_local():
             return
         # copy back files (may not exist, for instance if there was an early error of process):
         try:
@@ -89,18 +88,15 @@
             except Exception as e:
                 self.log(repr(e))
 
-    def setup_runs_locally(self):
-        return self.remote_user is None
-
     def start(self, epc):
         self.log('Starting srsENB')
         self._epc = epc
         self.run_dir = util.Dir(self.testenv.test().get_run_dir().new_dir(self.name()))
         self.configure()
-        if self.remote_user:
-            self.start_remotely()
-        else:
+        if self._run_node.is_local():
             self.start_locally()
+        else:
+            self.start_remotely()
 
         # send t+Enter to enable console trace
         self.dbg('Enabling console trace')
@@ -149,8 +145,8 @@
         self.log_file = self.run_dir.child(srsENB.LOGFILE)
         self.pcap_file = self.run_dir.child(srsENB.PCAPFILE)
 
-        if not self.setup_runs_locally():
-            self.rem_host = remote.RemoteHost(self.run_dir, self.remote_user, self._addr)
+        if not self._run_node.is_local():
+            self.rem_host = remote.RemoteHost(self.run_dir, self._run_node.ssh_user(), self._run_node.ssh_addr())
             remote_prefix_dir = util.Dir(srsENB.REMOTE_DIR)
             self.remote_inst = util.Dir(remote_prefix_dir.child(os.path.basename(str(self.inst))))
             self.remote_run_dir = util.Dir(remote_prefix_dir.child(srsENB.BINFILE))
@@ -164,11 +160,11 @@
 
         values = super().configure(['srsenb'])
 
-        sibfile = self.config_sib_file if self.setup_runs_locally() else self.remote_config_sib_file
-        rrfile = self.config_rr_file if self.setup_runs_locally() else self.remote_config_rr_file
-        drbfile = self.config_drb_file if self.setup_runs_locally() else self.remote_config_drb_file
-        logfile = self.log_file if self.setup_runs_locally() else self.remote_log_file
-        pcapfile = self.pcap_file if self.setup_runs_locally() else self.remote_pcap_file
+        sibfile = self.config_sib_file if self._run_node.is_local() else self.remote_config_sib_file
+        rrfile = self.config_rr_file if self._run_node.is_local() else self.remote_config_rr_file
+        drbfile = self.config_drb_file if self._run_node.is_local() else self.remote_config_drb_file
+        logfile = self.log_file if self._run_node.is_local() else self.remote_log_file
+        pcapfile = self.pcap_file if self._run_node.is_local() else self.remote_pcap_file
         config.overlay(values, dict(enb=dict(sib_filename=sibfile,
                                              rr_filename=rrfile,
                                              drb_filename=drbfile,
@@ -209,7 +205,7 @@
         self.gen_conf_file(self.config_rr_file, srsENB.CFGFILE_RR, values)
         self.gen_conf_file(self.config_drb_file, srsENB.CFGFILE_DRB, values)
 
-        if not self.setup_runs_locally():
+        if not self._run_node.is_local():
             self.rem_host.recreate_remote_dir(self.remote_inst)
             self.rem_host.scp('scp-inst-to-remote', str(self.inst), remote_prefix_dir)
             self.rem_host.recreate_remote_dir(self.remote_run_dir)
diff --git a/src/osmo_gsm_tester/obj/run_node.py b/src/osmo_gsm_tester/obj/run_node.py
index bd502af..6a030ac 100644
--- a/src/osmo_gsm_tester/obj/run_node.py
+++ b/src/osmo_gsm_tester/obj/run_node.py
@@ -21,13 +21,7 @@
 from ..core import schema
 
 def on_register_schemas():
-    resource_schema = {
-        'run_type': schema.STR,
-        'run_addr': schema.IPV4,
-        'ssh_user': schema.STR,
-        'ssh_addr': schema.IPV4,
-        'run_label': schema.STR,
-        }
+    resource_schema = RunNode.schema()
     schema.register_resource_schema('run_node', resource_schema)
 
 
@@ -63,6 +57,17 @@
                    conf.get('ssh_user', None), conf.get('ssh_addr', None),
                    conf.get('run_label', None))
 
+    @classmethod
+    def schema(cls):
+        resource_schema = {
+            'run_type': schema.STR,
+            'run_addr': schema.IPV4,
+            'ssh_user': schema.STR,
+            'ssh_addr': schema.IPV4,
+            'run_label': schema.STR,
+            }
+        return resource_schema
+
     def is_local(self):
         return self._type == RunNode.T_LOCAL
 
