diff --git a/ns/NS_Tests.ttcn b/ns/NS_Tests.ttcn
index 41a89c0..710c84d 100644
--- a/ns/NS_Tests.ttcn
+++ b/ns/NS_Tests.ttcn
@@ -1,4 +1,5 @@
 module NS_Tests {
+
 /* Osmocom NS test suite for NS over framerelay or udp ip.access style in TTCN-3
  * (C) 2021 sysmocom s.f.m.c. GmbH <info@sysmocom.de>
  * Author: Alexander Couzens <lynxis@fe80.eu>
@@ -66,9 +67,6 @@
 			}
 		}
 	};
-	NsIEI ns_iei_num_ipv4_ep := NS_IEI_NUM_IPv4_EP;
-	NsIEI ns_iei_num_ipv6_ep := NS_IEI_NUM_IPv6_EP;
-	NsIEI ns_iei_nsei := NS_IEI_NSEI;
 }
 
 type component RAW_Test_CT extends RAW_NS_CT {
@@ -560,76 +558,36 @@
 
 /* 48.016 SNS test cases */
 
-function f_set_num_of_ip_endpoints(inout template (omit) PDU_NS base, NSVCConfiguration nsvc_cfg) {
-	const integer NUM_IP := 1;
-	if (nsvc_cfg.provider.ip.address_family == AF_INET) {
-		base.pDU_SNS_Size.numberOfIP4_Endpoints :=
-			{iEI := int2oct(enum2int(ns_iei_num_ipv4_ep), 1), numberOfIP_Endpoints := int2oct(valueof(NUM_IP), 2)};
-	} else {
-		base.pDU_SNS_Size.numberOfIP4_Endpoints :=
-			{iEI := int2oct(enum2int(ns_iei_num_ipv6_ep), 1), numberOfIP_Endpoints := int2oct(valueof(NUM_IP), 2)};
-	}
-}
-
-function f_outgoing_sns_size_syntactically_wrong_NSEI(template (omit) PDU_NS base, NSVCConfiguration nsvc_cfg)
-runs on RAW_NS_CT {
-	const integer IDX := 0;
-	f_set_num_of_ip_endpoints(base, nsvc_cfg);
-	/* Syntactical error here: length of 1 (has to be >=2) */
-	base.pDU_SNS_Size.nSEI_NS :=
-		{iEI := int2oct(enum2int(ns_iei_nsei), 1), ext := '0'B, lengthIndicator := {length1 := 1},
-		 nSEI := int2oct(g_nsconfig.nsei, 2)};
-	var NsCause cause := NS_CAUSE_INVALID_ESSENTIAL_IE;
-	log("Expected cause: ", cause);
-	NSCP[IDX].send(base);
-	f_ns_exp(tr_SNS_SIZE_ACK(g_nsconfig.nsei, cause), IDX);
-}
-
-function f_outgoing_sns_size_invalid_num_of_ip_eps(template (omit) PDU_NS base, NSVCConfiguration nsvc_cfg)
+/* Send an SNS Size(-ish) PDU, i.e. an SNS Size or an SNS Size with erroneous payload */
+function f_outgoing_sns_size_wrong_ip_family(template (omit) PDU_NS base)
 runs on RAW_NS_CT {
 	const integer IDX := 0;
 	const integer NUM_IP := 1;
 	log("f_outgoing_sns_sizeish_pdu(idx=", IDX, ")");
+	var NSVCConfiguration nsvc_cfg := g_nsconfig.nsvc[IDX];
 	var template (omit) NsCause cause := omit;
-	/* Send IP4 endpoints when IP6 is configured and vice versa,
-	 * in effect sending the wrong type of NS-VC endpoints */
+
 	if (nsvc_cfg.provider.ip.address_family == AF_INET) {
-		base.pDU_SNS_Size.numberOfIP4_Endpoints :=
-			{iEI := int2oct(enum2int(ns_iei_num_ipv6_ep), 1), numberOfIP_Endpoints := int2oct(valueof(NUM_IP), 2)};
-		cause := NS_CAUSE_INVALID_NR_OF_IPv6_ENDPOINTS;
+		base.pDU_SNS_Size.numberOfIP6_Endpoints :=
+			{iEI := '09'O, numberOfIP_Endpoints := int2oct(valueof(NUM_IP), 2)};
+		cause := NS_CAUSE_INVALID_NR_OF_IPv4_ENDPOINTS;
 	} else {
 		base.pDU_SNS_Size.numberOfIP4_Endpoints :=
-			{iEI := int2oct(enum2int(ns_iei_num_ipv4_ep), 1), numberOfIP_Endpoints := int2oct(valueof(NUM_IP), 2)};
-		cause := NS_CAUSE_INVALID_NR_OF_IPv4_ENDPOINTS;
+			{iEI := '08'O, numberOfIP_Endpoints := int2oct(valueof(NUM_IP), 2)};
+		cause := NS_CAUSE_INVALID_NR_OF_IPv6_ENDPOINTS;
 	}
-	log("Expected cause: ", cause);
+	log("expected cause: ", cause);
 	NSCP[IDX].send(base);
 	f_ns_exp(tr_SNS_SIZE_ACK(g_nsconfig.nsei, cause), IDX);
-	/* TODO (?): Send insufficient number of IP endpoints. But for that I have to find out what
-	 *the number of suppurted endpoints is... the config only gives endpoints that are *configured*,
-	 * not any information on capacity... Same story for number of NSVCs */
-	// f_set_num_of_ip_endpoints(base);
-	// base.pDU_SNS_Size.
-	// NSCP[IDX].send(base);
-	// cause :=
-	// f_ns_exp(tr_SNS_SIZE_ACK(g_nsconfig.nsei), IDX);
 }
 
-/* Send SNS Size PDUs with invalid IEs */
 testcase TC_sns_sgsn_size_payload() runs on RAW_Test_CT {
-	const integer IDX := 0;
 	f_init_ns_codec(mp_nsconfig);
-	/* Assumption: No connections to other NSEs for SUT and testcomponent, and this is
-	 * <= max num of supported NSVCs (TODO: where do I find that number?) */
-	const integer num_of_nsvcs := lengthof(mp_nsconfig.nsvc) * lengthof(mp_nsconfig.nsvc);
 	/* Template that would be accepted, only missing the number of IP endpoints
 	 * (since there are no ternary operators in TTCN-3...) */
-	template (omit) PDU_NS ts_base_SNS_SIZE_configured :=
-		ts_SNS_SIZE(g_nsconfig.nsei, rst_flag := true, max_nsvcs := num_of_nsvcs,
-			    num_v4 := omit, num_v6 := omit);
-	var NSVCConfiguration nsvc_cfg := g_nsconfig.nsvc[IDX];
-	f_outgoing_sns_size_syntactically_wrong_NSEI(ts_base_SNS_SIZE_configured, nsvc_cfg);
-	f_outgoing_sns_size_invalid_num_of_ip_eps(ts_base_SNS_SIZE_configured, nsvc_cfg);
+	template (omit) PDU_NS ts_base_SNS_SIZE_configured := ts_SNS_SIZE(g_nsconfig.nsei, rst_flag := true, max_nsvcs := 1,
+									      num_v4 := omit, num_v6 := omit);
+	f_outgoing_sns_size_wrong_ip_family(ts_base_SNS_SIZE_configured);
 	setverdict(pass);
 	f_clean_ns_codec();
 }
