diff --git a/ggsn_tests/GGSN_Tests.ttcn b/ggsn_tests/GGSN_Tests.ttcn
index 43e754b..03cc288 100644
--- a/ggsn_tests/GGSN_Tests.ttcn
+++ b/ggsn_tests/GGSN_Tests.ttcn
@@ -21,6 +21,8 @@
 		hexstring	imsi,
 		octetstring	msisdn optional,
 		octetstring	apn,
+		ProtConfigOptions	pco_req optional,
+		ProtConfigOptions	pco_neg optional,
 		EndUserAddress	eua,
 		OCT16		ip6_prefix optional,
 		BIT4		nsapi,
@@ -229,7 +231,7 @@
 	template GTPC_PDUs ts_CreatePdpPDU(hexstring imsi, OCT1 restart_ctr, OCT4 teid_data, OCT4 teid_ctrl,
 					   BIT4 nsapi, EndUserAddress eua, octetstring apn,
 					   octetstring sgsn_ip_sign, octetstring sgsn_ip_data,
-					   octetstring msisdn) := {
+					   octetstring msisdn, template ProtConfigOptions pco := omit) := {
 		createPDPContextRequest := {
 			imsi := ts_Imsi(imsi),
 			rai := omit,
@@ -258,7 +260,7 @@
 			trace_type := omit,
 			endUserAddress := eua,
 			accessPointName := ts_APN(apn),
-			protConfigOptions := omit,
+			protConfigOptions := pco,
 			sgsn_addr_signalling := ts_GsnAddr(sgsn_ip_sign),
 			sgsn_addr_traffic := ts_GsnAddr(sgsn_ip_data),
 			msisdn := ts_Msisdn(msisdn),
@@ -289,12 +291,41 @@
 						 OCT1 restart_ctr, OCT4 teid_data,
 						 OCT4 teid_ctrl, BIT4 nsapi, EndUserAddress eua,
 						 octetstring apn, octetstring sgsn_ip_sign,
-						 octetstring sgsn_ip_data, octetstring msisdn) := {
+						 octetstring sgsn_ip_data, octetstring msisdn,
+						 template ProtConfigOptions pco := omit) := {
 		peer := peer,
 		gtpc := ts_GTP1C_PDU(createPDPContextRequest, '00000000'O,
 					valueof(ts_CreatePdpPDU(imsi, restart_ctr, teid_data, teid_ctrl,
 								nsapi, eua, apn, sgsn_ip_sign,
-								sgsn_ip_data, msisdn)), seq)
+								sgsn_ip_data, msisdn, pco)), seq)
+	}
+
+	template ProtConfigOptions ts_PCO := {
+		type_gtpc := '84'O,
+		lengthf := 0,
+		configProtocol := '000'B,
+		spare := '0000'B,
+		extension0 := '1'B,
+		protocols := {}
+	}
+
+
+	template ProtConfigOptions ts_PCO_IPv6_DNS modifies ts_PCO := {
+		protocols := {
+			{ protocolID := '0003'O, lengthProtoID := 0, protoIDContents := ''O }
+		}
+	}
+
+	template ProtConfigOptions ts_PCO_IPv4_DNS_IPCP modifies ts_PCO := {
+		protocols := {
+			{ protocolID := '8021'O, lengthProtoID := 16, protoIDContents := '01000010810600000000830600000000'O }
+		}
+	}
+
+	template ProtConfigOptions ts_PCO_IPv4_DNS_CONT modifies ts_PCO := {
+		protocols := {
+			{ protocolID := '000d'O, lengthProtoID := 0, protoIDContents := ''O }
+		}
 	}
 
 	function f_teardown_ind_IE(in template BIT1 ind) return template TearDownInd {
@@ -466,6 +497,7 @@
 		msisdn := msisdn,
 		nsapi := f_rnd_nsapi(),
 		apn := apn,
+		pco_req := omit,
 		eua := eua,
 		teid := f_rnd_tei(),
 		teic := f_rnd_tei(),
@@ -493,7 +525,7 @@
 		log("sending CreatePDP");
 		f_send_gtpc(ctx, ts_GTPC_CreatePDP(g_peer_c, ctx.c_seq_nr, ctx.imsi, g_restart_ctr,
 						  ctx.teid, ctx.teic, ctx.nsapi, ctx.eua, ctx.apn,
-						  g_sgsn_ip_c, g_sgsn_ip_u, ctx.msisdn));
+						  g_sgsn_ip_c, g_sgsn_ip_u, ctx.msisdn, ctx.pco_req));
 		T_default.start;
 		d := activate(pingpong());
 		alt {
@@ -503,6 +535,7 @@
 					ctx.teid_remote := cpr.teidDataI.teidDataI;
 					ctx.teic_remote := cpr.teidControlPlane.teidControlPlane;
 					ctx.eua := cpr.endUserAddress;
+					ctx.pco_neg := cpr.protConfigOptions;
 					setverdict(pass);
 				} else {
 					setverdict(fail);
@@ -537,12 +570,6 @@
 	/* IPv6 neighbor solicitation fe80::2 -> ff02::1:ff00:2 from 02:88:b5:1f:25:59 */
 	const octetstring c_neigh_solicit:= '6000000000203afffe800000000000000000000000000002ff0200000000000000000001ff00000287009f9600000000fe80000000000000000000000000000201010288b51f2559'O;
 
-	testcase TC_activate_pdp4() runs on GT_CT {
-		f_init();
-		var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv4Dyn)));
-		f_pdp_ctx_act(ctx);
-	}
-
 	/* template to generate a 'Prefix Information' ICMPv6 option */
 	template OptionField ts_ICMP6_OptPrefix(OCT16 prefix, INT1 prefix_len) := {
 		prefixInformation := {
@@ -724,11 +751,29 @@
 		T_default.stop;
 	}
 
-	testcase TC_activate_pdp6() runs on GT_CT {
+	testcase TC_pdp6_act_deact() runs on GT_CT {
 		f_init();
 
 		var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv6Dyn)));
 		f_pdp_ctx_act(ctx);
+		f_pdp_ctx_del(ctx, '1'B);
+	}
+
+	testcase TC_pdp6_act_deact_pcodns() runs on GT_CT {
+		f_init();
+
+		var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv6Dyn)));
+		ctx.pco_req := valueof(ts_PCO_IPv6_DNS);
+		f_pdp_ctx_act(ctx);
+		f_pdp_ctx_del(ctx, '1'B);
+	}
+
+	testcase TC_pdp6_act_deact_icmp6() runs on GT_CT {
+		f_init();
+
+		var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv6Dyn)));
+		ctx.pco_req := valueof(ts_PCO_IPv6_DNS);
+		f_pdp_ctx_act(ctx);
 
 		//f_send_gtpu(ctx, c_router_solicit);
 		//f_send_gtpu(ctx, c_neigh_solicit);
@@ -740,8 +785,34 @@
 		f_pdp_ctx_del(ctx, '1'B);
 	}
 
+	testcase TC_pdp4_act_deact() runs on GT_CT {
+		f_init();
+		var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv4Dyn)));
+		f_pdp_ctx_act(ctx);
+		f_pdp_ctx_del(ctx, '1'B);
+	}
+
+	testcase TC_pdp4_act_deact_ipcp() runs on GT_CT {
+		f_init();
+		var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv4Dyn)));
+		f_pdp_ctx_act(ctx);
+		f_pdp_ctx_del(ctx, '1'B);
+	}
+
+	testcase TC_pdp4_act_deact_pcodns() runs on GT_CT {
+		f_init();
+		var PdpContext ctx := valueof(t_DefinePDP('262420123456789'H, '1234'O, valueof(t_ApnInternet), valueof(t_EuaIPv4Dyn)));
+		f_pdp_ctx_act(ctx);
+		f_pdp_ctx_del(ctx, '1'B);
+	}
+
 	control {
-		execute(TC_activate_pdp4());
-		execute(TC_activate_pdp6());
+		execute(TC_pdp4_act_deact());
+		execute(TC_pdp4_act_deact_ipcp());
+		execute(TC_pdp4_act_deact_pcodns());
+
+		execute(TC_pdp6_act_deact());
+		execute(TC_pdp6_act_deact_pcodns());
+		execute(TC_pdp6_act_deact_icmp6());
 	}
 }
