diff --git a/src/osmo_gsm_tester/core/process.py b/src/osmo_gsm_tester/core/process.py
index bac258a..e305c64 100644
--- a/src/osmo_gsm_tester/core/process.py
+++ b/src/osmo_gsm_tester/core/process.py
@@ -164,6 +164,15 @@
         self.outputs[name] = (path, f)
         return f
 
+    def get_counter_stdout(self, keyword):
+        # Match stdout against keyword
+        n = 0
+        stdout_lines = (self.get_stdout() or '').splitlines()
+        for l in stdout_lines:
+            if keyword in l:
+                n += 1
+        return n
+
     def launch(self):
         preexec_fn = None
         log.dbg('cd %r; %s %s' % (
diff --git a/src/osmo_gsm_tester/obj/enb.py b/src/osmo_gsm_tester/obj/enb.py
index 3944459..d2e48a6 100644
--- a/src/osmo_gsm_tester/obj/enb.py
+++ b/src/osmo_gsm_tester/obj/enb.py
@@ -346,4 +346,8 @@
     def addr(self):
         return self._run_node.run_addr()
 
+    @abstractmethod
+    def get_counter(self, counter_name):
+        pass
+
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/obj/enb_amarisoft.py b/src/osmo_gsm_tester/obj/enb_amarisoft.py
index ef28100..60985f4 100644
--- a/src/osmo_gsm_tester/obj/enb_amarisoft.py
+++ b/src/osmo_gsm_tester/obj/enb_amarisoft.py
@@ -247,6 +247,11 @@
     def running(self):
         return not self.process.terminated()
 
+    def get_counter(self, counter_name):
+        if counter_name == 'prach_received':
+            return self.process.get_counter_stdout('PRACH:')
+        raise log.Error('counter %s not implemented!' % counter_name)
+
     def get_rfemu(self, cell=0, dl=True):
         cell_list = self.gen_conf['enb'].get('cell_list', None)
         if cell_list is None or len(cell_list) < cell + 1:
diff --git a/src/osmo_gsm_tester/obj/enb_srs.py b/src/osmo_gsm_tester/obj/enb_srs.py
index 6afc873..bf988eb 100644
--- a/src/osmo_gsm_tester/obj/enb_srs.py
+++ b/src/osmo_gsm_tester/obj/enb_srs.py
@@ -258,6 +258,11 @@
     def running(self):
         return not self.process.terminated()
 
+    def get_counter(self, counter_name):
+        if counter_name == 'prach_received':
+            return self.process.get_counter_stdout('RACH:')
+        raise log.Error('counter %s not implemented!' % counter_name)
+
     def get_rfemu(self, cell=0, dl=True):
         cell_list = self.gen_conf['enb'].get('cell_list', None)
         if cell_list is None or len(cell_list) < cell + 1:
diff --git a/src/osmo_gsm_tester/obj/ms_srs.py b/src/osmo_gsm_tester/obj/ms_srs.py
index 610d3e6..2f19f3f 100644
--- a/src/osmo_gsm_tester/obj/ms_srs.py
+++ b/src/osmo_gsm_tester/obj/ms_srs.py
@@ -382,30 +382,21 @@
         proc.launch_sync()
         return proc
 
-    def _get_counter_stdout(self, keyword):
-        # Match stdout against keyword
-        n = 0
-        stdout_lines = (self.process.get_stdout() or '').splitlines()
-        for l in stdout_lines:
-            if keyword in l:
-                n += 1
-        return n
-
     def get_counter(self, counter_name):
         if counter_name == 'handover_success':
-            return self._get_counter_stdout('HO successful')
+            return self.process.get_counter_stdout('HO successful')
         if counter_name == 'prach_sent':
-            return self._get_counter_stdout('Random Access Transmission')
+            return self.process.get_counter_stdout('Random Access Transmission')
         if counter_name == 'paging_received':
-            return self._get_counter_stdout('S-TMSI match in paging message')
+            return self.process.get_counter_stdout('S-TMSI match in paging message')
         if counter_name == 'reestablishment_attempts':
-            return self._get_counter_stdout('RRC Connection Reestablishment')
+            return self.process.get_counter_stdout('RRC Connection Reestablishment')
         if counter_name == 'reestablishment_ok':
-            return self._get_counter_stdout('Reestablishment OK')
+            return self.process.get_counter_stdout('Reestablishment OK')
         if counter_name == 'rrc_connected_transitions':
-            return self._get_counter_stdout('RRC Connected')
+            return self.process.get_counter_stdout('RRC Connected')
         if counter_name == 'rrc_idle_transitions':
-            return self._get_counter_stdout('RRC IDLE')
+            return self.process.get_counter_stdout('RRC IDLE')
         raise log.Error('counter %s not implemented!' % counter_name)
 
     def verify_metric(self, value, operation='avg', metric='dl_brate', criterion='gt', window=1):
diff --git a/src/osmo_gsm_tester/obj/srslte_common.py b/src/osmo_gsm_tester/obj/srslte_common.py
index e221940..1d03a58 100644
--- a/src/osmo_gsm_tester/obj/srslte_common.py
+++ b/src/osmo_gsm_tester/obj/srslte_common.py
@@ -97,4 +97,4 @@
             return analyzer.get_num_phy_errors(kpi)
         except ImportError:
             self.log("Can't load KPI analyzer module.")
-            return 0
\ No newline at end of file
+            return 0
