diff --git a/ggsn_tests/GTP_CodecPort.ttcn b/ggsn_tests/GTP_CodecPort.ttcn
index 44c71e2..561e5b9 100644
--- a/ggsn_tests/GTP_CodecPort.ttcn
+++ b/ggsn_tests/GTP_CodecPort.ttcn
@@ -1,4 +1,4 @@
-/* Translation Port sitting on top of IPL4_asp UDP to encode/decode GTP */
+/* dual-faced port sitting on top of IPL4_asp UDP to encode/decode GTP */
 /* (C) 2017 by Harald Welte <laforge@gnumonks.org */
 module GTP_CodecPort {
 	import from IPL4asp_PortType all;
@@ -26,59 +26,54 @@
 	}
 
  	/* Translation port on top of IPL4asp; ASP_Event passed through transparently */
-	type port GTPC_PT message map to IPL4asp_PT {
-		out	Gtp1cUnitdata to ASP_SendTo with f_enc_Gtp1cUD();
-		in	Gtp1cUnitdata from ASP_RecvFrom with f_dec_Gtp1cUD(),
+	type port GTPC_PT message {
+		out	Gtp1cUnitdata;
+		in	Gtp1cUnitdata,
 			ASP_Event;
-		/* we can declare variables here and use them from all functions with "port" label */
-	}
+	} with { extension "user IPL4asp_PT
+		out(Gtp1cUnitdata -> ASP_SendTo: function(f_enc_Gtp1cUD))
+		in(ASP_RecvFrom -> Gtp1cUnitdata: function(f_dec_Gtp1cUD);
+		   ASP_Event -> ASP_Event: simple)" }
 
-	function f_enc_Gtp1cUD(in Gtp1cUnitdata in_ud, out ASP_SendTo out_ud) port GTPC_PT {
+	private function f_enc_Gtp1cUD(in Gtp1cUnitdata in_ud, out ASP_SendTo out_ud) {
 		out_ud.connId := in_ud.peer.connId;
 		out_ud.remName := in_ud.peer.remName;
 		out_ud.remPort := in_ud.peer.remPort;
 		out_ud.proto := { udp := {} };
 		out_ud.msg := enc_PDU_GTPC(in_ud.gtpc);
-		port.setstate(0);
 	} with { extension "prototype(fast)" };
 
-	function f_dec_Gtp1cUD(in ASP_RecvFrom in_ud, out Gtp1cUnitdata out_ud) port GTPC_PT {
+	private function f_dec_Gtp1cUD(in ASP_RecvFrom in_ud, out Gtp1cUnitdata out_ud) {
 		out_ud.peer.connId := in_ud.connId;
 		out_ud.peer.remName := in_ud.remName;
 		out_ud.peer.remPort := in_ud.remPort;
 		out_ud.gtpc := dec_PDU_GTPC(in_ud.msg);
-		port.setstate(0);
 	} with { extension "prototype(fast)" };
 
 
-	/* Translation port on top of IPL4asp; ASP_Event passed through transparently */
-	type port GTPU_PT message map to IPL4asp_PT {
-		out	Gtp1uUnitdata to ASP_SendTo with f_enc_Gtp1uUD();
-		in	Gtp1uUnitdata from ASP_RecvFrom with f_dec_Gtp1uUD(),
+	/* dual-faced port on top of IPL4asp; ASP_Event passed through transparently */
+	type port GTPU_PT message {
+		out	Gtp1uUnitdata;
+		in	Gtp1uUnitdata,
 			ASP_Event;
-		/* we can declare variables here and use them from all functions with "port" label */
-	}
+	} with { extension "user IPL4asp_PT
+		out(Gtp1uUnitdata -> ASP_SendTo: function(f_enc_Gtp1uUD))
+		in(ASP_RecvFrom -> Gtp1uUnitdata: function(f_dec_Gtp1uUD);
+		   ASP_Event -> ASP_Event: simple)" }
 
-	function f_enc_Gtp1uUD(in Gtp1uUnitdata in_ud, out ASP_SendTo out_ud) port GTPU_PT {
+	function f_enc_Gtp1uUD(in Gtp1uUnitdata in_ud, out ASP_SendTo out_ud) {
 		out_ud.connId := in_ud.peer.connId;
 		out_ud.remName := in_ud.peer.remName;
 		out_ud.remPort := in_ud.peer.remPort;
 		out_ud.proto := { udp := {} };
 		out_ud.msg := enc_PDU_GTPU(in_ud.gtpu);
-		port.setstate(0);
 	} with { extension "prototype(fast)" };
 
-	function f_dec_Gtp1uUD(in ASP_RecvFrom in_ud, out Gtp1uUnitdata out_ud) port GTPU_PT {
+	function f_dec_Gtp1uUD(in ASP_RecvFrom in_ud, out Gtp1uUnitdata out_ud) {
 		out_ud.peer.connId := in_ud.connId;
 		out_ud.peer.remName := in_ud.remName;
 		out_ud.peer.remPort := in_ud.remPort;
 		out_ud.gtpu := dec_PDU_GTPU(in_ud.msg);
-		port.setstate(0);
 	} with { extension "prototype(fast)" };
-/*
-	function f_GTPC_listen(inout GTPC_PT portRef, in HostName locName,
-				in PortNumber locPort) return Result { 
-		return f_IPL4_listen(portRef, locName, locPort, { udp := {} });
-	}
-*/
+
 }
