diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index c824415..2e43375 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1254,6 +1254,55 @@
 
 /* TODO: Test OML link drop causes counter increment */
 
+/***********************************************************************
+ * "New world" test cases using RSL_Emulation + BSSMAP_Emulation
+ ***********************************************************************/
+
+import from BSSMAP_Emulation all;
+import from RSL_Emulation all;
+import from MSC_ConnectionHandler all;
+
+type function void_fn(charstring id) runs on MSC_ConnHdlr;
+
+/* helper function to create, connect and start a MSC_ConnHdlr component */
+function f_start_handler(void_fn fn, charstring id) runs on test_CT return MSC_ConnHdlr {
+	var MSC_ConnHdlr vc_conn;
+
+	vc_conn := MSC_ConnHdlr.create(id);
+	connect(vc_conn:BSSMAPEM, vc_BSSMAP:PROC);
+	connect(vc_conn:RSL, bts[0].rsl.vc_RSL:CLIENT_PT);
+	connect(vc_conn:BSSAP, vc_BSSMAP:CLIENT);
+	vc_conn.start(derefers(fn)(id));
+	return vc_conn;
+}
+
+
+private function f_ass(charstring id) runs on MSC_ConnHdlr {
+	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+
+	var template PDU_BSSAP exp_compl := tr_BSSMAP_AssignmentComplete(omit, ?);
+	var BSSMAP_IE_AoIP_TransportLayerAddress tla := valueof(ts_BSSMAP_IE_AoIP_TLA4('01020304'O, 2342));
+	var PDU_BSSAP ass_cmd := valueof(ts_BSSMAP_AssignmentReq(omit, tla));
+	const OCT8 kc := '0001020304050607'O;
+
+	ass_cmd.pdu.bssmap.assignmentRequest.channelType := valueof(ts_BSSMAP_IE_ChannelType);
+	ass_cmd.pdu.bssmap.assignmentRequest.codecList := valueof(ts_BSSMAP_IE_CodecList({ts_CodecFR}));
+	ass_cmd.pdu.bssmap.assignmentRequest.encryptionInformation :=
+							valueof(ts_BSSMAP_IE_EncrInfo(kc, '02'O));
+
+	f_establish_fully(pars, ass_cmd, exp_compl);
+}
+
+testcase TC_hdlr() runs on test_CT {
+	var MSC_ConnHdlr vc_conn;
+
+	f_init(true);
+	f_sleep(1.0);
+
+	vc_conn := f_start_handler(refers(f_ass), "foo");
+	vc_conn.done;
+}
+
 control {
 	execute( TC_ctrl_msc_connection_status() );
 	execute( TC_ctrl() );
