diff --git a/suites/voice/lib/testlib.py b/suites/voice/lib/testlib.py
new file mode 100644
index 0000000..7d934f1
--- /dev/null
+++ b/suites/voice/lib/testlib.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python3
+from osmo_gsm_tester.testenv import *
+
+def test_mo_mt_call(use_osmux=False, force_osmux=False):
+    hlr = suite.hlr()
+    bts = suite.bts()
+    mgw_msc = suite.mgw()
+    mgw_bsc = suite.mgw()
+    stp = suite.stp()
+    msc = suite.msc(hlr, mgw_msc, stp)
+    bsc = suite.bsc(msc, mgw_bsc, stp)
+    ms_mo = suite.modem()
+    ms_mt = suite.modem()
+
+    hlr.start()
+    stp.start()
+
+    msc.set_use_osmux(use_osmux, force_osmux)
+    msc.start()
+
+    # osmo-msc still doesn't support linking 2 internal leg calls through Osmux
+    # if both calls are using Osmux. Currently, RTP is always used between the 2
+    # endpoints of the MGW. See OS#4065.
+    mgw_msc.set_use_osmux(use_osmux, False)
+    mgw_msc.start()
+
+    # We don't want to force Osmux in BSC_MGW since in MGW BTS-side is still RTP.
+    mgw_bsc.set_use_osmux(use_osmux, False)
+    mgw_bsc.start()
+
+    bsc.set_use_osmux(use_osmux, force_osmux)
+    bsc.bts_add(bts)
+    bsc.start()
+
+    bts.start()
+    wait(bsc.bts_is_connected, bts)
+
+    hlr.subscriber_add(ms_mo)
+    hlr.subscriber_add(ms_mt)
+
+    ms_mo.connect(msc.mcc_mnc())
+    ms_mt.connect(msc.mcc_mnc())
+
+    ms_mo.log_info()
+    ms_mt.log_info()
+
+    print('waiting for modems to attach...')
+    wait(ms_mo.is_connected, msc.mcc_mnc())
+    wait(ms_mt.is_connected, msc.mcc_mnc())
+    wait(msc.subscriber_attached, ms_mo, ms_mt)
+
+    assert len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0
+    mo_cid = ms_mo.call_dial(ms_mt)
+    mt_cid = ms_mt.call_wait_incoming(ms_mo)
+    print('dial success')
+
+    assert not ms_mo.call_is_active(mo_cid) and not ms_mt.call_is_active(mt_cid)
+    ms_mt.call_answer(mt_cid)
+    wait(ms_mo.call_is_active, mo_cid)
+    wait(ms_mt.call_is_active, mt_cid)
+    print('answer success, call established and ongoing')
+
+    sleep(5) # maintain the call active for 5 seconds
+
+    assert ms_mo.call_is_active(mo_cid) and ms_mt.call_is_active(mt_cid)
+    ms_mt.call_hangup(mt_cid)
+    wait(lambda: len(ms_mo.call_id_list()) == 0 and len(ms_mt.call_id_list()) == 0)
+    print('hangup success')
