diff --git a/library/GTP_Templates.ttcn b/library/GTP_Templates.ttcn
index 8ab830e..06ba208 100644
--- a/library/GTP_Templates.ttcn
+++ b/library/GTP_Templates.ttcn
@@ -241,7 +241,7 @@
 		gtpc := ts_GTP1C_PDU(echoRequest, '00000000'O, valueof(ts_EchoReqPDU), seq)
 	}
 
-	private function f_eua_ipv4_len(template (present) OCT4 ip_addr) return template integer {
+	private function f_eua_ipv4_len(template OCT4 ip_addr) return template (present) integer {
 		if (istemplatekind(ip_addr, "omit")) {
 			return 2;
 		} else if (istemplatekind(ip_addr, "*")) {
@@ -252,7 +252,7 @@
 		return 6;
 	}
 
-	private function f_eua_ipv6_len(template (omit) OCT16 ip_addr) return template (present) integer {
+	private function f_eua_ipv6_len(template OCT16 ip_addr) return template (present) integer {
 		if (istemplatekind(ip_addr, "omit")) {
 			return 2;
 		} else if (istemplatekind(ip_addr, "*")) {
@@ -263,7 +263,7 @@
 		return 18;
 	}
 
-	private function f_eua_ipv4v6_len(template (omit) OCT4 ip_addr4, template (omit) OCT16 ip_addr6) return template (present) integer {
+	private function f_eua_ipv4v6_len(template OCT4 ip_addr4, template OCT16 ip_addr6) return template (present) integer {
 		var integer len := 2;
 		if (istemplatekind(ip_addr4, "*") or
 		    istemplatekind(ip_addr6, "*")) {
@@ -278,7 +278,7 @@
 		return len;
 	}
 
-	template EndUserAddress t_EuaIPv4(template OCT4 ip_addr) := {
+	template (present) EndUserAddress t_EuaIPv4(template OCT4 ip_addr) := {
 		type_gtpc := '80'O,
 		endUserAddress := {
 			endUserAddressIPv4 := {
@@ -290,7 +290,7 @@
 			}
 		}
 	}
-	template EndUserAddress t_EuaIPv4Dyn := t_EuaIPv4(omit);
+	template (present) EndUserAddress t_EuaIPv4Dyn := t_EuaIPv4(omit);
 	template (present) EndUserAddress tr_EuaIPv4(template (present) OCT4 ip_addr) modifies t_EuaIPv4 := {
 		endUserAddress := {
 			endUserAddressIPv4 := {
@@ -299,7 +299,7 @@
 		}
 	}
 
-	template EndUserAddress t_EuaIPv6(template OCT16 ip_addr) := {
+	template (present) EndUserAddress t_EuaIPv6(template OCT16 ip_addr) := {
 		type_gtpc := '80'O,
 		endUserAddress := {
 			endUserAddressIPv6 := {
@@ -311,7 +311,7 @@
 			}
 		}
 	}
-	template EndUserAddress t_EuaIPv6Dyn := t_EuaIPv6(omit);
+	template (present) EndUserAddress t_EuaIPv6Dyn := t_EuaIPv6(omit);
 	template (present) EndUserAddress tr_EuaIPv6(template (present) OCT16 ip_addr) modifies t_EuaIPv6 := {
 		endUserAddress := {
 			endUserAddressIPv6 := {
@@ -321,7 +321,7 @@
 	}
 
 	/* 3GPP TS 29.060 Figure 37A: End User Address Information Element for IPv4v6 (both static) */
-	template EndUserAddress t_EuaIPv4v6(template OCT4 ip_addr4, template OCT16 ip_addr6) := {
+	template (present) EndUserAddress t_EuaIPv4v6(template OCT4 ip_addr4, template OCT16 ip_addr6) := {
 		type_gtpc := '80'O,
 		endUserAddress := {
 			endUserAddressIPv4andIPv6 := {
@@ -334,7 +334,7 @@
 			}
 		}
 	}
-	template EndUserAddress t_EuaIPv4Dynv6Dyn := t_EuaIPv4v6(omit, omit);
+	template (present) EndUserAddress t_EuaIPv4Dynv6Dyn := t_EuaIPv4v6(omit, omit);
 	template (present) EndUserAddress tr_EuaIPv4v6(template (present) OCT4 ip_addr4,
 						       template (present) OCT16 ip_addr6) modifies t_EuaIPv4v6 := {
 		endUserAddress := {
