diff --git a/ipa/IPA_Test.ttcn b/ipa/IPA_Test.ttcn
index 6c00dce..4e87fa6 100644
--- a/ipa/IPA_Test.ttcn
+++ b/ipa/IPA_Test.ttcn
@@ -1,42 +1,49 @@
 module IPA_Test {
 
-	import from IPL4asp_Types all;
+import from IPL4asp_Types all;
 
-	import from IPA_Emulation all;
+import from IPA_Emulation all;
 
-	import from SCCP_Types all;
-	import from SCCPasp_Types all;
-	import from SCCP_Emulation all;
+import from SCCP_Types all;
+import from SCCPasp_Types all;
+import from SCCP_Emulation all;
 
-	type component test_CT {
-		/* component references */
-		var IPA_Emulation_CT vc_IPA;
-		var SCCP_CT vc_SCCP;
-		/* test port to SCCP emulation */
-		port SCCPasp_PT SCCP;
+import from MobileL3_Types all;
+import from MobileL3_CommonIE_Types all;
+import from L3_Templates all;
 
-		var boolean g_initialized := false;
-		var octetstring g_sio;
-		var MSC_SCCP_MTP3_parameters g_sccp_pars;
-		var SCCP_PAR_Address g_sccp_addr_own, g_sccp_addr_peer;
+import from BSSAP_Types all;
+import from BSSMAP_Templates all;
 
-		var ConnectionId g_ipa_conn_id := -1;
-	}
+type component test_CT {
+	/* component references */
+	var IPA_Emulation_CT vc_IPA;
+	var SCCP_CT vc_SCCP;
+	/* test port to SCCP emulation */
+	port SCCPasp_PT SCCP;
 
-	modulepar {
-		PortNumber mp_local_port := 0;
-		charstring mp_local_ip := "127.0.0.1";
-		PortNumber mp_remote_port := 3002;
-		charstring mp_remote_ip := "127.0.0.1";
+	var boolean g_initialized := false;
+	var octetstring g_sio;
+	var MSC_SCCP_MTP3_parameters g_sccp_pars;
+	var SCCP_PAR_Address g_sccp_addr_own, g_sccp_addr_peer;
 
-		charstring mp_sccp_service_type := "mtp3_itu";
+	var ConnectionId g_ipa_conn_id := -1;
+}
 
-		integer mp_own_pc := 196;
-		integer mp_own_ssn := 254;
+modulepar {
+	PortNumber mp_local_port := 0;
+	charstring mp_local_ip := "127.0.0.1";
+	PortNumber mp_remote_port := 3002;
+	charstring mp_remote_ip := "127.0.0.1";
 
-		integer mp_peer_pc := 185;	/* 0.23.1 */
-		integer mp_peer_ssn := 254;
-	}
+	charstring mp_sccp_service_type := "mtp3_itu";
+
+	integer mp_own_pc := 196;
+	integer mp_own_ssn := 254;
+
+	integer mp_peer_pc := 185;	/* 0.23.1 */
+	integer mp_peer_ssn := 254;
+}
 
 /* construct a SCCP_PAR_Address with just PC + SSN and no GT */
 template (value) SCCP_PAR_Address ts_SccpAddr_PC_SSN(integer pc, integer ssn) := {
@@ -53,6 +60,21 @@
 }
 
 
+function f_gen_cl3() return PDU_BSSAP {
+	var MobileIdentityLV mi := valueof(ts_MI_IMSI_LV('901770123456789'H));
+	var PDU_ML3_MS_NW l3 := valueof(ts_CM_SERV_REQ('0001'B, mi));
+	var BSSMAP_IE_CellIdentifier cell_id := valueof(ts_CellID_LAC_CI(23, 42));
+	var PDU_BSSAP bssap := valueof(ts_BSSMAP_ComplL3(cell_id, enc_PDU_ML3_MS_NW(l3)));
+	return bssap;
+}
+
+function f_send_bssap_cc(PDU_BSSAP bssap) runs on test_CT {
+	var ASP_SCCP_N_CONNECT_req prim;
+	prim := valueof(t_ASP_N_CONNECT_req(g_sccp_addr_peer, g_sccp_addr_own, omit, omit,
+				    enc_PDU_BSSAP(bssap), 23, omit));
+	SCCP.send(prim);
+}
+
 function init_pars() runs on test_CT {
 	g_sio := '83'O;
 	g_sccp_pars := {
@@ -71,43 +93,47 @@
 	g_sccp_addr_peer := valueof(ts_SccpAddr_PC_SSN(mp_peer_pc, mp_peer_ssn));
 }
 
-	private function f_init() runs on test_CT {
-		var Result res;
+private function f_init() runs on test_CT {
+	var Result res;
 
-		if (g_initialized == true) {
-			return;
-		}
-		g_initialized := true;
-
-		init_pars();
-
-		/* create components */
-		vc_IPA := IPA_Emulation_CT.create;
-		vc_SCCP := SCCP_CT.create;
-
-		map(vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
-
-		/* connect MTP3 service provider (IPA) to lower side of SCCP */
-		connect(vc_IPA:MTP3_SP_PORT, vc_SCCP:MTP3_SCCP_PORT);
-
-		/* connect us to upper side of SCCP */
-		connect(self:SCCP, vc_SCCP:SCCP_SP_PORT);
-
-		vc_IPA.start(IPA_Emulation.ScanEvents());
-		vc_SCCP.start(SCCPStart(g_sccp_pars));
-
-		//IPA_Emulation.f_connect(mp_remote_ip, mp_remote_port, mp_local_ip, mp_local_port);
+	if (g_initialized == true) {
+		return;
 	}
+	g_initialized := true;
 
-	testcase TC_recv_dump() runs on test_CT {
-		f_init();
+	init_pars();
 
-		while (true) {
-			SCCP.receive;
-		}
+	/* create components */
+	vc_IPA := IPA_Emulation_CT.create;
+	vc_SCCP := SCCP_CT.create;
+
+	map(vc_IPA:IPA_PORT, system:IPA_CODEC_PT);
+
+	/* connect MTP3 service provider (IPA) to lower side of SCCP */
+	connect(vc_IPA:MTP3_SP_PORT, vc_SCCP:MTP3_SCCP_PORT);
+
+	/* connect us to upper side of SCCP */
+	connect(self:SCCP, vc_SCCP:SCCP_SP_PORT);
+
+	vc_IPA.start(IPA_Emulation.ScanEvents());
+	vc_SCCP.start(SCCPStart(g_sccp_pars));
+
+	//IPA_Emulation.f_connect(mp_remote_ip, mp_remote_port, mp_local_ip, mp_local_port);
+}
+
+testcase TC_recv_dump() runs on test_CT {
+	f_init();
+
+	var PDU_BSSAP bssap := f_gen_cl3();
+	f_send_bssap_cc(bssap);
+
+	while (true) {
+		SCCP.receive;
 	}
+}
 
-	control {
-		execute( TC_recv_dump() );
-	}
+control {
+	execute( TC_recv_dump() );
+}
+
 }
