diff --git a/example/defaults.conf b/example/defaults.conf
index 3de5e29..353cf9b 100644
--- a/example/defaults.conf
+++ b/example/defaults.conf
@@ -87,3 +87,8 @@
 
 osmo_bts_virtual:
   max_trx: 1
+
+osmo_bts_oc2g:
+  max_trx: 1
+  trx_list:
+  - nominal_power: 25
diff --git a/example/resources.conf.prod b/example/resources.conf.prod
index dc7e337..a65add0 100644
--- a/example/resources.conf.prod
+++ b/example/resources.conf.prod
@@ -117,6 +117,14 @@
   addr: 10.42.42.55
   band: GSM-1800
 
+- label: OC-2G
+  type: osmo-bts-oc2g
+  ipa_unit_id: 14
+  addr: 10.42.42.100
+  band: GSM-900
+  direct_pcu: true
+  ciphers: [a5_0, a5_1, a5_3]
+
 arfcn:
   - arfcn: 512
     band: GSM-1800
diff --git a/example/scenarios/oc2g.conf b/example/scenarios/oc2g.conf
new file mode 100644
index 0000000..884e46b
--- /dev/null
+++ b/example/scenarios/oc2g.conf
@@ -0,0 +1,3 @@
+resources:
+  bts:
+  - type: osmo-bts-oc2g
diff --git a/src/osmo_gsm_tester/bts_oc2g.py b/src/osmo_gsm_tester/bts_oc2g.py
new file mode 100644
index 0000000..ec4ed3d
--- /dev/null
+++ b/src/osmo_gsm_tester/bts_oc2g.py
@@ -0,0 +1,137 @@
+# osmo_gsm_tester: specifics for running a osmo-bts-oc2g
+#
+# Copyright (C) 2019 by sysmocom - s.f.m.c. GmbH
+#
+# Author: Pau Espin Pedrol <pespin@sysmocom.de>
+#
+# 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/>.
+
+import os
+import pprint
+from . import log, config, util, template, process, pcu_oc2g, bts_osmo
+
+class OsmoBtsOC2G(bts_osmo.OsmoBts):
+##############
+# PROTECTED
+##############
+
+    REMOTE_DIR = '/osmo-gsm-tester-bts'
+    BTS_OC2G_BIN = 'osmo-bts-oc2g'
+    BTS_OC2G_CFG = 'osmo-bts-oc2g.cfg'
+
+    def __init__(self, suite_run, conf):
+        super().__init__(suite_run, conf, OsmoBtsOC2G.BTS_OC2G_BIN, 'osmo_bts_oc2g')
+        self.run_dir = None
+        self.inst = None
+        self.remote_inst = None
+        self.remote_dir = None
+        self.remote_user = 'root'
+
+    def _direct_pcu_enabled(self):
+        return util.str2bool(self.conf.get('direct_pcu'))
+
+    def launch_remote(self, name, popen_args, remote_cwd=None, keepalive=False):
+        run_dir = self.run_dir.new_dir(name)
+        proc = process.RemoteProcess(name, run_dir, self.remote_user, self.remote_addr(), remote_cwd,
+                                     popen_args)
+        self.suite_run.remember_to_stop(proc, keepalive)
+        proc.launch()
+        return proc
+
+    def create_pcu(self):
+        return pcu_oc2g.OsmoPcuOC2G(self.suite_run, self, self.conf)
+
+    def configure(self):
+        if self.bsc is None:
+            raise RuntimeError('BTS needs to be added to a BSC or NITB before it can be configured')
+
+        self.config_file = self.run_dir.new_file(OsmoBtsOC2G.BTS_OC2G_CFG)
+        self.dbg(config_file=self.config_file)
+
+        values = { 'osmo_bts_oc2g': config.get_defaults('osmo_bts_oc2g') }
+        config.overlay(values, self.suite_run.config())
+        config.overlay(values, {
+                        'osmo_bts_oc2g': {
+                            'oml_remote_ip': self.bsc.addr(),
+                            'pcu_socket_path': self.pcu_socket_path(),
+                        }
+        })
+        config.overlay(values, { 'osmo_bts_oc2g': self.conf })
+
+        self.dbg('OSMO-BTS-OC2G CONFIG:\n' + pprint.pformat(values))
+
+        with open(self.config_file, 'w') as f:
+            r = template.render(OsmoBtsOC2G.BTS_OC2G_CFG, values)
+            self.dbg(r)
+            f.write(r)
+
+########################
+# PUBLIC - INTERNAL API
+########################
+    def pcu_socket_path(self):
+        return os.path.join(OsmoBtsOC2G.REMOTE_DIR, 'pcu_bts')
+
+    def conf_for_bsc(self):
+        values = self.conf_for_bsc_prepare()
+        # Hack until we have proper ARFCN resource allocation support (OS#2230)
+        band = values.get('band')
+        trx_list = values.get('trx_list')
+        if band == 'GSM-900':
+            for trx_i in range(len(trx_list)):
+                config.overlay(trx_list[trx_i], { 'arfcn' : str(50 + trx_i * 2) })
+        self.dbg(conf=values)
+        return values
+
+###################
+# PUBLIC (test API included)
+###################
+    # We get log from ssh stdout instead of usual stderr.
+    def ready_for_pcu(self):
+        if not self.proc_bts or not self.proc_bts.is_running:
+            return False
+        return 'BTS is up' in (self.proc_bts.get_stdout() or '')
+
+    def start(self, keepalive=False):
+        if self.bsc is None:
+            raise RuntimeError('BTS needs to be added to a BSC or NITB before it can be started')
+        log.log('Starting OsmoBtsOC2G to connect to', self.bsc)
+        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.configure()
+
+        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst(OsmoBtsOC2G.BTS_OC2G_BIN)))
+        lib = self.inst.child('lib')
+        if not os.path.isdir(lib):
+            raise log.Error('No lib/ in', self.inst)
+        if not self.inst.isfile('bin', OsmoBtsOC2G.BTS_OC2G_BIN):
+            raise log.Error('No osmo-bts-oc2g binary in', self.inst)
+
+        remote_run_dir = util.Dir(OsmoBtsOC2G.REMOTE_DIR)
+
+        self.remote_inst = process.copy_inst_ssh(self.run_dir, self.inst, remote_run_dir, self.remote_user,
+                                         self.remote_addr(), OsmoBtsOC2G.BTS_OC2G_BIN, self.config_file)
+
+        remote_config_file = remote_run_dir.child(OsmoBtsOC2G.BTS_OC2G_CFG)
+        remote_lib = self.remote_inst.child('lib')
+        remote_binary = self.remote_inst.child('bin', 'osmo-bts-oc2g')
+
+        args = ('LD_LIBRARY_PATH=%s' % remote_lib,
+         remote_binary, '-c', remote_config_file, '-r', '1',
+         '-i', self.bsc.addr())
+
+        if self._direct_pcu_enabled():
+            args += ('-M',)
+
+        self.proc_bts = self.launch_remote('osmo-bts-oc2g', args, remote_cwd=remote_run_dir, keepalive=keepalive)
+
+# vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/pcu_oc2g.py b/src/osmo_gsm_tester/pcu_oc2g.py
new file mode 100644
index 0000000..b0572f4
--- /dev/null
+++ b/src/osmo_gsm_tester/pcu_oc2g.py
@@ -0,0 +1,125 @@
+# osmo_gsm_tester: specifics for running a osmo-pcu for OC-2G
+#
+# Copyright (C) 2019 by sysmocom - s.f.m.c. GmbH
+#
+# Author: Pau Espin Pedrol <pespin@sysmocom.de>
+#
+# 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/>.
+
+import os
+import pprint
+from . import log, config, util, template, process
+
+class OsmoPcuOC2G(log.Origin):
+
+    REMOTE_DIR = '/osmo-gsm-tester-pcu'
+    PCU_OC2G_BIN = 'osmo-pcu'
+    PCU_OC2G_CFG = 'osmo-pcu-oc2g.cfg'
+
+    def __init__(self, suite_run, btsoc2g, conf):
+        super().__init__(log.C_RUN, self.PCU_OC2G_BIN)
+        self.run_dir = None
+        self.bsc = None
+        self.inst = None
+        self.remote_inst = None
+        self.remote_dir = None
+        self.btsoc2g = None
+        self.suite_run = suite_run
+        self.btsoc2g = btsoc2g
+        self.conf = conf
+        self.remote_env = {}
+        self.remote_user = 'root'
+
+    def start(self, keepalive=False):
+        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.configure()
+
+        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-pcu-oc2g')))
+        lib = self.inst.child('lib')
+        if not os.path.isdir(lib):
+            raise log.Error('No lib/ in', self.inst)
+        if not self.inst.isfile('bin', OsmoPcuOC2G.PCU_OC2G_BIN):
+            raise log.Error('No osmo-pcu-oc2g binary in', self.inst)
+
+        self.remote_dir = util.Dir(OsmoPcuOC2G.REMOTE_DIR)
+        self.remote_inst = util.Dir(self.remote_dir.child(os.path.basename(str(self.inst))))
+
+        self.run_remote('rm-remote-dir', ('test', '!', '-d', OsmoPcuOC2G.REMOTE_DIR, '||', 'rm', '-rf', OsmoPcuOC2G.REMOTE_DIR))
+        self.run_remote('mk-remote-dir', ('mkdir', '-p', OsmoPcuOC2G.REMOTE_DIR))
+        self.run_local('scp-inst-to-btsoc2g',
+            ('scp', '-r', str(self.inst), '%s@%s:%s' % (self.remote_user, self.btsoc2g.remote_addr(), str(self.remote_inst))))
+
+        remote_run_dir = self.remote_dir.child(OsmoPcuOC2G.PCU_OC2G_BIN)
+        self.run_remote('mk-remote-run-dir', ('mkdir', '-p', remote_run_dir))
+
+        remote_config_file = self.remote_dir.child(OsmoPcuOC2G.PCU_OC2G_CFG)
+        self.run_local('scp-cfg-to-btsoc2g',
+            ('scp', '-r', self.config_file, '%s@%s:%s' % (self.remote_user, self.btsoc2g.remote_addr(), remote_config_file)))
+
+        remote_lib = self.remote_inst.child('lib')
+        remote_binary = self.remote_inst.child('bin', OsmoPcuOC2G.PCU_OC2G_BIN)
+        self.launch_remote(OsmoPcuOC2G.PCU_OC2G_BIN,
+            ('LD_LIBRARY_PATH=%s' % remote_lib,
+             remote_binary, '-c', remote_config_file, '-r', '1',
+             '-i', self.btsoc2g.bsc.addr()),
+            remote_cwd=remote_run_dir, keepalive=keepalive)
+
+    def _process_remote(self, name, popen_args, remote_cwd=None):
+        run_dir = self.run_dir.new_dir(name)
+        return process.RemoteProcess(name, run_dir, self.remote_user, self.btsoc2g.remote_addr(), remote_cwd,
+                                     popen_args)
+
+    def run_remote(self, name, popen_args, remote_cwd=None):
+        proc = self._process_remote(name, popen_args, remote_cwd)
+        proc.launch()
+        proc.wait()
+        if proc.result != 0:
+            log.ctx(proc)
+            raise log.Error('Exited in error')
+
+    def launch_remote(self, name, popen_args, remote_cwd=None, keepalive=False):
+        proc = self._process_remote(name, popen_args, remote_cwd)
+        self.suite_run.remember_to_stop(proc, keepalive)
+        proc.launch()
+
+    def run_local(self, name, popen_args):
+        run_dir = self.run_dir.new_dir(name)
+        proc = process.Process(name, run_dir, popen_args)
+        proc.launch()
+        proc.wait()
+        if proc.result != 0:
+            log.ctx(proc)
+            raise log.Error('Exited in error')
+
+    def configure(self):
+        self.config_file = self.run_dir.new_file(OsmoPcuOC2G.PCU_OC2G_CFG)
+        self.dbg(config_file=self.config_file)
+
+        values = { 'osmo_pcu_oc2g': config.get_defaults('osmo_pcu_oc2g') }
+        config.overlay(values, self.suite_run.config())
+        config.overlay(values, {
+                        'osmo_pcu_oc2g': {
+                            'pcu_socket_path': self.btsoc2g.pcu_socket_path()
+                        }
+        })
+        config.overlay(values, { 'osmo_pcu_oc2g': self.conf })
+
+        self.dbg('OSMO-PCU-OC2G CONFIG:\n' + pprint.pformat(values))
+
+        with open(self.config_file, 'w') as f:
+            r = template.render(OsmoPcuOC2G.PCU_OC2G_CFG, values)
+            self.dbg(r)
+            f.write(r)
+
+# vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/resource.py b/src/osmo_gsm_tester/resource.py
index ce1966b..246b196 100644
--- a/src/osmo_gsm_tester/resource.py
+++ b/src/osmo_gsm_tester/resource.py
@@ -26,7 +26,7 @@
 from . import config
 from . import util
 from . import schema
-from . import bts_sysmo, bts_osmotrx, bts_osmovirtual, bts_octphy, bts_nanobts
+from . import bts_sysmo, bts_osmotrx, bts_osmovirtual, bts_octphy, bts_nanobts, bts_oc2g
 from . import modem
 from . import ms_osmo_mobile
 
@@ -101,6 +101,7 @@
 KNOWN_BTS_TYPES = {
         'osmo-bts-sysmo': bts_sysmo.SysmoBts,
         'osmo-bts-trx': bts_osmotrx.OsmoBtsTrx,
+        'osmo-bts-oc2g': bts_oc2g.OsmoBtsOC2G,
         'osmo-bts-octphy': bts_octphy.OsmoBtsOctphy,
         'osmo-bts-virtual': bts_osmovirtual.OsmoBtsVirtual,
         'nanobts': bts_nanobts.NanoBts,
diff --git a/src/osmo_gsm_tester/templates/osmo-bts-oc2g.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-bts-oc2g.cfg.tmpl
new file mode 100644
index 0000000..1927061
--- /dev/null
+++ b/src/osmo_gsm_tester/templates/osmo-bts-oc2g.cfg.tmpl
@@ -0,0 +1,42 @@
+! Configuration rendered by osmo-gsm-tester
+log stderr
+  logging color 1
+  logging print extended-timestamp 1
+  logging print category 1
+  logging level abis debug
+  logging level oml debug
+  logging level pag debug
+  logging level rll debug
+  logging level rr debug
+  logging level rsl debug
+  ! Level required by ready_for_pcu(): pcu info
+  logging level pcu info
+!
+line vty
+ bind ${osmo_bts_oc2g.addr}
+ctrl
+ bind ${osmo_bts_oc2g.addr}
+!
+phy 0
+ instance 0
+  trx-calibration-path /mnt/rom/factory/calib
+bts 0
+ band ${osmo_bts_oc2g.band}
+ ipa unit-id ${osmo_bts_oc2g.ipa_unit_id} 0
+ oml remote-ip ${osmo_bts_oc2g.oml_remote_ip}
+ pcu-socket ${osmo_bts_oc2g.pcu_socket_path}
+ gsmtap-sapi bcch
+ gsmtap-sapi ccch
+ gsmtap-sapi rach
+ gsmtap-sapi agch
+ gsmtap-sapi pch
+ gsmtap-sapi sdcch
+ gsmtap-sapi tch/f
+ gsmtap-sapi tch/h
+ gsmtap-sapi pacch
+ gsmtap-sapi pdtch
+ gsmtap-sapi ptcch
+ gsmtap-sapi cbch
+ gsmtap-sapi sacch
+ trx 0
+  phy 0 instance 0
diff --git a/src/osmo_gsm_tester/templates/osmo-pcu-oc2g.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-pcu-oc2g.cfg.tmpl
new file mode 100644
index 0000000..5c03636
--- /dev/null
+++ b/src/osmo_gsm_tester/templates/osmo-pcu-oc2g.cfg.tmpl
@@ -0,0 +1,12 @@
+log stderr
+  logging color 1
+  logging print extended-timestamp 1
+  logging print category 1
+  logging level set-all info
+pcu
+ pcu-socket ${osmo_pcu_oc2g.pcu_socket_path}
+ flow-control-interval 10
+ cs 2
+ alloc-algorithm dynamic
+ alpha 0
+ gamma 0
