diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 14ba97d..c8016d7 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -538,6 +538,108 @@
 	setverdict(pass);
 }
 
+/* Test behavior if RSL EST IND for non-active channel */
+testcase TC_rll_est_ind_inact_lchan() runs on test_CT {
+	timer T := 2.0;
+
+	f_init();
+	f_bssap_reset();
+
+	var octetstring l3 := '00010203040506'O;
+	var RslChannelNr chan_nr := valueof(t_RslChanNr_Bm(6));
+	f_ipa_tx(0, ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(0)), l3));
+
+	T.start;
+	alt {
+	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) {
+		setverdict(fail, "MSC received COMPL L3 for non-active lchan");
+		}
+	[] BSSAP.receive {}
+	[] IPA_RSL[0].receive {}
+	[] T.timeout {}
+	}
+
+	setverdict(pass);
+}
+
+/* Test behavior if RSL EST IND for invalid SAPI */
+testcase TC_rll_est_ind_inval_sapi1() runs on test_CT {
+	var RslChannelNr chan_nr;
+
+	f_init();
+	f_bssap_reset();
+
+	chan_nr := f_chreq_act_ack()
+
+	var octetstring l3 := '00010203040506'O;
+	f_ipa_tx(0, ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(1)), l3));
+
+	timer T := 2.0;
+	T.start;
+	alt {
+	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) {
+		setverdict(fail, "MSC received COMPL L3 for invalid SAPI 1");
+		}
+	[] BSSAP.receive { repeat; }
+	[] IPA_RSL[0].receive { repeat; }
+	[] T.timeout {}
+	}
+
+	setverdict(pass);
+}
+
+/* Test behavior if RSL EST IND for invalid SAPI */
+testcase TC_rll_est_ind_inval_sapi3() runs on test_CT {
+	timer T := 2.0;
+
+	f_init();
+	f_bssap_reset();
+
+	var RslChannelNr chan_nr := f_chreq_act_ack();
+
+	var octetstring l3 := '00010203040506'O;
+	f_ipa_tx(0, ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_DCCH(3)), l3));
+
+	T.start;
+	alt {
+	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) {
+		setverdict(fail, "MSC received COMPL L3 for invalid SAPI 3");
+		}
+	[] BSSAP.receive { repeat; }
+	[] IPA_RSL[0].receive { repeat; }
+	[] T.timeout {}
+	}
+
+	setverdict(pass);
+}
+
+/* Test behavior if RSL EST IND for invalid SACCH */
+testcase TC_rll_est_ind_inval_sacch() runs on test_CT {
+	timer T := 2.0;
+
+	f_init();
+	f_bssap_reset();
+
+	var RslChannelNr chan_nr := f_chreq_act_ack();
+
+	var octetstring l3 := '00010203040506'O;
+	f_ipa_tx(0, ts_RSL_EST_IND(chan_nr, valueof(ts_RslLinkID_SACCH(0)), l3));
+
+	T.start;
+	alt {
+	[] BSSAP.receive(tr_BSSAP_CONNECT_ind(?, ?, tr_BSSMAP_ComplL3(l3))) {
+		setverdict(fail, "MSC received COMPL L3 for invalid Link SACCH");
+		}
+	[] BSSAP.receive { repeat; }
+	[] IPA_RSL[0].receive { repeat; }
+	[] T.timeout {}
+	}
+
+	setverdict(pass);
+}
+
+
+
 
 testcase TC_ctrl_msc_connection_status() runs on test_CT {
 	var charstring ctrl_resp;
@@ -851,6 +953,11 @@
 	execute( TC_chan_rel_hard_rlsd() );
 	execute( TC_chan_rel_a_reset() );
 
+	execute( TC_rll_est_ind_inact_lchan() );
+	execute( TC_rll_est_ind_inval_sapi1() );
+	execute( TC_rll_est_ind_inval_sapi3() );
+	execute( TC_rll_est_ind_inval_sacch() );
+
 	execute( TC_paging_imsi_nochan() );
 	execute( TC_paging_tmsi_nochan() );
 	execute( TC_paging_tmsi_any() );
