diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 08a5510..dee41d2 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -38,6 +38,7 @@
 import from Osmocom_CTRL_Adapter all;
 
 import from MobileL3_CommonIE_Types all;
+import from MobileL3_Types all;
 import from L3_Templates all;
 import from GSM_RR_Types all;
 
@@ -1423,22 +1424,24 @@
 	vc_conn.done;
 }
 
-/* unsolicited ASSIGNMENT FAIL (without ASSIGN) from MS shouldn't bring BSC down */
-private function f_tc_unsol_ass_fail(charstring id) runs on MSC_ConnHdlr {
+private function f_est_single_l3(template PDU_ML3_MS_NW l3) runs on MSC_ConnHdlr {
 	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
 	f_create_chan_and_exp(pars);
 	/* we should now have a COMPL_L3 at the MSC */
 	BSSAP.receive(tr_BSSMAP_ComplL3);
 
-	f_rsl_send_l3(ts_RRM_AssignmentFailure('00'O));
-	timer T := 5.0;
+	/* send the single message we want to send */
+	f_rsl_send_l3(l3);
+}
+
+private function f_bssap_expect_nothing(float sec := 5.00) runs on MSC_ConnHdlr {
+	timer T := sec;
+	var PDU_BSSAP bssap;
 	T.start;
 	alt {
-	[] BSSAP.receive(tr_BSSMAP_AssignmentFail) {
-		setverdict(fail, "Unexpeted BSSMAP Assignment Failure");
-		}
-	[] BSSAP.receive(tr_BSSMAP_ClearRequest) {
-		setverdict(fail, "Unexpected BSSMAP Clear Requst");
+	[] BSSAP.receive(PDU_BSSAP:?) -> value bssap {
+		setverdict(fail, "Unexpected BSSMAP ", bssap);
+		self.stop;
 		}
 	[] T.timeout {
 		setverdict(pass);
@@ -1446,6 +1449,11 @@
 	}
 }
 
+/* unsolicited ASSIGNMENT FAIL (without ASSIGN) from MS shouldn't bring BSC down */
+private function f_tc_unsol_ass_fail(charstring id) runs on MSC_ConnHdlr {
+	f_est_single_l3(ts_RRM_AssignmentFailure('00'O));
+	f_bssap_expect_nothing();
+}
 testcase TC_unsol_ass_fail() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
 	f_init(1, true);
@@ -1457,25 +1465,8 @@
 
 /* unsolicited ASSIGNMENT COMPLETE (without ASSIGN) from MS shouldn't bring BSC down */
 private function f_tc_unsol_ass_compl(charstring id) runs on MSC_ConnHdlr {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
-	f_create_chan_and_exp(pars);
-	/* we should now have a COMPL_L3 at the MSC */
-	BSSAP.receive(tr_BSSMAP_ComplL3);
-
-	f_rsl_send_l3(ts_RRM_AssignmentComplete('00'O));
-	timer T := 5.0;
-	T.start;
-	alt {
-	[] BSSAP.receive(tr_BSSMAP_AssignmentComplete) {
-		setverdict(fail, "Unexpeted BSSMAP Assignment Complet");
-		}
-	[] BSSAP.receive {
-		setverdict(fail, "Unexpected BSSAP");
-		}
-	[] T.timeout {
-		setverdict(pass);
-		}
-	}
+	f_est_single_l3(ts_RRM_AssignmentComplete('00'O));
+	f_bssap_expect_nothing();
 }
 testcase TC_unsol_ass_compl() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
@@ -1488,24 +1479,9 @@
 
 /* unsolicited HANDOVER FAIL (without ASSIGN) from MS shouldn't bring BSC down */
 private function f_tc_unsol_ho_fail(charstring id) runs on MSC_ConnHdlr {
-	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
-	f_create_chan_and_exp(pars);
-	/* we should now have a COMPL_L3 at the MSC */
-	BSSAP.receive(tr_BSSMAP_ComplL3);
-
-	f_rsl_send_l3(ts_RRM_HandoverFailure('00'O));
-	timer T := 5.0;
-	T.start;
-	alt {
-	[] BSSAP.receive {
-		setverdict(fail, "Unexpected BSSMAP");
-		}
-	[] T.timeout {
-		setverdict(pass);
-		}
-	}
+	f_est_single_l3(ts_RRM_HandoverFailure('00'O));
+	f_bssap_expect_nothing();
 }
-
 testcase TC_unsol_ho_fail() runs on test_CT {
 	var MSC_ConnHdlr vc_conn;
 	f_init(1, true);
@@ -1515,6 +1491,26 @@
 }
 
 
+/* short message from MS should be ignored */
+private function f_tc_err_82_short_msg(charstring id) runs on MSC_ConnHdlr {
+	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	f_create_chan_and_exp(pars);
+	/* 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));
+	f_bssap_expect_nothing();
+}
+testcase TC_err_82_short_msg() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+	f_init(1, true);
+	f_sleep(1.0);
+	vc_conn := f_start_handler(refers(f_tc_err_82_short_msg), testcasename());
+	vc_conn.done;
+}
+
+
 
 control {
 	/* CTRL interface testing */
@@ -1582,6 +1578,7 @@
 	execute( TC_unsol_ass_fail() );
 	execute( TC_unsol_ass_compl() );
 	execute( TC_unsol_ho_fail() );
+	execute( TC_err_82_short_msg() );
 }
 
 }
