diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index b64b872..0d6083e 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -275,7 +275,7 @@
 	}
 }
 
-function f_init(integer num_bsc := 1, boolean sgsap := false, boolean gsup := true) runs on MTC_CT {
+function f_init(integer num_bsc := 1, boolean sgsap := false, boolean gsup := true, boolean osmux := false) runs on MTC_CT {
 
 	if (g_initialized == true) {
 		return;
@@ -288,7 +288,9 @@
 
 	for (var integer i := 0; i < num_bsc; i := i + 1) {
 		if (isbound(mp_bssap_cfg[i])) {
-			f_ran_adapter_init(g_bssap[i], mp_bssap_cfg[i], "MSC_Test_" & int2str(i), BSC_RanOps);
+			var RanOps ranops := BSC_RanOps;
+			ranops.use_osmux := osmux;
+			f_ran_adapter_init(g_bssap[i], mp_bssap_cfg[i], "MSC_Test_" & int2str(i), ranops);
 			f_ran_adapter_start(g_bssap[i]);
 		} else {
 			testcase.stop("missing BSSAP configuration");
@@ -334,7 +336,7 @@
 
 /* FIXME: move into BSC_ConnectionHandler? */
 function f_init_pars(integer imsi_suffix, boolean sgsap := false, boolean gsup := true, integer ran_idx := 0,
-		     boolean ran_is_geran := true)
+		     boolean ran_is_geran := true, boolean use_osmux := false)
 runs on MTC_CT return BSC_ConnHdlrPars {
 	var BSC_ConnHdlrNetworkPars net_pars := {
 		kc_support := '0A'O,	/* A5/1 and A5/3 enabled */
@@ -364,7 +366,8 @@
 		gsup_enable := gsup,
 		ran_idx := ran_idx,
 		use_umts_aka := false,
-		ran_is_geran := ran_is_geran
+		ran_is_geran := ran_is_geran,
+		use_osmux := use_osmux
 	};
 	if (not ran_is_geran) {
 		pars.use_umts_aka := true;
@@ -407,9 +410,9 @@
 	return vc_conn;
 }
 
-function f_start_handler(void_fn fn, integer imsi_suffix, integer ran_idx := 0, boolean ran_is_geran := true)
+function f_start_handler(void_fn fn, integer imsi_suffix, integer ran_idx := 0, boolean ran_is_geran := true, boolean use_osmux := false)
 runs on MTC_CT return BSC_ConnHdlr {
-	return f_start_handler_with_pars(fn, f_init_pars(imsi_suffix, ran_idx := ran_idx, ran_is_geran := ran_is_geran));
+	return f_start_handler_with_pars(fn, f_init_pars(imsi_suffix, ran_idx := ran_idx, ran_is_geran := ran_is_geran, use_osmux := use_osmux));
 }
 
 private function f_tc_lu_imsi_noauth_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
@@ -1711,6 +1714,7 @@
 	cpars.bss_rtp_port := 1110;
 	cpars.mgcp_connection_id_bss := '10004'H;
 	cpars.mgcp_connection_id_mss := '10005'H;
+	cpars.use_osmux := pars.use_osmux;
 
 	/* Note: This is an optional parameter. When the call-agent (MSC) does
 	 * supply a full endpoint name this setting will be overwritten. */
@@ -1727,6 +1731,15 @@
 	vc_conn.done;
 }
 
+testcase TC_lu_and_mt_call_osmux() runs on MTC_CT {
+	var BSC_ConnHdlr vc_conn;
+	f_init(1, false, true, true);
+	f_vty_config(MSCVTY, "msc", "osmux on");
+
+	vc_conn := f_start_handler(refers(f_tc_lu_and_mt_call), 39, 0, true, true);
+	vc_conn.done;
+}
+
 /* Test MO Call SETUP with DTMF */
 private function f_tc_mo_setup_dtmf_dup(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
 	f_init_handler(pars);
@@ -5303,6 +5316,8 @@
 	execute( TC_lu_imsi_auth_tmsi_encr_3_1_log_msc_debug() );
 	execute( TC_gsup_mt_multi_part_sms() );
 	execute( TC_mo_cc_bssmap_clear() );
+
+	execute( TC_lu_and_mt_call_osmux() );
 }
 
 
