diff --git a/src/gb/gprs_ns2_internal.h b/src/gb/gprs_ns2_internal.h
index 95efbae..6096263 100644
--- a/src/gb/gprs_ns2_internal.h
+++ b/src/gb/gprs_ns2_internal.h
@@ -320,6 +320,23 @@
 	void (*free_bind)(struct gprs_ns2_vc_bind *driver);
 };
 
+enum ns2_sns_event {
+	NS2_SNS_EV_REQ_SELECT_ENDPOINT,	/*!< Select a SNS endpoint from the list */
+	NS2_SNS_EV_RX_SIZE,
+	NS2_SNS_EV_RX_SIZE_ACK,
+	NS2_SNS_EV_RX_CONFIG,
+	NS2_SNS_EV_RX_CONFIG_END,		/*!< SNS-CONFIG with end flag received */
+	NS2_SNS_EV_RX_CONFIG_ACK,
+	NS2_SNS_EV_RX_ADD,
+	NS2_SNS_EV_RX_DELETE,
+	NS2_SNS_EV_RX_CHANGE_WEIGHT,
+	NS2_SNS_EV_RX_ACK,			/*!< Rx of SNS-ACK (response to ADD/DELETE/CHG_WEIGHT */
+	NS2_SNS_EV_REQ_NO_NSVC,		/*!< no more NS-VC remaining (all dead) */
+	NS2_SNS_EV_REQ_NSVC_ALIVE,		/*!< a NS-VC became alive */
+	NS2_SNS_EV_REQ_ADD_BIND,		/*!< add a new local bind to this NSE */
+	NS2_SNS_EV_REQ_DELETE_BIND,		/*!< remove a local bind from this NSE */
+};
+
 enum ns2_cs ns2_create_vc(struct gprs_ns2_vc_bind *bind,
 			       struct msgb *msg,
 			       const struct osmo_sockaddr *remote,
diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c
index a9ace5f..181d1a3 100644
--- a/src/gb/gprs_ns2_sns.c
+++ b/src/gb/gprs_ns2_sns.c
@@ -72,38 +72,21 @@
 	GPRS_SNS_ST_SGSN_WAIT_CONFIG_ACK,	/* !< SGSN role: Wait for CONFIG-ACK from BSS */
 };
 
-enum gprs_sns_event {
-	GPRS_SNS_EV_REQ_SELECT_ENDPOINT,	/*!< Select a SNS endpoint from the list */
-	GPRS_SNS_EV_RX_SIZE,
-	GPRS_SNS_EV_RX_SIZE_ACK,
-	GPRS_SNS_EV_RX_CONFIG,
-	GPRS_SNS_EV_RX_CONFIG_END,		/*!< SNS-CONFIG with end flag received */
-	GPRS_SNS_EV_RX_CONFIG_ACK,
-	GPRS_SNS_EV_RX_ADD,
-	GPRS_SNS_EV_RX_DELETE,
-	GPRS_SNS_EV_RX_CHANGE_WEIGHT,
-	GPRS_SNS_EV_RX_ACK,			/*!< Rx of SNS-ACK (response to ADD/DELETE/CHG_WEIGHT */
-	GPRS_SNS_EV_REQ_NO_NSVC,		/*!< no more NS-VC remaining (all dead) */
-	GPRS_SNS_EV_REQ_NSVC_ALIVE,		/*!< a NS-VC became alive */
-	GPRS_SNS_EV_REQ_ADD_BIND,		/*!< add a new local bind to this NSE */
-	GPRS_SNS_EV_REQ_DELETE_BIND,		/*!< remove a local bind from this NSE */
-};
-
 static const struct value_string gprs_sns_event_names[] = {
-	{ GPRS_SNS_EV_REQ_SELECT_ENDPOINT,	"REQ_SELECT_ENDPOINT" },
-	{ GPRS_SNS_EV_RX_SIZE,			"RX_SIZE" },
-	{ GPRS_SNS_EV_RX_SIZE_ACK,		"RX_SIZE_ACK" },
-	{ GPRS_SNS_EV_RX_CONFIG,		"RX_CONFIG" },
-	{ GPRS_SNS_EV_RX_CONFIG_END,		"RX_CONFIG_END" },
-	{ GPRS_SNS_EV_RX_CONFIG_ACK,		"RX_CONFIG_ACK" },
-	{ GPRS_SNS_EV_RX_ADD,	    		"RX_ADD" },
-	{ GPRS_SNS_EV_RX_DELETE,		"RX_DELETE" },
-	{ GPRS_SNS_EV_RX_ACK,			"RX_ACK" },
-	{ GPRS_SNS_EV_RX_CHANGE_WEIGHT,		"RX_CHANGE_WEIGHT" },
-	{ GPRS_SNS_EV_REQ_NO_NSVC,		"REQ_NO_NSVC" },
-	{ GPRS_SNS_EV_REQ_NSVC_ALIVE,		"REQ_NSVC_ALIVE"},
-	{ GPRS_SNS_EV_REQ_ADD_BIND,		"REQ_ADD_BIND"},
-	{ GPRS_SNS_EV_REQ_DELETE_BIND,		"REQ_DELETE_BIND"},
+	{ NS2_SNS_EV_REQ_SELECT_ENDPOINT,	"REQ_SELECT_ENDPOINT" },
+	{ NS2_SNS_EV_RX_SIZE,			"RX_SIZE" },
+	{ NS2_SNS_EV_RX_SIZE_ACK,		"RX_SIZE_ACK" },
+	{ NS2_SNS_EV_RX_CONFIG,		"RX_CONFIG" },
+	{ NS2_SNS_EV_RX_CONFIG_END,		"RX_CONFIG_END" },
+	{ NS2_SNS_EV_RX_CONFIG_ACK,		"RX_CONFIG_ACK" },
+	{ NS2_SNS_EV_RX_ADD,	    		"RX_ADD" },
+	{ NS2_SNS_EV_RX_DELETE,		"RX_DELETE" },
+	{ NS2_SNS_EV_RX_ACK,			"RX_ACK" },
+	{ NS2_SNS_EV_RX_CHANGE_WEIGHT,		"RX_CHANGE_WEIGHT" },
+	{ NS2_SNS_EV_REQ_NO_NSVC,		"REQ_NO_NSVC" },
+	{ NS2_SNS_EV_REQ_NSVC_ALIVE,		"REQ_NSVC_ALIVE"},
+	{ NS2_SNS_EV_REQ_ADD_BIND,		"REQ_ADD_BIND"},
+	{ NS2_SNS_EV_REQ_DELETE_BIND,		"REQ_DELETE_BIND"},
 	{ 0, NULL }
 };
 
@@ -187,7 +170,7 @@
 		else
 			_osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_UNCONFIGURED, 0, 0, file, line);
 	} else {
-		_osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_REQ_SELECT_ENDPOINT, NULL, file, line);
+		_osmo_fsm_inst_dispatch(fi, NS2_SNS_EV_REQ_SELECT_ENDPOINT, NULL, file, line);
 	}
 }
 
@@ -306,7 +289,7 @@
 		}
 	}
 
-	osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_REQ_NO_NSVC, NULL);
+	osmo_fsm_inst_dispatch(fi, NS2_SNS_EV_REQ_NO_NSVC, NULL);
 }
 
 static void ns2_clear_elems(struct ns2_sns_elems *elems)
@@ -752,7 +735,7 @@
 	OSMO_ASSERT(gss->role == GPRS_SNS_ROLE_BSS);
 
 	switch (event) {
-	case GPRS_SNS_EV_RX_SIZE_ACK:
+	case NS2_SNS_EV_RX_SIZE_ACK:
 		tp = data;
 		if (TLVP_VAL_MINLEN(tp, NS_IE_CAUSE, 1)) {
 			LOGPFSML(fi, LOGL_ERROR, "SNS-SIZE-ACK with cause %s\n",
@@ -951,7 +934,7 @@
 	OSMO_ASSERT(gss->role == GPRS_SNS_ROLE_BSS);
 
 	switch (event) {
-	case GPRS_SNS_EV_RX_CONFIG_ACK:
+	case NS2_SNS_EV_RX_CONFIG_ACK:
 		tp = (struct tlv_parsed *) data;
 		if (TLVP_VAL_MINLEN(tp, NS_IE_CAUSE, 1)) {
 			LOGPFSML(fi, LOGL_ERROR, "SNS-CONFIG-ACK with cause %s\n",
@@ -1073,8 +1056,8 @@
 	OSMO_ASSERT(gss->role == GPRS_SNS_ROLE_BSS);
 
 	switch (event) {
-	case GPRS_SNS_EV_RX_CONFIG_END:
-	case GPRS_SNS_EV_RX_CONFIG:
+	case NS2_SNS_EV_RX_CONFIG_END:
+	case NS2_SNS_EV_RX_CONFIG:
 		rc = ns_sns_append_remote_eps(fi, data);
 		if (rc < 0) {
 			cause = -rc;
@@ -1082,7 +1065,7 @@
 			osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_UNCONFIGURED, 0, 0);
 			return;
 		}
-		if (event == GPRS_SNS_EV_RX_CONFIG_END) {
+		if (event == NS2_SNS_EV_RX_CONFIG_END) {
 			/* check if sum of data / sig weights == 0 */
 			if (ip46_weight_sum_data(&gss->remote) == 0 || ip46_weight_sum_sig(&gss->remote) == 0) {
 				cause = NS_CAUSE_INVAL_WEIGH;
@@ -1106,7 +1089,7 @@
 	}
 }
 
-/* called when receiving GPRS_SNS_EV_RX_ADD in state configure */
+/* called when receiving NS2_SNS_EV_RX_ADD in state configure */
 static void ns2_sns_st_configured_add(struct osmo_fsm_inst *fi,
 				      struct ns2_sns_state *gss,
 				      struct tlv_parsed *tp)
@@ -1349,16 +1332,16 @@
 	struct tlv_parsed *tp = data;
 
 	switch (event) {
-	case GPRS_SNS_EV_RX_ADD:
+	case NS2_SNS_EV_RX_ADD:
 		ns2_sns_st_configured_add(fi, gss, tp);
 		break;
-	case GPRS_SNS_EV_RX_DELETE:
+	case NS2_SNS_EV_RX_DELETE:
 		ns2_sns_st_configured_delete(fi, gss, tp);
 		break;
-	case GPRS_SNS_EV_RX_CHANGE_WEIGHT:
+	case NS2_SNS_EV_RX_CHANGE_WEIGHT:
 		ns2_sns_st_configured_change(fi, gss, tp);
 		break;
-	case GPRS_SNS_EV_REQ_NSVC_ALIVE:
+	case NS2_SNS_EV_REQ_NSVC_ALIVE:
 		osmo_timer_del(&fi->timer);
 		break;
 	}
@@ -1395,7 +1378,7 @@
 		.action = ns2_sns_st_bss_unconfigured,
 	},
 	[GPRS_SNS_ST_BSS_SIZE] = {
-		.in_event_mask = S(GPRS_SNS_EV_RX_SIZE_ACK),
+		.in_event_mask = S(NS2_SNS_EV_RX_SIZE_ACK),
 		.out_state_mask = S(GPRS_SNS_ST_UNCONFIGURED) |
 				  S(GPRS_SNS_ST_BSS_SIZE) |
 				  S(GPRS_SNS_ST_BSS_CONFIG_BSS),
@@ -1404,7 +1387,7 @@
 		.onenter = ns2_sns_st_bss_size_onenter,
 	},
 	[GPRS_SNS_ST_BSS_CONFIG_BSS] = {
-		.in_event_mask = S(GPRS_SNS_EV_RX_CONFIG_ACK),
+		.in_event_mask = S(NS2_SNS_EV_RX_CONFIG_ACK),
 		.out_state_mask = S(GPRS_SNS_ST_UNCONFIGURED) |
 				  S(GPRS_SNS_ST_BSS_CONFIG_BSS) |
 				  S(GPRS_SNS_ST_BSS_CONFIG_SGSN) |
@@ -1414,8 +1397,8 @@
 		.onenter = ns2_sns_st_bss_config_bss_onenter,
 	},
 	[GPRS_SNS_ST_BSS_CONFIG_SGSN] = {
-		.in_event_mask = S(GPRS_SNS_EV_RX_CONFIG) |
-				 S(GPRS_SNS_EV_RX_CONFIG_END),
+		.in_event_mask = S(NS2_SNS_EV_RX_CONFIG) |
+				 S(NS2_SNS_EV_RX_CONFIG_END),
 		.out_state_mask = S(GPRS_SNS_ST_UNCONFIGURED) |
 				  S(GPRS_SNS_ST_BSS_CONFIG_SGSN) |
 				  S(GPRS_SNS_ST_CONFIGURED) |
@@ -1425,10 +1408,10 @@
 		.onenter = ns2_sns_st_bss_config_sgsn_onenter,
 	},
 	[GPRS_SNS_ST_CONFIGURED] = {
-		.in_event_mask = S(GPRS_SNS_EV_RX_ADD) |
-				 S(GPRS_SNS_EV_RX_DELETE) |
-				 S(GPRS_SNS_EV_RX_CHANGE_WEIGHT) |
-				 S(GPRS_SNS_EV_REQ_NSVC_ALIVE),
+		.in_event_mask = S(NS2_SNS_EV_RX_ADD) |
+				 S(NS2_SNS_EV_RX_DELETE) |
+				 S(NS2_SNS_EV_RX_CHANGE_WEIGHT) |
+				 S(NS2_SNS_EV_REQ_NSVC_ALIVE),
 		.out_state_mask = S(GPRS_SNS_ST_UNCONFIGURED) |
 				  S(GPRS_SNS_ST_BSS_SIZE),
 		.name = "CONFIGURED",
@@ -1481,11 +1464,11 @@
 	struct gprs_ns2_vc *nsvc, *nsvc2;
 
 	switch (event) {
-	case GPRS_SNS_EV_REQ_ADD_BIND:
+	case NS2_SNS_EV_REQ_ADD_BIND:
 		sbind = data;
 		switch (fi->state) {
 		case GPRS_SNS_ST_UNCONFIGURED:
-			osmo_fsm_inst_dispatch(nse->bss_sns_fi, GPRS_SNS_EV_REQ_SELECT_ENDPOINT, NULL);
+			osmo_fsm_inst_dispatch(nse->bss_sns_fi, NS2_SNS_EV_REQ_SELECT_ENDPOINT, NULL);
 			break;
 		case GPRS_SNS_ST_BSS_SIZE:
 			/* TODO: add the ip4 element to the list */
@@ -1497,7 +1480,7 @@
 			break;
 		}
 		break;
-	case GPRS_SNS_EV_REQ_DELETE_BIND:
+	case NS2_SNS_EV_REQ_DELETE_BIND:
 		sbind = data;
 		switch (fi->state) {
 		case GPRS_SNS_ST_UNCONFIGURED:
@@ -1582,16 +1565,16 @@
 	struct ns2_sns_state *gss = (struct ns2_sns_state *) fi->priv;
 	struct gprs_ns2_nse *nse = nse_inst_from_fi(fi);
 
-	/* reset when receiving GPRS_SNS_EV_REQ_NO_NSVC */
+	/* reset when receiving NS2_SNS_EV_REQ_NO_NSVC */
 	switch (event) {
-	case GPRS_SNS_EV_REQ_NO_NSVC:
+	case NS2_SNS_EV_REQ_NO_NSVC:
 		/* ignore reselection running */
 		if (gss->reselection_running)
 			break;
 
 		sns_failed(fi, "no remaining NSVC, resetting SNS FSM");
 		break;
-	case GPRS_SNS_EV_REQ_SELECT_ENDPOINT:
+	case NS2_SNS_EV_REQ_SELECT_ENDPOINT:
 		/* tear down previous state
 		 * gprs_ns2_free_nsvcs() will trigger NO_NSVC, prevent this from triggering a reselection */
 		gss->reselection_running = true;
@@ -1629,10 +1612,10 @@
 	.name = "GPRS-NS2-SNS-BSS",
 	.states = ns2_sns_bss_states,
 	.num_states = ARRAY_SIZE(ns2_sns_bss_states),
-	.allstate_event_mask = S(GPRS_SNS_EV_REQ_NO_NSVC) |
-			       S(GPRS_SNS_EV_REQ_SELECT_ENDPOINT) |
-			       S(GPRS_SNS_EV_REQ_ADD_BIND) |
-			       S(GPRS_SNS_EV_REQ_DELETE_BIND),
+	.allstate_event_mask = S(NS2_SNS_EV_REQ_NO_NSVC) |
+			       S(NS2_SNS_EV_REQ_SELECT_ENDPOINT) |
+			       S(NS2_SNS_EV_REQ_ADD_BIND) |
+			       S(NS2_SNS_EV_REQ_DELETE_BIND),
 	.allstate_action = ns2_sns_st_all_action_bss,
 	.cleanup = NULL,
 	.timer_cb = ns2_sns_fsm_bss_timer_cb,
@@ -1706,31 +1689,31 @@
 
 	switch (nsh->pdu_type) {
 	case SNS_PDUT_SIZE:
-		osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_RX_SIZE, tp);
+		osmo_fsm_inst_dispatch(fi, NS2_SNS_EV_RX_SIZE, tp);
 		break;
 	case SNS_PDUT_SIZE_ACK:
-		osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_RX_SIZE_ACK, tp);
+		osmo_fsm_inst_dispatch(fi, NS2_SNS_EV_RX_SIZE_ACK, tp);
 		break;
 	case SNS_PDUT_CONFIG:
 		if (nsh->data[0] & 0x01)
-			osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_RX_CONFIG_END, tp);
+			osmo_fsm_inst_dispatch(fi, NS2_SNS_EV_RX_CONFIG_END, tp);
 		else
-			osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_RX_CONFIG, tp);
+			osmo_fsm_inst_dispatch(fi, NS2_SNS_EV_RX_CONFIG, tp);
 		break;
 	case SNS_PDUT_CONFIG_ACK:
-		osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_RX_CONFIG_ACK, tp);
+		osmo_fsm_inst_dispatch(fi, NS2_SNS_EV_RX_CONFIG_ACK, tp);
 		break;
 	case SNS_PDUT_ADD:
-		osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_RX_ADD, tp);
+		osmo_fsm_inst_dispatch(fi, NS2_SNS_EV_RX_ADD, tp);
 		break;
 	case SNS_PDUT_DELETE:
-		osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_RX_DELETE, tp);
+		osmo_fsm_inst_dispatch(fi, NS2_SNS_EV_RX_DELETE, tp);
 		break;
 	case SNS_PDUT_CHANGE_WEIGHT:
-		osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_RX_CHANGE_WEIGHT, tp);
+		osmo_fsm_inst_dispatch(fi, NS2_SNS_EV_RX_CHANGE_WEIGHT, tp);
 		break;
 	case SNS_PDUT_ACK:
-		osmo_fsm_inst_dispatch(fi, GPRS_SNS_EV_RX_ACK, tp);
+		osmo_fsm_inst_dispatch(fi, NS2_SNS_EV_RX_ACK, tp);
 		break;
 	default:
 		LOGPFSML(fi, LOGL_ERROR, "NSEI=%u Rx unknown SNS PDU type %s\n", nsei,
@@ -1873,7 +1856,7 @@
 
 	llist_add_tail(&endpoint->list, &gss->sns_endpoints);
 	if (do_selection)
-		osmo_fsm_inst_dispatch(nse->bss_sns_fi, GPRS_SNS_EV_REQ_SELECT_ENDPOINT, NULL);
+		osmo_fsm_inst_dispatch(nse->bss_sns_fi, NS2_SNS_EV_REQ_SELECT_ENDPOINT, NULL);
 
 	return 0;
 }
@@ -1909,7 +1892,7 @@
 		return 0;
 	}
 
-	/* gprs_ns2_free_nsvcs() will trigger GPRS_SNS_EV_REQ_NO_NSVC on the last NS-VC
+	/* gprs_ns2_free_nsvcs() will trigger NS2_SNS_EV_REQ_NO_NSVC on the last NS-VC
 	 * and restart SNS SIZE procedure which selects a new initial */
 	LOGNSE(nse, LOGL_INFO, "Current in-use SNS endpoint is being removed."
 			      "Closing all NS-VC and restart SNS-SIZE procedure"
@@ -1983,7 +1966,7 @@
 
 	if (alive) {
 		gss->alive = true;
-		osmo_fsm_inst_dispatch(nse->bss_sns_fi, GPRS_SNS_EV_REQ_NSVC_ALIVE, NULL);
+		osmo_fsm_inst_dispatch(nse->bss_sns_fi, NS2_SNS_EV_REQ_NSVC_ALIVE, NULL);
 	} else {
 		/* is there at least another alive nsvc? */
 		llist_for_each_entry(tmp, &nse->nsvc, list) {
@@ -1993,7 +1976,7 @@
 
 		/* all NS-VC have failed */
 		gss->alive = false;
-		osmo_fsm_inst_dispatch(nse->bss_sns_fi, GPRS_SNS_EV_REQ_NO_NSVC, NULL);
+		osmo_fsm_inst_dispatch(nse->bss_sns_fi, NS2_SNS_EV_REQ_NO_NSVC, NULL);
 	}
 }
 
@@ -2023,7 +2006,7 @@
 	tmp->bind = bind;
 	llist_add_tail(&tmp->list, &gss->binds);
 
-	osmo_fsm_inst_dispatch(nse->bss_sns_fi, GPRS_SNS_EV_REQ_ADD_BIND, tmp);
+	osmo_fsm_inst_dispatch(nse->bss_sns_fi, NS2_SNS_EV_REQ_ADD_BIND, tmp);
 	return 0;
 }
 
@@ -2057,7 +2040,7 @@
 	if (!found)
 		return -ENOENT;
 
-	osmo_fsm_inst_dispatch(nse->bss_sns_fi, GPRS_SNS_EV_REQ_DELETE_BIND, tmp);
+	osmo_fsm_inst_dispatch(nse->bss_sns_fi, NS2_SNS_EV_REQ_DELETE_BIND, tmp);
 	return 0;
 }
 
@@ -2095,8 +2078,8 @@
 	OSMO_ASSERT(gss->role == GPRS_SNS_ROLE_SGSN);
 
 	switch (event) {
-	case GPRS_SNS_EV_RX_CONFIG:
-	case GPRS_SNS_EV_RX_CONFIG_END:
+	case NS2_SNS_EV_RX_CONFIG:
+	case NS2_SNS_EV_RX_CONFIG_END:
 		rc = ns_sns_append_remote_eps(fi, data);
 		if (rc < 0) {
 			cause = -rc;
@@ -2105,7 +2088,7 @@
 			return;
 		}
 		/* only change state if last CONFIG was received */
-		if (event == GPRS_SNS_EV_RX_CONFIG_END) {
+		if (event == NS2_SNS_EV_RX_CONFIG_END) {
 			/* ensure sum of data weight / sig weights is > 0 */
 			if (ip46_weight_sum_data(&gss->remote) == 0 || ip46_weight_sum_sig(&gss->remote) == 0) {
 				cause = NS_CAUSE_INVAL_WEIGH;
@@ -2144,7 +2127,7 @@
 	OSMO_ASSERT(gss->role == GPRS_SNS_ROLE_SGSN);
 
 	switch (event) {
-	case GPRS_SNS_EV_RX_CONFIG_ACK:
+	case NS2_SNS_EV_RX_CONFIG_ACK:
 		tp = data;
 		if (TLVP_VAL_MINLEN(tp, NS_IE_CAUSE, 1)) {
 			LOGPFSML(fi, LOGL_ERROR, "Rx SNS-CONFIG-ACK with cause %s\n",
@@ -2173,8 +2156,8 @@
 		.action = ns2_sns_st_sgsn_unconfigured,
 	},
 	[GPRS_SNS_ST_SGSN_WAIT_CONFIG] = {
-		.in_event_mask = S(GPRS_SNS_EV_RX_CONFIG) |
-				 S(GPRS_SNS_EV_RX_CONFIG_END),
+		.in_event_mask = S(NS2_SNS_EV_RX_CONFIG) |
+				 S(NS2_SNS_EV_RX_CONFIG_END),
 		.out_state_mask = S(GPRS_SNS_ST_UNCONFIGURED) |
 				  S(GPRS_SNS_ST_SGSN_WAIT_CONFIG) |
 				  S(GPRS_SNS_ST_SGSN_WAIT_CONFIG_ACK),
@@ -2182,7 +2165,7 @@
 		.action = ns2_sns_st_sgsn_wait_config,
 	},
 	[GPRS_SNS_ST_SGSN_WAIT_CONFIG_ACK] = {
-		.in_event_mask = S(GPRS_SNS_EV_RX_CONFIG_ACK),
+		.in_event_mask = S(NS2_SNS_EV_RX_CONFIG_ACK),
 		.out_state_mask = S(GPRS_SNS_ST_UNCONFIGURED) |
 				  S(GPRS_SNS_ST_SGSN_WAIT_CONFIG_ACK) |
 				  S(GPRS_SNS_ST_CONFIGURED),
@@ -2191,10 +2174,10 @@
 		.onenter = ns2_sns_st_sgsn_wait_config_ack_onenter,
 	},
 	[GPRS_SNS_ST_CONFIGURED] = {
-		.in_event_mask = S(GPRS_SNS_EV_RX_ADD) |
-				 S(GPRS_SNS_EV_RX_DELETE) |
-				 S(GPRS_SNS_EV_RX_CHANGE_WEIGHT) |
-				 S(GPRS_SNS_EV_REQ_NSVC_ALIVE),
+		.in_event_mask = S(NS2_SNS_EV_RX_ADD) |
+				 S(NS2_SNS_EV_RX_DELETE) |
+				 S(NS2_SNS_EV_RX_CHANGE_WEIGHT) |
+				 S(NS2_SNS_EV_REQ_NSVC_ALIVE),
 		.out_state_mask = S(GPRS_SNS_ST_UNCONFIGURED),
 		.name = "CONFIGURED",
 		/* shared with BSS side; once configured there's no difference */
@@ -2239,7 +2222,7 @@
 	OSMO_ASSERT(gss->role == GPRS_SNS_ROLE_SGSN);
 
 	switch (event) {
-	case GPRS_SNS_EV_RX_SIZE:
+	case NS2_SNS_EV_RX_SIZE:
 		tp = (struct tlv_parsed *) data;
 		/* check for mandatory / conditional IEs */
 		if (!TLVP_PRES_LEN(tp, NS_IE_RESET_FLAG, 1) ||
@@ -2339,10 +2322,10 @@
 	.name = "GPRS-NS2-SNS-SGSN",
 	.states = ns2_sns_sgsn_states,
 	.num_states = ARRAY_SIZE(ns2_sns_sgsn_states),
-	.allstate_event_mask = S(GPRS_SNS_EV_RX_SIZE) |
-			       S(GPRS_SNS_EV_REQ_NO_NSVC) |
-			       S(GPRS_SNS_EV_REQ_ADD_BIND) |
-			       S(GPRS_SNS_EV_REQ_DELETE_BIND),
+	.allstate_event_mask = S(NS2_SNS_EV_RX_SIZE) |
+			       S(NS2_SNS_EV_REQ_NO_NSVC) |
+			       S(NS2_SNS_EV_REQ_ADD_BIND) |
+			       S(NS2_SNS_EV_REQ_DELETE_BIND),
 	.allstate_action = ns2_sns_st_all_action_sgsn,
 	.cleanup = NULL,
 	.timer_cb = ns2_sns_fsm_sgsn_timer_cb,
