diff --git a/msc_tests/MSC_Tests.ttcn b/msc_tests/MSC_Tests.ttcn
index 72b13ad..8172e7a 100644
--- a/msc_tests/MSC_Tests.ttcn
+++ b/msc_tests/MSC_Tests.ttcn
@@ -1244,6 +1244,67 @@
 	vc_conn.done;
 }
 
+/* Test MO Call with reject to RAN-side CRCX */
+private function f_tc_mo_crcx_ran_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
+	g_pars := pars;
+	var CallParameters cpars := valueof(t_CallParams('12345'H, 0));
+	var MNCC_PDU mncc;
+	var MgcpCommand mgcp_cmd;
+
+	f_perform_lu(false, true, true, false);
+
+	f_establish_fully(valueof(ts_MI_IMSI_LV(g_pars.imsi)), false, false);
+	f_create_mncc_expect(hex2str(cpars.called_party));
+	f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});
+
+	BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_SETUP(cpars.transaction_id, cpars.called_party)));
+	MNCC.receive(tr_MNCC_SETUP_ind(?, tr_MNCC_number(hex2str(cpars.called_party)))) -> value mncc;
+	cpars.mncc_callref := mncc.u.signal.callref;
+	MNCC.send(ts_MNCC_CALL_PROC_req(cpars.mncc_callref, cpars.mncc_bearer_cap));
+	BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_CALL_PROC(cpars.transaction_id)));
+
+	MGCP.receive(tr_CRCX) -> value mgcp_cmd;
+	cpars.mgcp_call_id := f_MgcpCmd_extract_call_id(mgcp_cmd);
+	cpars.mgcp_ep := mgcp_cmd.line.ep;
+	/* Respond to CRCX with error */
+	var MgcpResponse mgcp_rsp := {
+		line := {
+			code := "542",
+			trans_id := mgcp_cmd.line.trans_id,
+			string := "FORCED_FAIL"
+		},
+		params := omit,
+		sdp := omit
+	}
+	MGCP.send(mgcp_rsp);
+
+	timer T := 30.0;
+	T.start;
+	alt {
+	[] T.timeout { setverdict(fail, "Timeout waiting for channel release"); self.stop; }
+	[] BSSAP.receive(tr_BSSMAP_ClearCommand) {
+		BSSAP.send(ts_BSSMAP_ClearComplete);
+		BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
+		setverdict(pass);
+		}
+	[] BSSAP.receive { repeat; }
+	[] MNCC.receive { repeat; }
+	[] GSUP.receive { repeat; }
+	[] MGCP.receive(tr_DLCX(?)) -> value mgcp_cmd {
+		MGCP.send(ts_DLCX_ACK2(mgcp_cmd.line.trans_id));
+		f_create_mgcp_delete_ep(cpars.mgcp_ep);
+		}
+	[] MGCP.receive { repeat; }
+	}
+}
+testcase TC_mo_crcx_ran_reject() runs on MTC_CT {
+	var BSC_ConnHdlr vc_conn;
+	f_init();
+
+	vc_conn := f_start_handler(refers(f_tc_mo_crcx_ran_reject), testcasename(), 28);
+	vc_conn.done;
+}
+
 
 
 
