diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn
index cbc22a6..5665981 100644
--- a/mgw/MGCP_Test.ttcn
+++ b/mgw/MGCP_Test.ttcn
@@ -333,6 +333,12 @@
 		charstring hostname,
 		integer portnr optional
 	}
+	type record RtpOsmuxFlowData {
+		boolean local_cid_sent, /* whther non wildcarded CID was already sent to MGW */
+		MgcpOsmuxCID local_cid optional,
+		MgcpOsmuxCID remote_cid optional,
+		OsmuxemConfig cfg optional
+	}
 	type record RtpFlowData {
 		HostPort em,	/* emulation side */
 		HostPort mgw,	/* mgw side */
@@ -340,10 +346,7 @@
 		charstring codec,
 		MgcpConnectionId mgcp_conn_id optional,
 		RtpemConfig rtp_cfg optional,
-		boolean osmux_cid_sent, /* whther non wildcarded CID was already sent to MGW */
-		MgcpOsmuxCID osmux_cid optional,
-		MgcpOsmuxCID osmux_cid_response optional,
-		OsmuxemConfig osmux_cfg optional,
+		RtpOsmuxFlowData osmux,
 		charstring fmtp optional
 	}
 
@@ -426,12 +429,12 @@
 		f_osmuxem_bind(pt, flow.em.hostname, flow.em.portnr);
 
 		/* configure osmux-emulation */
-		if (ispresent(flow.osmux_cfg)) {
-			f_osmuxem_configure(pt, flow.osmux_cfg);
+		if (ispresent(flow.osmux.cfg)) {
+			f_osmuxem_configure(pt, flow.osmux.cfg);
 		} else {
 			var OsmuxemConfig osmux_cfg := c_OsmuxemDefaultCfg;
 			f_osmuxem_configure(pt, osmux_cfg);
-			flow.osmux_cfg := osmux_cfg
+			flow.osmux.cfg := osmux_cfg
 		}
 
 		if (one_phase) {
@@ -439,14 +442,14 @@
 			 * part that tells the MGW where we are listening for Osmux streams
 			 * that come from the MGW. We get a fully working connection in
 			 * one go. */
-			if (flow.osmux_cid != -1) {
+			if (flow.osmux.local_cid != -1) {
 				/* We may still want to negotiate osmux CID later at MDCX */
 				rx_hdl := c_OsmuxemDefaultRxHandle;
-				rx_hdl.cid := flow.osmux_cid;
+				rx_hdl.cid := flow.osmux.local_cid;
 				f_osmuxem_register_rxhandle(pt, rx_hdl);
-				flow.osmux_cid_sent := true;
+				flow.osmux.local_cid_sent := true;
 			}
-			cmd := ts_CRCX_osmux(get_next_trans_id(), ep, mode, call_id, flow.osmux_cid);
+			cmd := ts_CRCX_osmux(get_next_trans_id(), ep, mode, call_id, flow.osmux.local_cid);
 			cmd.sdp := ts_SDP(flow.em.hostname, flow.em.hostname, "23", "42",
 					  flow.em.portnr, { int2str(flow.pt) }, attributes);
   			resp := mgcp_transceive_mgw(cmd, tr_CRCX_ACK_osmux);
@@ -461,7 +464,7 @@
 			 * data back to us. In order to turn the connection in a fully
 			 * bi-directional one, a separate MDCX is needed. */
 
-			cmd := ts_CRCX_osmux(get_next_trans_id(), ep, mode, call_id, flow.osmux_cid);
+			cmd := ts_CRCX_osmux(get_next_trans_id(), ep, mode, call_id, flow.osmux.local_cid);
 			resp := mgcp_transceive_mgw(cmd, tr_CRCX_ACK_osmux);
 
 			flow.mgcp_conn_id := extract_conn_id(resp);
@@ -481,12 +484,12 @@
 		}
 
 		/* Make sure response is no wildcard */
-		flow.osmux_cid_response := f_mgcp_osmux_cid_decode(cid_response);
-		if (flow.osmux_cid_response == -1) {
+		flow.osmux.remote_cid := f_mgcp_osmux_cid_decode(cid_response);
+		if (flow.osmux.remote_cid == -1) {
 			setverdict(fail, "Osmux CID in MGCP response contains unexpected wildcard");
 			mtc.stop;
 		}
-		tx_hdl := valueof(t_TxHandleAMR590(flow.osmux_cid_response));
+		tx_hdl := valueof(t_TxHandleAMR590(flow.osmux.remote_cid));
 		f_osmuxem_register_txhandle(pt, tx_hdl);
 
 		/* finally, connect the emulation-side RTP socket to the MGW */
@@ -551,23 +554,23 @@
 		f_osmuxem_bind(pt, flow.em.hostname, flow.em.portnr);
 
 		/* configure osmux-emulation */
-		if (ispresent(flow.osmux_cfg)) {
-			f_osmuxem_configure(pt, flow.osmux_cfg);
+		if (ispresent(flow.osmux.cfg)) {
+			f_osmuxem_configure(pt, flow.osmux.cfg);
 		} else {
 			var OsmuxemConfig osmux_cfg := c_OsmuxemDefaultCfg;
 			f_osmuxem_configure(pt, osmux_cfg);
 		}
 
 		/* We didn't send a non-wildcarded Osmux CID yet. If caller wants to submit it, register handler */
-		if (flow.osmux_cid_sent == false and flow.osmux_cid != -1) {
+		if (flow.osmux.local_cid_sent == false and flow.osmux.local_cid != -1) {
 			rx_hdl := c_OsmuxemDefaultRxHandle;
-			rx_hdl.cid := flow.osmux_cid;
+			rx_hdl.cid := flow.osmux.local_cid;
 			f_osmuxem_register_rxhandle(pt, rx_hdl);
-			flow.osmux_cid_sent := true;
+			flow.osmux.local_cid_sent := true;
 		}
 
 		/* connect MGW side Osmux socket to the emulation-side Osmux socket using SDP */
-		cmd := ts_MDCX_osmux(get_next_trans_id(), ep, mode, call_id, flow.mgcp_conn_id, flow.osmux_cid);
+		cmd := ts_MDCX_osmux(get_next_trans_id(), ep, mode, call_id, flow.mgcp_conn_id, flow.osmux.local_cid);
 		cmd.sdp := ts_SDP(flow.em.hostname, flow.em.hostname, "23", "42",
 				  flow.em.portnr, { int2str(flow.pt) }, attributes);
 		resp := mgcp_transceive_mgw(cmd, tr_MDCX_ACK);
@@ -593,7 +596,7 @@
 			setverdict(fail, "Osmux CID in MGCP response contains unexpected wildcard");
 			mtc.stop;
 		}
-		if (cid_resp_parsed != flow.osmux_cid_response) {
+		if (cid_resp_parsed != flow.osmux.remote_cid) {
 			setverdict(fail, "Osmux CID in MGCP MDCX response changed from prev value");
 			mtc.stop;
 		}
@@ -1183,7 +1186,7 @@
 		f_init(ep, true);
 		flow := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 112, "AMR/8000/1"));
 		flow.em.portnr := mp_local_osmux_port;
-		flow.osmux_cid := -1;
+		flow.osmux.local_cid := -1;
 		f_flow_create_osmux(OsmuxEM, ep, call_id, "recvonly", flow, false);
 
 		/* create a transmitter not yet known by MGW */
@@ -1196,10 +1199,10 @@
 
 		stats := f_osmuxem_stats_get(OsmuxEM);
 
-		if (stats.num_pkts_tx < 40 / flow.osmux_cfg.batch_size) {
+		if (stats.num_pkts_tx < 40 / flow.osmux.cfg.batch_size) {
 			setverdict(fail);
 		}
-		if (stats.bytes_payload_tx < stats.num_pkts_tx * f_amrft_payload_len(tx_hdl.amr_ft) * flow.osmux_cfg.batch_size) {
+		if (stats.bytes_payload_tx < stats.num_pkts_tx * f_amrft_payload_len(tx_hdl.amr_ft) * flow.osmux.cfg.batch_size) {
 			setverdict(fail);
 		}
 
@@ -1220,7 +1223,7 @@
 		f_init(ep, true);
 		flow := valueof(t_RtpFlow(mp_local_ipv4, mp_remote_ipv4, 111, "GSM-HR-08/8000/1"));
 		flow.em.portnr := mp_local_osmux_port;
-		flow.osmux_cid := 2;
+		flow.osmux.local_cid := 2;
 		f_flow_create_osmux(OsmuxEM, ep, call_id, "loopback", flow);
 
 		f_osmuxem_mode(OsmuxEM, OSMUXEM_MODE_BIDIR);
@@ -1314,8 +1317,8 @@
 		/* from MGW back to us */
 		flow[1] := valueof(t_RtpFlow(local_ip_osmux, remote_ip_osmux, 110, "AMR/8000"));
 		flow[1].em.portnr := mp_local_osmux_port;
-		flow[1].osmux_cid := 2;
-		flow[1].osmux_cfg := c_OsmuxemDefaultCfg;
+		flow[1].osmux.local_cid := 2;
+		flow[1].osmux.cfg := c_OsmuxemDefaultCfg;
 		f_flow_create_osmux(OsmuxEM, ep, call_id, "sendrecv", flow[1]);
 
 		if (bidir) {
@@ -1344,7 +1347,7 @@
 
 		stats_rtp := f_rtpem_stats_get(RTPEM[0]);
 		stats_osmux := f_osmuxem_stats_get(OsmuxEM);
-		if (not f_rtp_osmux_stats_compare(stats_rtp, stats_osmux, flow[1].osmux_cfg.batch_size,  tolerance)) {
+		if (not f_rtp_osmux_stats_compare(stats_rtp, stats_osmux, flow[1].osmux.cfg.batch_size,  tolerance)) {
 			setverdict(fail, "RTP and Osmux endpoint statistics don't match");
 			mtc.stop;
 		}
@@ -1416,11 +1419,11 @@
 		flow[1] := valueof(t_RtpFlow(local_ip_osmux, remote_ip_osmux, 110, "AMR/8000"));
 		flow[1].em.portnr := mp_local_osmux_port;
 		if (crcx_osmux_wildcard) {
-			flow[1].osmux_cid := -1;
+			flow[1].osmux.local_cid := -1;
 		} else {
-			flow[1].osmux_cid := 2;
+			flow[1].osmux.local_cid := 2;
 		}
-		flow[1].osmux_cfg := c_OsmuxemDefaultCfg;
+		flow[1].osmux.cfg := c_OsmuxemDefaultCfg;
 		f_flow_create_osmux(OsmuxEM, ep, call_id, "recvonly", flow[1], true);
 
 
@@ -1480,7 +1483,7 @@
 		if (crcx_osmux_wildcard) {
 			/* For now we must set same CID as the MGW recvCID,
 			 * having sendCID!=recvCID is not yet supported. */
-			flow[1].osmux_cid := flow[1].osmux_cid_response;
+			flow[1].osmux.local_cid := flow[1].osmux.remote_cid;
 		}
 		f_flow_modify_osmux(OsmuxEM, ep, call_id, "sendrecv", flow[1]);
 		f_sleep(2.0);
@@ -1488,8 +1491,8 @@
 		stats_rtp := f_rtpem_stats_get(RTPEM[0]);
 		stats_osmux := f_osmuxem_stats_get(OsmuxEM);
 
-		temp := stats_rtp.num_pkts_tx - num_pkts_tx[0] - stats_osmux.num_pkts_rx * flow[1].osmux_cfg.batch_size;
-		if (temp > 3 * flow[1].osmux_cfg.batch_size or temp < -3 * flow[1].osmux_cfg.batch_size) {
+		temp := stats_rtp.num_pkts_tx - num_pkts_tx[0] - stats_osmux.num_pkts_rx * flow[1].osmux.cfg.batch_size;
+		if (temp > 3 * flow[1].osmux.cfg.batch_size or temp < -3 * flow[1].osmux.cfg.batch_size) {
 			log("stats_rtp: ", stats_rtp);
 			log("stats_osmux: ", stats_osmux);
 			log("old_rtp_tx: ", num_pkts_tx[0]);
@@ -1497,7 +1500,7 @@
 			mtc.stop;
 		}
 
-		temp := stats_osmux.num_pkts_tx - num_pkts_tx[1] - stats_rtp.num_pkts_rx / flow[1].osmux_cfg.batch_size;
+		temp := stats_osmux.num_pkts_tx - num_pkts_tx[1] - stats_rtp.num_pkts_rx / flow[1].osmux.cfg.batch_size;
 		if (temp > 3 or temp < -3) {
 			setverdict(fail, "number of packets not within normal parameters (" & int2str(temp) & ")");
 			mtc.stop;
@@ -1684,7 +1687,12 @@
 		},
 		pt := pt,
 		codec := codec,
-		osmux_cid_sent := false
+		osmux:= {
+			local_cid_sent := false,
+			local_cid := omit,
+			remote_cid := omit,
+			cfg := omit
+		}
 	}
 
 	/* transmit RTP streams between two RTP Emulations back-to-back; expect no loss */
