diff --git a/hnodeb/HNBGW_ConnectionHandler.ttcn b/hnodeb/HNBGW_ConnectionHandler.ttcn
index 3c4bc6f..b069a11 100644
--- a/hnodeb/HNBGW_ConnectionHandler.ttcn
+++ b/hnodeb/HNBGW_ConnectionHandler.ttcn
@@ -34,8 +34,13 @@
 import from HNBLLIF_Types all;
 import from HNBLLIF_Templates all;
 
+import from GTP_Emulation all;
+import from GTP_Templates all;
+import from GTP_CodecPort all;
+import from GTPU_Types all;
+
 /* this component represents a single Iuh connection at the HNBGW. */
-type component HNBGW_ConnHdlr extends StatsD_ConnHdlr {
+type component HNBGW_ConnHdlr extends StatsD_ConnHdlr, GTP_ConnHdlr {
 	port TELNETasp_PT HNBVTY;
 	port HNBAP_PT HNBAP;
 	port RUA_PT RUA;
@@ -46,6 +51,10 @@
 	var RTP_Emulation_CT vc_RTPEM;
 	port RTPEM_CTRL_PT RTPEM_CTRL;
 	port RTPEM_DATA_PT RTPEM_DATA;
+
+	var GTP_Emulation_CT vc_GTP;
+
+
 	var TestHdlrParams g_pars;
 
 	var boolean g_vty_initialized := false;
@@ -60,11 +69,8 @@
 	}
 }
 
-/* initialize all parameters */
-function f_HNBGW_ConnHdlr_init(charstring id, TestHdlrParams pars) runs on HNBGW_ConnHdlr {
+private function f_HNBGW_ConnHdlr_init_iuh(charstring id) runs on HNBGW_ConnHdlr {
 	var Iuh_Emulation_CT vc_Iuh;
-
-	g_pars := valueof(pars);
 	vc_Iuh := Iuh_Emulation_CT.create(id & "-HNBGW");
 	connect(self:HNBAP, vc_Iuh:HNBAP);
 	connect(self:RUA, vc_Iuh:RUA);
@@ -75,7 +81,30 @@
 	iuh_pars.local_ip := g_pars.hnbgw_addr;
 	iuh_pars.local_sctp_port  := g_pars.hnbgw_port;
 	vc_Iuh.start(Iuh_Emulation.main(iuh_pars, id & "-Iuh"));
+}
 
+private function f_HNBGW_ConnHdlr_init_gtp(charstring id) runs on HNBGW_ConnHdlr {
+	id := id & "-GTP";
+
+	var GtpEmulationCfg gtp_cfg := {
+		gtpc_bind_ip := g_pars.hnbgw_addr,
+		gtpc_bind_port := GTP1C_PORT,
+		gtpu_bind_ip :=  g_pars.hnbgw_addr,
+		gtpu_bind_port := GTP1U_PORT,
+		sgsn_role := false
+	};
+
+	vc_GTP := GTP_Emulation_CT.create(id);
+	connect(self:GTP, vc_GTP:CLIENT);
+	connect(self:GTP_PROC, vc_GTP:CLIENT_PROC);
+	vc_GTP.start(GTP_Emulation.main(gtp_cfg));
+}
+
+/* initialize all parameters */
+function f_HNBGW_ConnHdlr_init(charstring id, TestHdlrParams pars) runs on HNBGW_ConnHdlr {
+	g_pars := valueof(pars);
+	f_HNBGW_ConnHdlr_init_iuh(id);
+	f_HNBGW_ConnHdlr_init_gtp(id);
 	f_HNBGW_ConnHdlr_init_vty();
 
 	/* Connect to HNB on LLSK and do HELLO ping-pong  */
@@ -115,6 +144,13 @@
 		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for HNBLLIF HELLO.REQ SAPI=AUDIO");
 		}
 	}
+	pt.send(t_SD_HNBLLIF(hnbllif_conn_id, ts_HNBLLIF_CTL_HELLO_REQ(HNBLL_IF_SAPI_GTP, 0)));
+	alt {
+	[] as_hnbllif_hello_cnf(pt, hnbllif_conn_id, last_hello_cnf, HNBLL_IF_SAPI_GTP, 0);
+	[] T.timeout {
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Timeout waiting for HNBLLIF HELLO.REQ SAPI=GTP");
+		}
+	}
 }
 
 type record TestHdlrParams {
@@ -151,6 +187,17 @@
 	sac := 4
 }
 
+template (value) GtpPeer ts_GtpPeerU(charstring ip) := {
+	connId := 1,
+	remName := ip,
+	remPort := GTP1U_PORT
+}
+
+function f_gtpu_send(uint32_t tei, octetstring payload) runs on HNBGW_ConnHdlr {
+	var GtpPeer peer := valueof(ts_GtpPeerU(g_pars.hnodeb_addr));
+	GTP.send(ts_GTP1U_GPDU(peer, 0 /*seq*/, int2oct(tei, 4),  payload));
+}
+
 /* HNBLLIF socket may at any time receive a new INFO.ind */
 altstep as_hnbllif_hello_cnf(HNBLLIF_CODEC_PT pt, integer hnbllif_conn_id,
 				out HNBLLIF_Message last_hello_cnf,
