diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 22df0cb..3aaab85 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -3880,7 +3880,6 @@
 	/* this is like the beginning of f_establish_fully(), but only up to ciphering reject */
 
 	var BSSMAP_FIELD_CodecType codecType;
-	timer T := 10.0;
 
 	codecType := exp_ass_req.pdu.bssmap.assignmentRequest.codecList.codecElements[0].codecType;
 	f_MscConnHdlr_init(g_pars.media_nr, host_bts, host_mgw_mgcp, codecType);
@@ -3888,24 +3887,6 @@
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
 
-	var template PDU_BSSAP exp_l3_compl;
-	exp_l3_compl := tr_BSSMAP_ComplL3()
-	if (g_pars.aoip == false) {
-		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := omit;
-	} else {
-		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := ?;
-	}
-	T.start;
-	alt {
-	[] BSSAP.receive(exp_l3_compl);
-	[] BSSAP.receive(tr_BSSMAP_ComplL3) {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received non-matching COMPLETE LAYER 3 INFORMATION");
-		}
-	[] T.timeout {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for COMPLETE LAYER 3 INFORMATION");
-		}
-	}
-
 	/* Start ciphering, expect Cipher Mode Reject */
 	f_cipher_mode(g_pars.encr, exp_fail := true);
 }
@@ -5055,7 +5036,6 @@
 
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
-	BSSAP.receive(tr_BSSMAP_ComplL3);
 
 	BSSAP.send(ts_BSSMAP_ClassmarkRequest);
 	RSL.receive(tr_RSL_DATA_REQ(g_chan_nr, ?, decmatch tr_RRM_CM_ENQUIRY));
@@ -5081,7 +5061,6 @@
 
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
-	BSSAP.receive(tr_BSSMAP_ComplL3);
 
 	/* Send CommonID */
 	BSSAP.send(ts_BSSMAP_CommonId(g_pars.imsi));
@@ -5105,7 +5084,6 @@
 	g_pars := f_gen_test_hdlr_pars();
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
-	BSSAP.receive(tr_BSSMAP_ComplL3);
 
 	/* send the single message we want to send */
 	f_rsl_send_l3(l3);
@@ -5176,7 +5154,6 @@
 	g_pars := f_gen_test_hdlr_pars();
 	f_create_chan_and_exp();
 	/* we should now have a COMPL_L3 at the MSC */
-	BSSAP.receive(tr_BSSMAP_ComplL3);
 
 	/* send short message */
 	RSL.send(ts_RSL_DATA_IND(g_chan_nr, valueof(ts_RslLinkID_DCCH(0)), ''O));
@@ -10534,6 +10511,7 @@
 private function f_TC_cm_serv_rej(charstring id) runs on MSC_ConnHdlr
 {
 	f_create_chan_and_exp();
+	/* we should now have a COMPL_L3 at the MSC */
 	BSSAP.send(ts_PDU_DTAP_MT(ts_CM_SERV_REJ('02'O), '00'O));
 	f_sleep(1.0);
 }
@@ -10575,24 +10553,6 @@
 	f_rslem_dchan_queue_enable();
 
 	/* we should now have a COMPL_L3 at the MSC */
-	var template PDU_BSSAP exp_l3_compl;
-	exp_l3_compl := tr_BSSMAP_ComplL3()
-	if (g_pars.aoip == false) {
-		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := omit;
-	} else {
-		exp_l3_compl.pdu.bssmap.completeLayer3Information.codecList := ?;
-	}
-	timer T := 10.0;
-	T.start;
-	alt {
-	[] BSSAP.receive(exp_l3_compl);
-	[] BSSAP.receive(tr_BSSMAP_ComplL3) {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Received non-matching COMPLETE LAYER 3 INFORMATION");
-		}
-	[] T.timeout {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for COMPLETE LAYER 3 INFORMATION");
-		}
-	}
 
 	f_create_mgcp_expect(ExpectCriteria:{omit,omit,omit});
 	activate(as_Media_mgw());
