diff --git a/library/GTP_Templates.ttcn b/library/GTP_Templates.ttcn
index 1bd56e1..9c8d1b6 100644
--- a/library/GTP_Templates.ttcn
+++ b/library/GTP_Templates.ttcn
@@ -17,7 +17,17 @@
 	import from GTPU_Types all;
 	import from GTP_CodecPort all;
 	import from IPCP_Types all;
-	import from Osmocom_Gb_Types all; // BssgpCellId
+	import from GSM_Types all; // RoutingAreaIdentification, CellIdentity
+
+	type record GTP_CellId {
+		RoutingAreaIdentification	ra_id,
+		CellIdentity			cell_id
+	} with { encode "RAW" };
+
+	template (value) GTP_CellId ts_GTP_CellId(template (value) RoutingAreaIdentification rai, CellIdentity cell_id) := {
+		ra_id := rai,
+		cell_id := cell_id
+	};
 
 	/* Table 38 of 3GPP TS 29.060 */
 	type enumerated GTP_Cause {
@@ -673,7 +683,7 @@
 		 },
 		 rIMProtocolVersionNumber := int2oct(ver, 1)
 	}
-	function tr_GTPC_Cell_Identifier_V(template BssgpCellId cid) return template Cell_Identifier_V_GTPC {
+	function tr_GTPC_Cell_Identifier_V(template GTP_CellId cid) return template Cell_Identifier_V_GTPC {
 		var template Cell_Identifier_V_GTPC ret := {
 			mccDigit1 := ?,
 			mccDigit2 := ?,
@@ -713,7 +723,7 @@
 		}
 		return ret;
 	}
-	template (value) Cell_Identifier_V_GTPC ts_GTPC_Cell_Identifier_V(BssgpCellId cid) := {
+	template (value) Cell_Identifier_V_GTPC ts_GTPC_Cell_Identifier_V(GTP_CellId cid) := {
 		mccDigit1 := cid.ra_id.lai.mcc_mnc[0],
 		mccDigit2 := cid.ra_id.lai.mcc_mnc[1],
 		mccDigit3 := cid.ra_id.lai.mcc_mnc[2],
@@ -724,10 +734,10 @@
 		rac := int2oct(cid.ra_id.rac, 1),
 		cI_value := int2oct(cid.cell_id, 2)
 	}
-	template RIM_Routing_Address_GTPC t_GTPC_RIM_Routing_Address_cid(BssgpCellId cid) := {
+	template RIM_Routing_Address_GTPC t_GTPC_RIM_Routing_Address_cid(GTP_CellId cid) := {
 		 cell_Identifier := ts_GTPC_Cell_Identifier_V(cid)
 	}
-	function tr_GTPC_ENB_Identifier(template BssgpCellId cid, template integer tac, template octetstring gnbid) return template ENB_Identifier {
+	function tr_GTPC_ENB_Identifier(template GTP_CellId cid, template integer tac, template octetstring gnbid) return template ENB_Identifier {
 		var template ENB_Identifier ret := {
 			mccDigit1 := ?,
 			mccDigit2 := ?,
@@ -764,7 +774,7 @@
 
 		return ret;
 	}
-	template (value) ENB_Identifier ts_GTPC_ENB_Identifier(BssgpCellId cid, integer tac, octetstring gnbid) := {
+	template (value) ENB_Identifier ts_GTPC_ENB_Identifier(GTP_CellId cid, integer tac, octetstring gnbid) := {
 		mccDigit1 := cid.ra_id.lai.mcc_mnc[0],
 		mccDigit2 := cid.ra_id.lai.mcc_mnc[1],
 		mccDigit3 := cid.ra_id.lai.mcc_mnc[2],
@@ -774,7 +784,7 @@
 		tAC := int2oct(tac, 2),
 		globalENB_ID := gnbid
 	}
-	template RIM_Routing_Address_GTPC t_GTPC_RIM_Routing_Address_enbid(BssgpCellId cid, integer tac, octetstring gnbid) := {
+	template RIM_Routing_Address_GTPC t_GTPC_RIM_Routing_Address_enbid(GTP_CellId cid, integer tac, octetstring gnbid) := {
 		 eNB_Identifier := ts_GTPC_ENB_Identifier(cid, tac, gnbid)
 	}
 	template RIM_Routing_Information_GTPC
@@ -801,7 +811,7 @@
 	}
 	/* 3GPP TS 48.018 11.3.63.1.1 */
 	template RAN_Information_Request_Application_Container_NACC_GTPC
-	tr_GTPC_RAN_Information_Request_Application_Container_NACC(template BssgpCellId cid) := {
+	tr_GTPC_RAN_Information_Request_Application_Container_NACC(template GTP_CellId cid) := {
 		iEI := '4D'O,
 		ext := '1'B,
 		lengthIndicator := {
@@ -810,7 +820,7 @@
 		reporting_Cell_Identifier := tr_GTPC_Cell_Identifier_V(cid)
 	}
 	template (value) RAN_Information_Request_Application_Container_NACC_GTPC
-	ts_GTPC_RAN_Information_Request_Application_Container_NACC(BssgpCellId cid) := {
+	ts_GTPC_RAN_Information_Request_Application_Container_NACC(GTP_CellId cid) := {
 		iEI := '4D'O,
 		ext := '1'B,
 		lengthIndicator := {
@@ -820,16 +830,16 @@
 	}
 	/* 3GPP TS 48.018 11.3.63.1 */
 	template RAN_Information_Request_Application_Container_GTPC
-	tru_GTPC_RAN_Information_Request_Application_Container_NACC(template BssgpCellId cid) := {
+	tru_GTPC_RAN_Information_Request_Application_Container_NACC(template GTP_CellId cid) := {
 		nacc := tr_GTPC_RAN_Information_Request_Application_Container_NACC(cid)
 	}
 	template (value) RAN_Information_Request_Application_Container_GTPC
-	tsu_GTPC_RAN_Information_Request_Application_Container_NACC(BssgpCellId cid) := {
+	tsu_GTPC_RAN_Information_Request_Application_Container_NACC(GTP_CellId cid) := {
 		nacc := ts_GTPC_RAN_Information_Request_Application_Container_NACC(cid)
 	}
 	/* 3GPP TS 48.018 11.3.63.2.1 */
 	template RAN_Information_Application_Container_NACC_GTPC
-	tr_GTPC_RAN_Information_Application_Container_NACC(template BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {
+	tr_GTPC_RAN_Information_Application_Container_NACC(template GTP_CellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {
 		 iEI := '4E'O,
 		 ext := '1'B,
 		 lengthIndicator := {
@@ -841,7 +851,7 @@
 		 sI_PSI := si_psi
 	}
 	template (value) RAN_Information_Application_Container_NACC_GTPC
-	ts_GTPC_RAN_Information_Application_Container_NACC(BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {
+	ts_GTPC_RAN_Information_Application_Container_NACC(GTP_CellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {
 		 iEI := '4E'O,
 		 ext := '1'B,
 		 lengthIndicator := {
@@ -892,11 +902,11 @@
 
 	/* RAN_Information */
 	template ApplContainer_or_ApplErrContainer_NACC_GTPC
-	tru_GTPC_ApplContainer_NACC(BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {
+	tru_GTPC_ApplContainer_NACC(GTP_CellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {
 		application_Container := tr_GTPC_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi)
 	}
 	template (value) ApplContainer_or_ApplErrContainer_NACC_GTPC
-	tsu_GTPC_ApplContainer_NACC(BssgpCellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {
+	tsu_GTPC_ApplContainer_NACC(GTP_CellId cid, boolean psi_type, integer si_psi_num, octetstring si_psi) := {
 		application_Container := ts_GTPC_RAN_Information_Application_Container_NACC(cid, psi_type, si_psi_num, si_psi)
 	}
 	template ApplContainer_or_ApplErrContainer_GTPC
