diff --git a/src/osmo_gsm_tester/suite.py b/src/osmo_gsm_tester/suite.py
index 457bfb3..c2faa36 100644
--- a/src/osmo_gsm_tester/suite.py
+++ b/src/osmo_gsm_tester/suite.py
@@ -25,6 +25,7 @@
 from .event_loop import MainLoop
 from . import osmo_nitb, osmo_hlr, osmo_mgcpgw, osmo_mgw, osmo_msc, osmo_bsc, osmo_stp, osmo_ggsn, osmo_sgsn, esme, osmocon, ms_driver, iperf3, process
 from . import run_node
+from . import srs_epc
 
 class Timeout(Exception):
     pass
@@ -362,6 +363,18 @@
     def run_node(self, specifics=None):
         return run_node.RunNode.from_conf(self.reserved_resources.get(resource.R_RUN_NODE, specifics=specifics))
 
+    def enb(self, specifics=None):
+        enb = enb_obj(self, self.reserved_resources.get(resource.R_ENB, specifics=specifics))
+        self.register_for_cleanup(enb)
+        return enb
+
+    def epc(self, run_node=None):
+        if run_node is None:
+            run_node = self.run_node()
+        epc_obj = srs_epc.srsEPC(self, run_node)
+        self.register_for_cleanup(epc_obj)
+        return epc_obj
+
     def osmocon(self, specifics=None):
         conf = self.reserved_resources.get(resource.R_OSMOCON, specifics=specifics)
         osmocon_obj = osmocon.Osmocon(self, conf=conf)
@@ -481,4 +494,12 @@
         raise RuntimeError('No such BTS type is defined: %r' % bts_type)
     return bts_class(suite_run, conf)
 
+def enb_obj(suite_run, conf):
+    enb_type = conf.get('type')
+    log.dbg('create ENB object', type=enb_type)
+    enb_class = resource.KNOWN_ENB_TYPES.get(enb_type)
+    if enb_class is None:
+        raise RuntimeError('No such ENB type is defined: %r' % enb_type)
+    return enb_class(suite_run, conf)
+
 # vim: expandtab tabstop=4 shiftwidth=4
