diff --git a/src/osmo_gsm_tester/obj/android_bitrate_monitor.py b/src/osmo_gsm_tester/obj/android_bitrate_monitor.py
new file mode 100644
index 0000000..43d5524
--- /dev/null
+++ b/src/osmo_gsm_tester/obj/android_bitrate_monitor.py
@@ -0,0 +1,118 @@
+# osmo_gsm_tester: specifics for monitoring the bit rate of an AndroidUE modem
+#
+# Copyright (C) 2020 by Software Radio Systems Limited
+#
+# Author: Nils Fürste <nils.fuerste@softwareradiosystems.com>
+# Author: Bedran Karakoc <bedran.karakoc@softwareradiosystems.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+from ..core import log
+from .android_host import AndroidHost
+
+
+class BitRateMonitor(AndroidHost):
+
+##############
+# PROTECTED
+##############
+    def __init__(self, testenv, run_dir, run_node, rem_host, data_interface):
+        super().__init__('brate_monitor_%s' % run_node.run_addr())
+        self.testenv = testenv
+        self.rem_host = rem_host
+        self._run_node = run_node
+        self.run_dir = run_dir
+        self.data_interface = data_interface
+        self.rx_monitor_proc = None
+        self.tx_monitor_proc = None
+
+########################
+# PUBLIC - INTERNAL API
+########################
+    def start(self):
+        # start bit rate monitoring on Android UE
+        popen_args_rx_mon = ['while true; do cat /sys/class/net/' + self.data_interface + '/statistics/rx_bytes;',
+                             'sleep 1;', 'done']
+        popen_args_tx_mon = ['while true; do cat /sys/class/net/' + self.data_interface + '/statistics/tx_bytes;',
+                             'sleep 1;', 'done']
+        self.rx_monitor_proc = self.run_androidue_cmd('start-rx-monitor', popen_args_rx_mon)
+        self.testenv.remember_to_stop(self.rx_monitor_proc)
+        self.rx_monitor_proc.launch()
+        self.tx_monitor_proc = self.run_androidue_cmd('start-tx-monitor', popen_args_tx_mon)
+        self.testenv.remember_to_stop(self.tx_monitor_proc)
+        self.tx_monitor_proc.launch()
+
+    def stop(self):
+        self.testenv.stop_process(self.rx_monitor_proc)
+        self.testenv.stop_process(self.tx_monitor_proc)
+
+    def save_metrics(self, metrics_file):
+        brate_rx_raw = self.rx_monitor_proc.get_stdout().split('\n')
+        brate_tx_raw = self.tx_monitor_proc.get_stdout().split('\n')
+        brate_rx_raw.remove('')
+        brate_tx_raw.remove('')
+        brate_rx_l = brate_rx_raw[1:]
+        brate_tx_l = brate_tx_raw[1:]
+
+        if len(brate_rx_l) < 2 or len(brate_tx_l) < 2:
+            raise log.Error('Insufficient data available to write metrics file')
+
+        # cut of elements if lists don't have the same length
+        if len(brate_rx_l) > len(brate_tx_l):
+            brate_rx_l = brate_rx_l[:len(brate_tx_l) - len(brate_rx_l)]
+        if len(brate_rx_l) < len(brate_tx_l):
+            brate_tx_l = brate_tx_l[:len(brate_rx_l) - len(brate_tx_l)]
+
+        # get start value
+        brate_rx_last = int(brate_rx_l[0])
+        brate_tx_last = int(brate_tx_l[0])
+
+        with open(metrics_file, 'w') as ue_metrics_fh:
+            ue_metrics_fh.write('time;cc;earfcn;pci;rsrp;pl;cfo;pci_neigh;rsrp_neigh;cfo_neigh;'
+                                + 'dl_mcs;dl_snr;dl_turbo;dl_brate;dl_bler;'
+                                + 'ul_ta;ul_mcs;ul_buff;ul_brate;ul_bler;rf_o;rf_u;rf_l;'
+                                + 'is_attached\n')
+            for i in range(1, len(brate_rx_l)):
+                time = '0'
+                cc = '0'
+                earfcn = '0'
+                pci = '0'
+                rsrp = '0'
+                pl = '0'
+                cfo = '0'
+                pci_neigh = '0'
+                rsrp_neigh = '0'
+                cfo_neigh = '0'
+                dl_mcs = '0'
+                dl_snr = '0'
+                dl_turbo = '0'
+                dl_brate = str((int(brate_rx_l[i]) - brate_rx_last) * 8)
+                brate_rx_last = int(brate_rx_l[i])
+                dl_bler = '0'
+                ul_ta = '0'
+                ul_mcs = '0'
+                ul_buff = '0'
+                ul_brate = str((int(brate_tx_l[i]) - brate_tx_last) * 8)
+                brate_tx_last = int(brate_tx_l[i])
+                ul_bler = '0'
+                rf_o = '0'
+                rf_u = '0'
+                rf_l = '0'
+                is_attached = '0'
+
+                line = time + ';' + cc + ';' + earfcn + ';' + pci + ';' + rsrp + ';' + pl + ';' + cfo + ';' \
+                       + pci_neigh + ';' + rsrp_neigh + ';' + cfo_neigh + ';' + dl_mcs + ';' + dl_snr + ';' \
+                       + dl_turbo + ';' + dl_brate + ';' + dl_bler + ';' + ul_ta + ';' + ul_mcs + ';' + ul_buff + ';' \
+                       + ul_brate + ';' + ul_bler + ';' + rf_o + ';' + rf_u + ';' + rf_l + ';' + is_attached
+                ue_metrics_fh.write(line + '\n')
