diff --git a/hnodeb/HNB_Tests.ttcn b/hnodeb/HNB_Tests.ttcn
index 7a668dd..59dd1ee 100644
--- a/hnodeb/HNB_Tests.ttcn
+++ b/hnodeb/HNB_Tests.ttcn
@@ -38,10 +38,16 @@
 import from TELNETasp_PortType all;
 
 import from HNBAP_Templates all;
+import from RUA_IEs all;
+import from RUA_Templates all;
 
 import from HNBGW_ConnectionHandler all;
 import from Iuh_Emulation all;
 
+import from HNBLLIF_CodecPort all;
+import from HNBLLIF_Types all;
+import from HNBLLIF_Templates all;
+
 modulepar {
 	/* IP address at which the HNodeB can be reached */
 	charstring mp_hnodeb_ip := "127.0.0.1";
@@ -49,11 +55,23 @@
 	/* IP address at which the test binds */
 	charstring mp_hnbgw_iuh_ip := "127.0.0.1";
 	integer mp_hnbgw_iuh_port := 29169;
+
+	charstring mp_hnbllif_sk_path := HNBLL_SOCK_DEFAULT;
 }
 
+const hexstring ranap_cm_service_req := '001340400000060003400100000f40060000f11028b6003a40080000f110ffffffff0010400e0d052411035758a605f44e9d4aef004f400300001c0056400500f1100017'H;
+const hexstring ranap_auth_req := '00144032000002001040262505120217dc146aeac56cb5ff6d5fb51f47f19220108ca5a6d0c8110000b9e9272498872764003b400100'H;
+const hexstring ranap_auth_resp := '001440140000010010400d0c0554ccbdd0302104002f3ae4'H;
+const hexstring ranap_paging := '000e401e0000030003400100001740095000010100000000f10040400500b6cf4773'H;
+const hexstring iu_release_compl := '20010003000000'H;
+
 type component test_CT extends CTRL_Adapter_CT {
 	port TELNETasp_PT HNBVTY;
 
+	/* HNBLLIF Interface of HNodeB */
+	port HNBLLIF_CODEC_PT LLSK;
+	var integer g_llsk_conn_id;
+
 	/* global test case guard timer (actual timeout value is set in f_init()) */
 	timer T_guard := 30.0;
 }
@@ -83,6 +101,12 @@
 	f_vty_set_prompts(HNBVTY);
 	f_vty_transceive(HNBVTY, "enable");
 }
+
+private function f_init_hnbllif() runs on test_CT {
+	map(self:LLSK, system:LLSK);
+	f_start_hnbllif(LLSK, testcasename(), mp_hnbllif_sk_path, g_llsk_conn_id);
+}
+
 /* global initialization function */
 function f_init(float guard_timeout := 30.0) runs on test_CT {
 	var integer bssap_idx;
@@ -91,8 +115,6 @@
 	activate(as_Tguard());
 
 	f_init_vty("VirtHNBGW");
-
-	/* TODO: Wait for Iuh connection to be established */
 }
 
 friend function f_shutdown_helper() runs on test_CT {
@@ -101,9 +123,10 @@
 	mtc.stop;
 }
 
-friend function f_gen_test_hdlr_pars() return TestHdlrParams {
+private function f_gen_test_hdlr_pars() runs on test_CT return TestHdlrParams {
 
 	var TestHdlrParams pars := valueof(t_def_TestHdlrPars);
+	pars.hnbllif_sk_path := mp_hnbllif_sk_path;
 	pars.hnodeb_addr := mp_hnodeb_ip;
 	pars.hnbgw_addr := mp_hnbgw_iuh_ip;
 	pars.hnbgw_port := mp_hnbgw_iuh_port;
@@ -113,27 +136,10 @@
 type function void_fn(charstring id) runs on HNBGW_ConnHdlr;
 
 /* helper function to create and connect a HNBGW_ConnHdlr component */
-private function f_connect_handler(inout HNBGW_ConnHdlr vc_conn, integer bssap_idx := 0) runs on test_CT {
-	/*connect(vc_conn:RAN, g_bssap[bssap_idx].vc_RAN:PROC);
-	connect(vc_conn:MGCP_PROC, vc_MGCP:MGCP_PROC);
-	connect(vc_conn:RSL, bts[0].rsl.vc_RSL:CLIENT_PT);
-	connect(vc_conn:RSL_PROC, bts[0].rsl.vc_RSL:RSL_PROC);
-	if (isvalue(bts[1])) {
-		connect(vc_conn:RSL1, bts[1].rsl.vc_RSL:CLIENT_PT);
-		connect(vc_conn:RSL1_PROC, bts[1].rsl.vc_RSL:RSL_PROC);
+private function f_connect_handler(inout HNBGW_ConnHdlr vc_conn, TestHdlrParams pars) runs on test_CT {
+	if (pars.hnbllif_sk_path != "") {
+		map(vc_conn:LLSK, system:LLSK);
 	}
-	if (isvalue(bts[2])) {
-		connect(vc_conn:RSL2, bts[2].rsl.vc_RSL:CLIENT_PT);
-		connect(vc_conn:RSL2_PROC, bts[2].rsl.vc_RSL:RSL_PROC);
-	}
-	connect(vc_conn:BSSAP, g_bssap[bssap_idx].vc_RAN:CLIENT);
-	if (mp_enable_lcs_tests) {
-		connect(vc_conn:BSSAP_LE, g_bssap_le.vc_BSSAP_LE:CLIENT);
-		connect(vc_conn:BSSAP_LE_PROC, g_bssap_le.vc_BSSAP_LE:PROC);
-	}
-	connect(vc_conn:MGCP, vc_MGCP:MGCP_CLIENT);
-	connect(vc_conn:MGCP_MULTI, vc_MGCP:MGCP_CLIENT_MULTI);
-	connect(vc_conn:STATSD_PROC, vc_STATSD:STATSD_PROC);*/
 }
 
 function f_start_handler_create(TestHdlrParams pars)
@@ -141,7 +147,7 @@
 	var charstring id := testcasename();
 	var HNBGW_ConnHdlr vc_conn;
 	vc_conn := HNBGW_ConnHdlr.create(id);
-	f_connect_handler(vc_conn);
+	f_connect_handler(vc_conn, pars);
 	return vc_conn;
 }
 
@@ -168,27 +174,29 @@
 /* first function inside ConnHdlr component; sets g_pars + starts function */
 private function f_handler_init(void_fn fn, charstring id, TestHdlrParams pars)
 runs on HNBGW_ConnHdlr {
-	f_HNBGW_ConnHdlr_init(pars);
+	f_HNBGW_ConnHdlr_init(id, pars);
 	HNBAP.receive(IUHEM_Event:{up_down:=IUHEM_EVENT_UP}); /* Wait for HNB to connect to us */
 	fn.apply(id);
 }
 
-private function f_tc_hnb_register_request(charstring id) runs on HNBGW_ConnHdlr {
+private function f_tc_hnb_register_request_accept(charstring id) runs on HNBGW_ConnHdlr {
 	f_handle_hnbap_hnb_register_req();
+	LLSK.receive(f_llsk_rx(tr_HNBLLIF_IUH_CONFIGURE_IND(g_pars.mcc, g_pars.mnc, g_pars.cell_identity,
+						  g_pars.lac, g_pars.rac, g_pars.sac, g_pars.rnc_id)));
 	f_sleep(1.0);
 }
 testcase TC_hnb_register_request_accept() runs on test_CT {
 	var HNBGW_ConnHdlr vc_conn;
 
 	f_init();
-	vc_conn := f_start_handler(refers(f_tc_hnb_register_request));
+	vc_conn := f_start_handler(refers(f_tc_hnb_register_request_accept));
 	vc_conn.done;
 	f_shutdown_helper();
 }
 
 private function f_tc_hnb_register_reject(charstring id) runs on HNBGW_ConnHdlr {
 	HNBAP.receive(tr_HNBAP_HNBRegisterRequest(char2oct(g_pars.hNB_Identity_Info),
-						  g_pars.plmnid,
+						  f_enc_mcc_mnc(g_pars.mcc, g_pars.mnc),
 						  int2bit(g_pars.cell_identity, 28),
 						  int2oct(g_pars.lac, 2),
 						  int2oct(g_pars.rac, 1),
@@ -206,9 +214,74 @@
 	f_shutdown_helper();
 }
 
+private function f_tc_mo_conn(charstring id) runs on HNBGW_ConnHdlr {
+	const integer context_id := 30;
+	const bitstring context_id_bstr := '000000000000000000011110'B; /* encoded context_id */
+	const Establishment_Cause est_cause := normal_call;
+	f_handle_hnbap_hnb_register_req();
+
+	LLSK.receive(f_llsk_rx(tr_HNBLLIF_IUH_CONFIGURE_IND(g_pars.mcc, g_pars.mnc, g_pars.cell_identity,
+						  g_pars.lac, g_pars.rac, g_pars.sac, g_pars.rnc_id)));
+
+	/* Now an UE attempts CM Service Request: */
+	LLSK.send(f_llsk_tx(ts_HNBLLIF_IUH_CONN_ESTABLISH_REQ(context_id, 1, enum2int(est_cause), hex2oct(ranap_cm_service_req))));
+	/* The related RUA Connect + RANAP message is received on Iuh: */
+	RUA.receive(tr_RUA_Connect(ps_domain, context_id_bstr, est_cause, hex2oct(ranap_cm_service_req)));
+
+	/* Now HNBGW answers with RUA-DirectTransfer(RANAP-AuthenticationRequest) */
+	RUA.send(ts_RUA_DirectTransfer(ps_domain, context_id_bstr, hex2oct(ranap_auth_req)));
+
+	/* Now on LLSK first the Conn establishment is confirmed and then we receive data */
+	LLSK.receive(f_llsk_rx(tr_HNBLLIF_IUH_CONN_ESTABLISH_CNF(context_id, 1, 0)));
+	LLSK.receive(f_llsk_rx(tr_HNBLLIF_IUH_CONN_DATA_IND(context_id, 1, hex2oct(ranap_auth_req))));
+
+	/* UE answers with RANAPAuthenticationResponse: */
+	LLSK.send(f_llsk_tx(ts_HNBLLIF_IUH_CONN_DATA_REQ(context_id, 1, hex2oct(ranap_auth_resp))));
+	RUA.receive(tr_RUA_DirectTransfer(ps_domain, context_id_bstr, hex2oct(ranap_auth_resp)));
+
+	/* UE sends Iu Release Complete to release the conn */
+	LLSK.send(f_llsk_tx(ts_HNBLLIF_IUH_CONN_RELEASE_REQ(context_id, 1, 0, 0, hex2oct(iu_release_compl))));
+	RUA.receive(tr_RUA_Disconnect(ps_domain, context_id_bstr, ts_RUA_Cause(normal), hex2oct(iu_release_compl)));
+}
+testcase TC_mo_conn() runs on test_CT {
+	var HNBGW_ConnHdlr vc_conn;
+
+	f_init();
+	vc_conn := f_start_handler(refers(f_tc_mo_conn));
+	vc_conn.done;
+	f_shutdown_helper();
+}
+
+
+private function f_tc_paging(charstring id) runs on HNBGW_ConnHdlr {
+	const integer context_id := 30;
+	const bitstring context_id_bstr := '000000000000000000011110'B; /* encoded context_id */
+	f_handle_hnbap_hnb_register_req();
+
+	LLSK.receive(f_llsk_rx(tr_HNBLLIF_IUH_CONFIGURE_IND(g_pars.mcc, g_pars.mnc, g_pars.cell_identity,
+						  g_pars.lac, g_pars.rac, g_pars.sac, g_pars.rnc_id)));
+
+	/* HNBGW sends RUA-ConnectionlessTransfer(RANAP-Paging) */
+	RUA.send(ts_RUA_ConnectionlessTransfer(hex2oct(ranap_paging)));
+
+	LLSK.receive(f_llsk_rx(tr_HNBLLIF_IUH_UNITDATA_IND(hex2oct(ranap_paging))));
+
+	/* Here it would continue with UE-side answers with RUA-Connect(RANAP-PagingResponse) */
+}
+testcase TC_paging() runs on test_CT {
+	var HNBGW_ConnHdlr vc_conn;
+
+	f_init();
+	vc_conn := f_start_handler(refers(f_tc_paging));
+	vc_conn.done;
+	f_shutdown_helper();
+}
+
 control {
 	execute( TC_hnb_register_request_accept() );
 	execute( TC_hnb_register_request_reject() );
+	execute( TC_mo_conn() );
+	execute( TC_paging() );
 }
 
 }
