diff --git a/pgw/PGW_Tests.ttcn b/pgw/PGW_Tests.ttcn
index e39bd62..ea9f056 100644
--- a/pgw/PGW_Tests.ttcn
+++ b/pgw/PGW_Tests.ttcn
@@ -676,7 +676,9 @@
 /* create a session on the PGW */
 private function f_create_session(template (value) FullyQualifiedTEID fteid_c_ie,
 				  template (value) FullyQualifiedTEID fteid_u_ie,
-				  template (omit) UserLocationInfo uli_ie := omit) runs on PGW_Session_CT {
+				  template (omit) UserLocationInfo uli_ie := omit,
+				  template (omit) APCO apco := omit,
+				  template APCO exp_apco := *) runs on PGW_Session_CT {
 	var PDU_GTPCv2 rx;
 
 	/* Defaults used for s5/s8: */
@@ -698,7 +700,8 @@
 					  teid_list := { fteid_u_ie },
 					  chg_car := '0000'O,
 					  bearer_id := g_pars.bearer.ebi,
-					  uli := uli_ie);
+					  uli := uli_ie,
+					  apco := apco);
 	g2c.gtpcv2_pdu.createSessionRequest.servingNetwork := ts_GTP2C_ServingNetwork('001'H, '01F'H);
 
 	GTP2.send(g2c);
@@ -715,7 +718,8 @@
 	alt {
 	[] GTP2.receive(tr_GTP2C_CreateSessionResp(d_teid := g_pars.teic_local,
 						   cause := Request_accepted,
-						   apn_restriction := apn_restriction)) -> value rx {
+						   apn_restriction := apn_restriction,
+						   exp_apco := exp_apco)) -> value rx {
 		/* extract TEIDs */
 		var CreateSessionResponse resp := rx.gtpcv2_pdu.createSessionResponse;
 		g_pars.teic_remote := resp.fullyQualifiedTEID[0].tEID_GRE_Key;
@@ -780,7 +784,8 @@
 }
 
 /* create a session on the PGW on a S2b interface (from ePDG)*/
-private function f_s2b_create_session() runs on PGW_Session_CT {
+private function f_s2b_create_session(template (omit) APCO apco := omit,
+				      template APCO exp_apco := *) runs on PGW_Session_CT {
 	var template (value) FullyQualifiedTEID fteid_c_ie, fteid_u_ie;
 	var template (value) UserLocationInfo uli_ie;
 
@@ -788,13 +793,12 @@
 					f_inet_addr(mp_local_hostname_c), omit);
 	fteid_u_ie := ts_GTP2C_FTEID(FTEID_IF_S2bU_ePDG_GTPU, g_pars.bearer.teid_local, 5,
 					f_inet_addr(mp_local_hostname_u), omit);
-	f_create_session(fteid_c_ie, fteid_u_ie);
-	/* open5gs up to 1.2.3 won't accept it without ULI, despite not mandatory */
+
 	var template (value) TAI tai := { '0'H, '0'H, '1'H, 'F'H, '0'H, '1'H, '0001'O };
 	var template (value) ECGI ecgi := { '0'H, '0'H, '1'H, 'F'H, '0'H, '1'H, '0'H, 23 };
 	uli_ie := ts_GTP2C_UserLocInfo(tai := tai, ecgi := ecgi);
 
-	f_create_session(fteid_c_ie, fteid_u_ie, uli_ie);
+	f_create_session(fteid_c_ie, fteid_u_ie, uli_ie := uli_ie, apco := apco, exp_apco := exp_apco);
 
 }
 
@@ -1048,7 +1052,9 @@
 
 /* create a session, expect it to succeed */
 private function f_TC_s2b_createSession_v4_noapco() runs on PGW_Session_CT {
-	f_s2b_create_session();
+	var template (omit) APCO apco := omit;
+	var template APCO exp_apco := omit;
+	f_s2b_create_session(apco, exp_apco);
 	setverdict(pass);
 }
 testcase TC_s2b_createSession_v4_noapco() runs on PGW_Test_CT {
@@ -1061,6 +1067,27 @@
 	vc_conn.done;
 }
 
+private function f_TC_s2b_createSession_v4_apco() runs on PGW_Session_CT {
+	var template (omit) APCO apco := ts_GTP2C_APCO('0000'B,
+						{ts_GTP2C_PCO_P_DNS_IPv4(''O),
+						 ts_GTP2C_PCO_P_PCSCF_IPv4(''O)});
+	var template APCO exp_apco := tr_GTP2C_APCO('0000'B,
+						{tr_GTP2C_PCO_P_DNS_IPv4(?),
+						 *, /* open5gs-smfd can contain several DNS servers */
+						 tr_GTP2C_PCO_P_PCSCF_IPv4(?)});
+	f_s2b_create_session(apco, exp_apco);
+	setverdict(pass);
+}
+testcase TC_s2b_createSession_v4_apco() runs on PGW_Test_CT {
+	var PGW_Session_CT vc_conn;
+	var SessionPars pars := valueof(t_SessionPars('001010123456789'H,
+						      "tun22",
+						      rat_type := GTP2C_RAT_WLAN));
+	f_init();
+	vc_conn := f_start_handler(refers(f_TC_s2b_createSession_v4_apco), pars);
+	vc_conn.done;
+}
+
 control {
 	execute( TC_tx_echo() );
 	execute( TC_createSession() );
@@ -1070,6 +1097,7 @@
 	execute( TC_deleteSession_unknown() );
 	execute( TC_gy_charging_cc_time() );
 	execute( TC_s2b_createSession_v4_noapco() );
+	execute( TC_s2b_createSession_v4_apco() );
 }
 
 
