diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 7bbae34..11f0a5f 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -905,21 +905,89 @@
 
 		}
 	} else {
-		var template TransportLayerAddress rab_tla := ? /* FIXME: encode the mgw_rtp_ip/mgw_rtp_port */
-		var template RAB_SetupOrModifyList rab_sml := tr_RAB_SML(rab_id := ?, tla := rab_tla, binding_id := ?);
-
 		interleave {
 		[] MGCP.receive(tr_CRCX(cpars.mgcp_ep)) -> value mgcp_cmd {
-			var SDP_Message sdp := valueof(ts_SDP_CRCX_CN(cpars));
-			MGCP.send(ts_CRCX_ACK(mgcp_cmd.line.trans_id, cpars.mgw_conn_2.mgcp_connection_id, sdp));
-			/* MSC acknowledges the MNCC_CREATE to the MNCC handler */
-			MNCC.receive(tr_MNCC_RTP_CREATE(cpars.mncc_callref));
+			log("f_mt_call_complete 4.iu");
+			if (not f_handle_crcx(cpars, mgcp_cmd)) {
+				break;
 			}
-		[] BSSAP.receive(tr_RANAP_RabAssReq(rab_sml)) {
-			//BSSAP.send(ts_RANAP_RabAssResp(rab_sml)); FIXME
 			}
 
-		/* FIXME: same MNCC and MGCP as in 2G above */
+		/* MSC acknowledges the MNCC_CREATE to the MNCC handler */
+		[] MNCC.receive(tr_MNCC_RTP_CREATE(cpars.mncc_callref)) {
+			log("f_mt_call_complete 5.iu");
+			}
+
+		[] BSSAP.receive(tr_RANAP_RabAssReq(?)) {
+			log("f_mt_call_complete 6.iu");
+			var RAB_SetupOrModifiedList l := {
+				{
+					{
+						id := id_RAB_SetupOrModifiedItem,
+						criticality := ignore,
+						value_ := {
+						  rAB_SetupOrModifiedItem := {
+							rAB_ID := int2bit(23, 8),
+							transportLayerAddress := hex2bit( '350001c0a8021500000000000000000000000000'H),
+							iuTransportAssociation := {
+								bindingID := '040c0000'O
+							},
+							dl_dataVolumes := omit,
+							iE_Extensions := omit
+							}
+						}
+					}
+				}
+			};
+			BSSAP.send(ts_RANAP_RabAssResp(l));
+
+			BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_CONNECT(cpars.transaction_id)));
+			}
+
+		[] MNCC.receive(tr_MNCC_SETUP_cnf(cpars.mncc_callref)) {
+			log("f_mt_call_complete 7.iu");
+			MNCC.send(ts_MNCC_RTP_CONNECT(cpars.mncc_callref,
+						      /* ip 42.23.11.5 */ hex2int('42231105'H),
+						      /* port 423 */ 423,
+						      /* payload type 3 = GSM FR */ 3));
+			}
+
+		/* MDCX setting up the RAN side remote RTP address received from Assignment Complete */
+		[] MGCP.receive(tr_MDCX) -> value mgcp_cmd {
+			log("f_mt_call_complete 8.iu");
+			var SDP_Message sdp := valueof(ts_SDP(cpars.mgw_conn_2.mgw_rtp_ip, cpars.mgw_conn_2.mgw_rtp_ip,
+								hex2str(cpars.mgcp_call_id), "42",
+								cpars.mgw_conn_2.mgw_rtp_port,
+								{ int2str(cpars.rtp_payload_type) },
+								{ valueof(ts_SDP_rtpmap(cpars.rtp_payload_type,
+											cpars.rtp_sdp_format)),
+											valueof(ts_SDP_ptime(20)) }));
+			if (cpars.use_osmux) {
+				osmux_cid := f_MgcpCmd_extract_osmux_cid(mgcp_cmd);
+				if (osmux_cid != 0) { /* we expect MSC to use specific CID here */
+					setverdict(fail, "MSC using unexpected CID " & int2str(osmux_cid) & " != 0");
+					mtc.stop;
+				}
+				mgcp_resp := ts_MDCX_ACK_osmux(mgcp_cmd.line.trans_id, cpars.mgw_conn_1.mgcp_connection_id, osmux_cid, sdp);
+			} else {
+				mgcp_resp := ts_MDCX_ACK(mgcp_cmd.line.trans_id, cpars.mgw_conn_2.mgcp_connection_id, sdp);
+			}
+			MGCP.send(mgcp_resp);
+			}
+
+		/* MDCX setting up the CN side remote RTP address received from MNCC CONNECT */
+		[] MGCP.receive(tr_MDCX) -> value mgcp_cmd {
+			log("f_mt_call_complete 9.iu");
+			var SDP_Message sdp := valueof(ts_SDP(cpars.mgw_conn_2.mgw_rtp_ip, cpars.mgw_conn_2.mgw_rtp_ip,
+								hex2str(cpars.mgcp_call_id), "42",
+								cpars.mgw_conn_2.mgw_rtp_port,
+								{ int2str(cpars.rtp_payload_type) },
+								{ valueof(ts_SDP_rtpmap(cpars.rtp_payload_type,
+											cpars.rtp_sdp_format)),
+								  valueof(ts_SDP_ptime(20)) }));
+			MGCP.send(ts_MDCX_ACK(mgcp_cmd.line.trans_id, cpars.mgw_conn_2.mgcp_connection_id, sdp));
+			}
+
 		}
 	}
 
