diff --git a/include/osmocom/gprs/gprs_ns2.h b/include/osmocom/gprs/gprs_ns2.h
index 1b20298..df682db 100644
--- a/include/osmocom/gprs/gprs_ns2.h
+++ b/include/osmocom/gprs/gprs_ns2.h
@@ -26,18 +26,18 @@
 	/*! The VC will use RESET/BLOCK/UNBLOCK to start the connection and do ALIVE/ACK.
 	 * This is what is needed for Frame Relay transport, and if you use a R97/R99 Gb
 	 * interface over an IP transport (never standardized by 3GPP) */
-	NS2_VC_MODE_BLOCKRESET,
+	GPRS_NS2_VC_MODE_BLOCKRESET,
 	/*! The VC will only use ALIVE/ACK (no RESET/BLOCK/UNBLOCK), which is for Gb-IP
 	 * interface compliant to 3GPP Rel=4 or later. */
-	NS2_VC_MODE_ALIVE,
+	GPRS_NS2_VC_MODE_ALIVE,
 };
 
 enum gprs_ns2_dialect {
-	NS2_DIALECT_UNDEF,
-	NS2_DIALECT_STATIC_ALIVE,
-	NS2_DIALECT_STATIC_RESETBLOCK,
-	NS2_DIALECT_IPACCESS,
-	NS2_DIALECT_SNS,
+	GPRS_NS2_DIALECT_UNDEF,
+	GPRS_NS2_DIALECT_STATIC_ALIVE,
+	GPRS_NS2_DIALECT_STATIC_RESETBLOCK,
+	GPRS_NS2_DIALECT_IPACCESS,
+	GPRS_NS2_DIALECT_SNS,
 };
 
 /*! Osmocom NS link layer types */
@@ -50,9 +50,9 @@
 
 /*! Osmocom NS primitives according to 48.016 5.2 Service primitves */
 enum gprs_ns2_prim {
-	PRIM_NS_UNIT_DATA,
-	PRIM_NS_CONGESTION,
-	PRIM_NS_STATUS,
+	GPRS_NS2_PRIM_UNIT_DATA,
+	GPRS_NS2_PRIM_CONGESTION,
+	GPRS_NS2_PRIM_STATUS,
 };
 
 extern const struct value_string gprs_ns2_prim_strs[];
@@ -68,22 +68,22 @@
 
 /*! Osmocom NS primitives according to 48.016 5.2.2.4 Service primitves */
 enum gprs_ns2_congestion_cause {
-	NS_CONG_CAUSE_BACKWARD_BEGIN,
-	NS_CONG_CAUSE_BACKWARD_END,
-	NS_CONG_CAUSE_FORWARD_BEGIN,
-	NS_CONG_CAUSE_FORWARD_END,
+	GPRS_NS2_CONG_CAUSE_BACKWARD_BEGIN,
+	GPRS_NS2_CONG_CAUSE_BACKWARD_END,
+	GPRS_NS2_CONG_CAUSE_FORWARD_BEGIN,
+	GPRS_NS2_CONG_CAUSE_FORWARD_END,
 };
 
 /*! Osmocom NS primitives according to 48.016 5.2.2.6 Service primitves */
 enum gprs_ns2_affecting_cause {
-	NS_AFF_CAUSE_VC_FAILURE,
-	NS_AFF_CAUSE_VC_RECOVERY,
-	NS_AFF_CAUSE_FAILURE,
-	NS_AFF_CAUSE_RECOVERY,
+	GPRS_NS2_AFF_CAUSE_VC_FAILURE,
+	GPRS_NS2_AFF_CAUSE_VC_RECOVERY,
+	GPRS_NS2_AFF_CAUSE_FAILURE,
+	GPRS_NS2_AFF_CAUSE_RECOVERY,
 	/* osmocom own causes */
-	NS_AFF_CAUSE_SNS_CONFIGURED,
-	NS_AFF_CAUSE_SNS_FAILURE,
-	NS_AFF_CAUSE_SNS_NO_ENDPOINTS,
+	GPRS_NS2_AFF_CAUSE_SNS_CONFIGURED,
+	GPRS_NS2_AFF_CAUSE_SNS_FAILURE,
+	GPRS_NS2_AFF_CAUSE_SNS_NO_ENDPOINTS,
 };
 
 extern const struct value_string gprs_ns2_aff_cause_prim_strs[];
@@ -94,9 +94,9 @@
 
 /*! Osmocom NS primitives according to 48.016 5.2.2.7 Service primitves */
 enum gprs_ns2_change_ip_endpoint {
-	NS_ENDPOINT_NO_CHANGE,
-	NS_ENDPOINT_REQUEST_CHANGE,
-	NS_ENDPOINT_CONFIRM_CHANGE,
+	GRPS_NS2_ENDPOINT_NO_CHANGE,
+	GPRS_NS2_ENDPOINT_REQUEST_CHANGE,
+	GPRS_NS2_ENDPOINT_CONFIRM_CHANGE,
 };
 
 extern const struct value_string gprs_ns2_cause_strs[];
diff --git a/src/gb/gprs_bssgp2.c b/src/gb/gprs_bssgp2.c
index 5a8d41f..0f519ad 100644
--- a/src/gb/gprs_bssgp2.c
+++ b/src/gb/gprs_bssgp2.c
@@ -52,7 +52,7 @@
 	nsp.nsei = nsei;
 	nsp.u.unitdata.link_selector = lsp;
 
-	osmo_prim_init(&nsp.oph, SAP_NS, PRIM_NS_UNIT_DATA, PRIM_OP_REQUEST, msg);
+	osmo_prim_init(&nsp.oph, SAP_NS, GPRS_NS2_PRIM_UNIT_DATA, PRIM_OP_REQUEST, msg);
 	rc = gprs_ns2_recv_prim(nsi, &nsp.oph);
 
 	return rc;
diff --git a/src/gb/gprs_ns2.c b/src/gb/gprs_ns2.c
index 811294b..7e273fb 100644
--- a/src/gb/gprs_ns2.c
+++ b/src/gb/gprs_ns2.c
@@ -196,19 +196,19 @@
 };
 
 const struct value_string gprs_ns2_aff_cause_prim_strs[] = {
-	{ NS_AFF_CAUSE_VC_FAILURE,	"NSVC failure" },
-	{ NS_AFF_CAUSE_VC_RECOVERY,	"NSVC recovery" },
-	{ NS_AFF_CAUSE_FAILURE,		"NSE failure" },
-	{ NS_AFF_CAUSE_RECOVERY,	"NSE recovery" },
-	{ NS_AFF_CAUSE_SNS_CONFIGURED,	"NSE SNS configured" },
-	{ NS_AFF_CAUSE_SNS_FAILURE,	"NSE SNS failure" },
+	{ GPRS_NS2_AFF_CAUSE_VC_FAILURE,	"NSVC failure" },
+	{ GPRS_NS2_AFF_CAUSE_VC_RECOVERY,	"NSVC recovery" },
+	{ GPRS_NS2_AFF_CAUSE_FAILURE,		"NSE failure" },
+	{ GPRS_NS2_AFF_CAUSE_RECOVERY,		"NSE recovery" },
+	{ GPRS_NS2_AFF_CAUSE_SNS_CONFIGURED,	"NSE SNS configured" },
+	{ GPRS_NS2_AFF_CAUSE_SNS_FAILURE,	"NSE SNS failure" },
 	{ 0, NULL }
 };
 
 const struct value_string gprs_ns2_prim_strs[] = {
-	{ PRIM_NS_UNIT_DATA,	"UNIT DATA" },
-	{ PRIM_NS_CONGESTION,	"CONGESTION" },
-	{ PRIM_NS_STATUS,	"STATUS" },
+	{ GPRS_NS2_PRIM_UNIT_DATA,	"UNIT DATA" },
+	{ GPRS_NS2_PRIM_CONGESTION,	"CONGESTION" },
+	{ GPRS_NS2_PRIM_STATUS,		"STATUS" },
 	{ 0, NULL }
 };
 
@@ -429,7 +429,7 @@
 
 	nsp = container_of(oph, struct osmo_gprs_ns2_prim, oph);
 
-	if (oph->operation != PRIM_OP_REQUEST || oph->primitive != PRIM_NS_UNIT_DATA)
+	if (oph->operation != PRIM_OP_REQUEST || oph->primitive != GPRS_NS2_PRIM_UNIT_DATA)
 		return -EINVAL;
 
 	if (!oph->msg)
@@ -448,9 +448,9 @@
 	if (!nsvc)
 		return 0;
 
-	if (nsp->u.unitdata.change == NS_ENDPOINT_REQUEST_CHANGE)
+	if (nsp->u.unitdata.change == GPRS_NS2_ENDPOINT_REQUEST_CHANGE)
 		sducontrol = 1;
-	else if (nsp->u.unitdata.change == NS_ENDPOINT_CONFIRM_CHANGE)
+	else if (nsp->u.unitdata.change == GPRS_NS2_ENDPOINT_CONFIRM_CHANGE)
 		sducontrol = 2;
 
 	return ns2_tx_unit_data(nsvc, bvci, sducontrol, oph->msg);
@@ -477,7 +477,7 @@
 	if (nsvc)
 		nsp.u.status.nsvc = gprs_ns2_ll_str_buf(nsvc_str, sizeof(nsvc_str), nsvc);
 
-	osmo_prim_init(&nsp.oph, SAP_NS, PRIM_NS_STATUS,
+	osmo_prim_init(&nsp.oph, SAP_NS, GPRS_NS2_PRIM_STATUS,
 			PRIM_OP_INDICATION, NULL);
 	nse->nsi->cb(&nsp.oph, nse->nsi->cb_data);
 }
@@ -539,7 +539,7 @@
 	if (!nsvc)
 		return;
 
-	ns2_prim_status_ind(nsvc->nse, nsvc, 0, NS_AFF_CAUSE_VC_FAILURE);
+	ns2_prim_status_ind(nsvc->nse, nsvc, 0, GPRS_NS2_AFF_CAUSE_VC_FAILURE);
 
 	llist_del(&nsvc->list);
 	llist_del(&nsvc->blist);
@@ -703,7 +703,7 @@
 	if (!nse)
 		return NULL;
 
-	if (dialect == NS2_DIALECT_SNS) {
+	if (dialect == GPRS_NS2_DIALECT_SNS) {
 		snprintf(sns, sizeof(sns), "NSE%05u-SNS", nsei);
 		nse->bss_sns_fi = ns2_sns_bss_fsm_alloc(nse, sns);
 		if (!nse->bss_sns_fi) {
@@ -741,7 +741,7 @@
 
 	nse->alive = false;
 	gprs_ns2_free_nsvcs(nse);
-	ns2_prim_status_ind(nse, NULL, 0, NS_AFF_CAUSE_FAILURE);
+	ns2_prim_status_ind(nse, NULL, 0, GPRS_NS2_AFF_CAUSE_FAILURE);
 
 	llist_del(&nse->list);
 	if (nse->bss_sns_fi)
@@ -828,7 +828,7 @@
 	case NS_PDUT_RESET:
 		/* accept PDU RESET when vc_mode matches */
 		if (bind->accept_ipaccess) {
-			dialect = NS2_DIALECT_IPACCESS;
+			dialect = GPRS_NS2_DIALECT_IPACCESS;
 			break;
 		}
 
@@ -871,7 +871,7 @@
 	nse = gprs_ns2_nse_by_nsei(bind->nsi, nsei);
 	if (!nse) {
 		/* only create nse for udp & ipaccess */
-		if (bind->ll != GPRS_NS2_LL_UDP || dialect != NS2_DIALECT_IPACCESS)
+		if (bind->ll != GPRS_NS2_LL_UDP || dialect != GPRS_NS2_DIALECT_IPACCESS)
 			return NS2_CS_SKIPPED;
 
 		if (!bind->nsi->create_nse || !bind->accept_ipaccess)
@@ -942,7 +942,7 @@
 	if (!nsvc)
 		return NULL;
 
-	if (nsvc->mode == NS2_VC_MODE_BLOCKRESET) {
+	if (nsvc->mode == GPRS_NS2_VC_MODE_BLOCKRESET) {
 		nsvc->nsvci = nsvci;
 		nsvc->nsvci_is_valid = true;
 	}
@@ -1151,7 +1151,7 @@
 	/* wait until both data_weight and sig_weight are != 0 before declaring NSE as alive */
 	if (unblocked && nse->sum_data_weight && nse->sum_sig_weight) {
 		nse->alive = true;
-		ns2_prim_status_ind(nse, NULL, 0, NS_AFF_CAUSE_RECOVERY);
+		ns2_prim_status_ind(nse, NULL, 0, GPRS_NS2_AFF_CAUSE_RECOVERY);
 		nse->first = false;
 		return;
 	}
@@ -1159,7 +1159,7 @@
 	if (nse->alive && (nse->sum_data_weight == 0 || nse->sum_sig_weight == 0)) {
 		/* nse became unavailable */
 		nse->alive = false;
-		ns2_prim_status_ind(nse, NULL, 0, NS_AFF_CAUSE_FAILURE);
+		ns2_prim_status_ind(nse, NULL, 0, GPRS_NS2_AFF_CAUSE_FAILURE);
 	}
 }
 
@@ -1284,12 +1284,12 @@
 enum gprs_ns2_vc_mode ns2_dialect_to_vc_mode(enum gprs_ns2_dialect dialect)
 {
 	switch (dialect) {
-	case NS2_DIALECT_SNS:
-	case NS2_DIALECT_STATIC_ALIVE:
-		return NS2_VC_MODE_ALIVE;
-	case NS2_DIALECT_STATIC_RESETBLOCK:
-	case NS2_DIALECT_IPACCESS:
-		return NS2_VC_MODE_BLOCKRESET;
+	case GPRS_NS2_DIALECT_SNS:
+	case GPRS_NS2_DIALECT_STATIC_ALIVE:
+		return GPRS_NS2_VC_MODE_ALIVE;
+	case GPRS_NS2_DIALECT_STATIC_RESETBLOCK:
+	case GPRS_NS2_DIALECT_IPACCESS:
+		return GPRS_NS2_VC_MODE_BLOCKRESET;
 	default:
 		return -1;
 	}
diff --git a/src/gb/gprs_ns2_fr.c b/src/gb/gprs_ns2_fr.c
index 8ad44ac..1c88db6 100644
--- a/src/gb/gprs_ns2_fr.c
+++ b/src/gb/gprs_ns2_fr.c
@@ -751,7 +751,7 @@
 
 	snprintf(idbuf, sizeof(idbuf), "%s-%s-DLCI%u-NSE%05u-NSVC%05u", gprs_ns2_lltype_str(nse->ll),
 		 bpriv->netif, dlci, nse->nsei, nsvci);
-	nsvc = ns2_vc_alloc(bind, nse, true, NS2_VC_MODE_BLOCKRESET, idbuf);
+	nsvc = ns2_vc_alloc(bind, nse, true, GPRS_NS2_VC_MODE_BLOCKRESET, idbuf);
 	if (!nsvc)
 		goto err;
 
@@ -789,7 +789,7 @@
 	OSMO_ASSERT(gprs_ns2_is_fr_bind(bind));
 	nse = gprs_ns2_nse_by_nsei(bind->nsi, nsei);
 	if (!nse) {
-		nse = gprs_ns2_create_nse(bind->nsi, nsei, GPRS_NS2_LL_FR, NS2_DIALECT_STATIC_RESETBLOCK);
+		nse = gprs_ns2_create_nse(bind->nsi, nsei, GPRS_NS2_LL_FR, GPRS_NS2_DIALECT_STATIC_RESETBLOCK);
 		if (!nse)
 			return NULL;
 		created_nse = true;
diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c
index 2dc6524..427a153 100644
--- a/src/gb/gprs_ns2_sns.c
+++ b/src/gb/gprs_ns2_sns.c
@@ -713,7 +713,7 @@
 
 	/* on a generic failure, the timer callback will recover */
 	if (old_state != GPRS_SNS_ST_UNCONFIGURED)
-		ns2_prim_status_ind(gss->nse, NULL, 0, NS_AFF_CAUSE_SNS_FAILURE);
+		ns2_prim_status_ind(gss->nse, NULL, 0, GPRS_NS2_AFF_CAUSE_SNS_FAILURE);
 
 	ns2_clear_ipv46_entries(gss);
 
@@ -1265,7 +1265,7 @@
 static void ns2_sns_st_configured_onenter(struct osmo_fsm_inst *fi, uint32_t old_state)
 {
 	struct gprs_ns2_nse *nse = nse_inst_from_fi(fi);
-	ns2_prim_status_ind(nse, NULL, 0, NS_AFF_CAUSE_SNS_CONFIGURED);
+	ns2_prim_status_ind(nse, NULL, 0, GPRS_NS2_AFF_CAUSE_SNS_CONFIGURED);
 }
 
 static const struct osmo_fsm_state ns2_sns_bss_states[] = {
@@ -1369,7 +1369,7 @@
 		/* Choose the next sns endpoint. */
 		if (llist_empty(&gss->sns_endpoints)) {
 			gss->initial = NULL;
-			ns2_prim_status_ind(gss->nse, NULL, 0, NS_AFF_CAUSE_SNS_NO_ENDPOINTS);
+			ns2_prim_status_ind(gss->nse, NULL, 0, GPRS_NS2_AFF_CAUSE_SNS_NO_ENDPOINTS);
 			osmo_fsm_inst_state_chg(fi, GPRS_SNS_ST_UNCONFIGURED, 0, 3);
 			return;
 		} else if (!gss->initial) {
@@ -1606,7 +1606,7 @@
 		return -EINVAL;
 	}
 
-	if (nse->dialect != NS2_DIALECT_SNS) {
+	if (nse->dialect != GPRS_NS2_DIALECT_SNS) {
 		return -EINVAL;
 	}
 
@@ -1645,7 +1645,7 @@
 		return -EINVAL;
 	}
 
-	if (nse->dialect != NS2_DIALECT_SNS) {
+	if (nse->dialect != GPRS_NS2_DIALECT_SNS) {
 		return -EINVAL;
 	}
 
@@ -1698,7 +1698,7 @@
 		return -EINVAL;
 	}
 
-	if (nse->dialect != NS2_DIALECT_SNS) {
+	if (nse->dialect != GPRS_NS2_DIALECT_SNS) {
 		return -EINVAL;
 	}
 
diff --git a/src/gb/gprs_ns2_udp.c b/src/gb/gprs_ns2_udp.c
index e1ffad6..43ece13 100644
--- a/src/gb/gprs_ns2_udp.c
+++ b/src/gb/gprs_ns2_udp.c
@@ -488,7 +488,7 @@
 	if (osmo_sockaddr_cmp(remote, &vpriv->remote))
 		return false;
 
-	if (nsvc->mode == NS2_VC_MODE_BLOCKRESET)
+	if (nsvc->mode == GPRS_NS2_VC_MODE_BLOCKRESET)
 		if (nsvc->nsvci != nsvci)
 			return false;
 
diff --git a/src/gb/gprs_ns2_vc_fsm.c b/src/gb/gprs_ns2_vc_fsm.c
index 7ee29a1..457a41f 100644
--- a/src/gb/gprs_ns2_vc_fsm.c
+++ b/src/gb/gprs_ns2_vc_fsm.c
@@ -212,7 +212,7 @@
 			osmo_timer_schedule(&priv->alive.timer, nsi->timeout[NS_TOUT_TNS_ALIVE], 0);
 		} else {
 			/* lost connection */
-			if (priv->nsvc->mode == NS2_VC_MODE_BLOCKRESET) {
+			if (priv->nsvc->mode == GPRS_NS2_VC_MODE_BLOCKRESET) {
 				osmo_fsm_inst_state_chg(fi, GPRS_NS2_ST_RESET, nsi->timeout[NS_TOUT_TNS_RESET], 0);
 			} else {
 				osmo_fsm_inst_state_chg(fi, GPRS_NS2_ST_ALIVE, nsi->timeout[NS_TOUT_TNS_ALIVE], 0);
@@ -235,10 +235,10 @@
 	switch (event) {
 	case GPRS_NS2_EV_REQ_START:
 		switch (priv->nsvc->mode) {
-		case NS2_VC_MODE_ALIVE:
+		case GPRS_NS2_VC_MODE_ALIVE:
 			osmo_fsm_inst_state_chg(fi, GPRS_NS2_ST_ALIVE, nsi->timeout[NS_TOUT_TNS_ALIVE], NS_TOUT_TNS_ALIVE);
 			break;
-		case NS2_VC_MODE_BLOCKRESET:
+		case GPRS_NS2_VC_MODE_BLOCKRESET:
 			osmo_fsm_inst_state_chg(fi, GPRS_NS2_ST_RESET, nsi->timeout[NS_TOUT_TNS_RESET], NS_TOUT_TNS_RESET);
 			break;
 		}
@@ -372,7 +372,7 @@
 
 	priv->accept_unitdata = true;
 	ns2_nse_notify_unblocked(nsvc, true);
-	ns2_prim_status_ind(nse, nsvc, 0, NS_AFF_CAUSE_VC_RECOVERY);
+	ns2_prim_status_ind(nse, nsvc, 0, GPRS_NS2_AFF_CAUSE_VC_RECOVERY);
 }
 
 static void ns2_st_unblocked(struct osmo_fsm_inst *fi, uint32_t event, void *data)
@@ -551,9 +551,9 @@
 
 	/* 10.3.9 NS SDU Control Bits */
 	if (nsh->data[0] & 0x1)
-		nsp.u.unitdata.change = NS_ENDPOINT_REQUEST_CHANGE;
+		nsp.u.unitdata.change = GPRS_NS2_ENDPOINT_REQUEST_CHANGE;
 
-	osmo_prim_init(&nsp.oph, SAP_NS, PRIM_NS_UNIT_DATA,
+	osmo_prim_init(&nsp.oph, SAP_NS, GPRS_NS2_PRIM_UNIT_DATA,
 			PRIM_OP_INDICATION, msg);
 	nsi->cb(&nsp.oph, nsi->cb_data);
 }
@@ -568,7 +568,7 @@
 
 	switch (event) {
 	case GPRS_NS2_EV_RX_RESET:
-		if (priv->nsvc->mode != NS2_VC_MODE_BLOCKRESET)
+		if (priv->nsvc->mode != GPRS_NS2_VC_MODE_BLOCKRESET)
 			break;
 
 		/* move the FSM into reset */
diff --git a/src/gb/gprs_ns2_vty.c b/src/gb/gprs_ns2_vty.c
index d6674ff..f803655 100644
--- a/src/gb/gprs_ns2_vty.c
+++ b/src/gb/gprs_ns2_vty.c
@@ -212,7 +212,7 @@
 			priv.dscp, VTY_NEWLINE);
 
 	vty_out(vty, " encapsulation udp use-reset-block-unblock %s%s",
-		priv.vc_mode == NS2_VC_MODE_BLOCKRESET ? "enabled" : "disabled", VTY_NEWLINE);
+		priv.vc_mode == GPRS_NS2_VC_MODE_BLOCKRESET ? "enabled" : "disabled", VTY_NEWLINE);
 
 	llist_for_each_entry(vtyvc, &priv.vtyvc, list) {
 		vty_out(vty, " nse %u nsvci %u%s",
@@ -440,7 +440,7 @@
 		return CMD_WARNING;
 	}
 
-	if (nse->dialect == NS2_DIALECT_SNS) {
+	if (nse->dialect == GPRS_NS2_DIALECT_SNS) {
 		gprs_ns2_free_nsvcs(nse);
 	} else {
 		/* Perform the operation for all nsvc */
@@ -718,9 +718,9 @@
 	enum gprs_ns2_vc_mode vc_mode;
 
 	if (!strcmp(argv[0], "enabled"))
-		vc_mode = NS2_VC_MODE_BLOCKRESET;
+		vc_mode = GPRS_NS2_VC_MODE_BLOCKRESET;
 	else
-		vc_mode = NS2_VC_MODE_ALIVE;
+		vc_mode = GPRS_NS2_VC_MODE_ALIVE;
 
 	priv.vc_mode = vc_mode;
 
@@ -831,7 +831,7 @@
 	vty_nsi = nsi;
 	memset(&priv, 0, sizeof(struct ns2_vty_priv));
 	INIT_LLIST_HEAD(&priv.vtyvc);
-	priv.vc_mode = NS2_VC_MODE_BLOCKRESET;
+	priv.vc_mode = GPRS_NS2_VC_MODE_BLOCKRESET;
 	if (default_bind)
 		memcpy(&priv.udp, default_bind, sizeof(*default_bind));
 
@@ -888,7 +888,7 @@
 	struct gprs_ns2_nse *nse;
 	struct gprs_ns2_vc *nsvc;
 	struct osmo_sockaddr sockaddr;
-	enum gprs_ns2_dialect dialect = NS2_DIALECT_UNDEF;
+	enum gprs_ns2_dialect dialect = GPRS_NS2_DIALECT_UNDEF;
 	int rc = 0;
 
 	if (!vty_nsi)
@@ -906,7 +906,7 @@
 			return -1;
 		}
 
-		bind->accept_ipaccess = priv.vc_mode == NS2_VC_MODE_BLOCKRESET;
+		bind->accept_ipaccess = priv.vc_mode == GPRS_NS2_VC_MODE_BLOCKRESET;
 	}
 
 	/* create vcs */
@@ -914,10 +914,10 @@
 		/* validate settings */
 		switch (vtyvc->ll) {
 		case GPRS_NS2_LL_UDP:
-			if (priv.vc_mode == NS2_VC_MODE_BLOCKRESET)
-				dialect = NS2_DIALECT_IPACCESS;
+			if (priv.vc_mode == GPRS_NS2_VC_MODE_BLOCKRESET)
+				dialect = GPRS_NS2_DIALECT_IPACCESS;
 			else
-				dialect = NS2_DIALECT_STATIC_ALIVE;
+				dialect = GPRS_NS2_DIALECT_STATIC_ALIVE;
 			if (strlen(vtyvc->remote.ip) == 0) {
 				/* Invalid IP for VC */
 				continue;
@@ -934,10 +934,10 @@
 			}
 			break;
 		case GPRS_NS2_LL_FR:
-			dialect = NS2_DIALECT_STATIC_RESETBLOCK;
+			dialect = GPRS_NS2_DIALECT_STATIC_RESETBLOCK;
 			break;
 		case GPRS_NS2_LL_FR_GRE:
-			dialect = NS2_DIALECT_STATIC_RESETBLOCK;
+			dialect = GPRS_NS2_DIALECT_STATIC_RESETBLOCK;
 			continue;
 		case GPRS_NS2_LL_UNDEF:
 			/* should not happen */
diff --git a/src/gb/gprs_ns2_vty2.c b/src/gb/gprs_ns2_vty2.c
index 43dd263..31aff3e 100644
--- a/src/gb/gprs_ns2_vty2.c
+++ b/src/gb/gprs_ns2_vty2.c
@@ -171,7 +171,7 @@
 
 	nse = gprs_ns2_nse_by_nsei(vty_nsi, nsei);
 	if (!nse) {
-		nse = gprs_ns2_create_nse(vty_nsi, nsei, GPRS_NS2_LL_UNDEF, NS2_DIALECT_UNDEF);
+		nse = gprs_ns2_create_nse(vty_nsi, nsei, GPRS_NS2_LL_UNDEF, GPRS_NS2_DIALECT_UNDEF);
 		if (!nse) {
 			vty_out(vty, "Failed to create NSE!%s", VTY_NEWLINE);
 			return CMD_ERR_INCOMPLETE;
@@ -345,7 +345,7 @@
 		break;
 	case GPRS_NS2_LL_UDP:
 		switch (nsvc->nse->dialect) {
-		case NS2_DIALECT_IPACCESS:
+		case GPRS_NS2_DIALECT_IPACCESS:
 			addr = gprs_ns2_ip_vc_remote(nsvc);
 			if (!addr)
 				break;
@@ -355,7 +355,7 @@
 				nsvc->bind->name, addr_str.ip, addr_str.port,
 				nsvc->nsvci, VTY_NEWLINE);
 			break;
-		case NS2_DIALECT_STATIC_ALIVE:
+		case GPRS_NS2_DIALECT_STATIC_ALIVE:
 			addr = gprs_ns2_ip_vc_remote(nsvc);
 			if (!addr)
 				break;
@@ -390,7 +390,7 @@
 
 	vty_out(vty, " nse %u%s", nse->nsei, VTY_NEWLINE);
 	switch (nse->dialect) {
-	case NS2_DIALECT_SNS:
+	case GPRS_NS2_DIALECT_SNS:
 		ns2_sns_write_vty(vty, nse);
 		break;
 	default:
@@ -709,7 +709,7 @@
 		goto err;
 	}
 
-	if (nse->dialect != NS2_DIALECT_STATIC_RESETBLOCK && nse->dialect != NS2_DIALECT_UNDEF) {
+	if (nse->dialect != GPRS_NS2_DIALECT_STATIC_RESETBLOCK && nse->dialect != GPRS_NS2_DIALECT_UNDEF) {
 		vty_out(vty, "Can not mix NS-VC with different dialects%s", VTY_NEWLINE);
 		goto err;
 	}
@@ -719,8 +719,8 @@
 		ll_modified = true;
 	}
 
-	if (nse->dialect == NS2_DIALECT_UNDEF) {
-		nse->dialect = NS2_DIALECT_STATIC_RESETBLOCK;
+	if (nse->dialect == GPRS_NS2_DIALECT_UNDEF) {
+		nse->dialect = GPRS_NS2_DIALECT_STATIC_RESETBLOCK;
 		dialect_modified = true;
 	}
 
@@ -755,7 +755,7 @@
 	if (ll_modified)
 		nse->ll = GPRS_NS2_LL_UNDEF;
 	if (dialect_modified)
-		nse->dialect = NS2_DIALECT_UNDEF;
+		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
 
 	return CMD_WARNING;
 }
@@ -806,7 +806,7 @@
 	gprs_ns2_free_nsvc(nsvc);
 	if (llist_empty(&nse->nsvc)) {
 		nse->ll = GPRS_NS2_LL_UNDEF;
-		nse->dialect = NS2_DIALECT_UNDEF;
+		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
 	}
 
 	return CMD_SUCCESS;
@@ -825,15 +825,15 @@
 	uint16_t nsvci = atoi(argv[0]);
 
 	switch (nse->dialect) {
-	case NS2_DIALECT_SNS:
-	case NS2_DIALECT_STATIC_ALIVE:
+	case GPRS_NS2_DIALECT_SNS:
+	case GPRS_NS2_DIALECT_STATIC_ALIVE:
 		vty_out(vty, "NSE doesn't support NSVCI.%s", VTY_NEWLINE);
 		return CMD_WARNING;
-	case NS2_DIALECT_UNDEF:
+	case GPRS_NS2_DIALECT_UNDEF:
 		vty_out(vty, "No NSVCs configured%s", VTY_NEWLINE);
 		return CMD_WARNING;
-	case NS2_DIALECT_IPACCESS:
-	case NS2_DIALECT_STATIC_RESETBLOCK:
+	case GPRS_NS2_DIALECT_IPACCESS:
+	case GPRS_NS2_DIALECT_STATIC_RESETBLOCK:
 		break;
 	}
 
@@ -852,7 +852,7 @@
 	gprs_ns2_free_nsvc(nsvc);
 	if (llist_empty(&nse->nsvc)) {
 		nse->ll = GPRS_NS2_LL_UNDEF;
-		nse->dialect = NS2_DIALECT_UNDEF;
+		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
 	}
 
 	return CMD_SUCCESS;
@@ -883,8 +883,8 @@
 		ll_modified = true;
 	}
 
-	if (nse->dialect == NS2_DIALECT_UNDEF) {
-		nse->dialect = NS2_DIALECT_STATIC_ALIVE;
+	if (nse->dialect == GPRS_NS2_DIALECT_UNDEF) {
+		nse->dialect = GPRS_NS2_DIALECT_STATIC_ALIVE;
 		dialect_modified = true;
 	}
 
@@ -893,7 +893,7 @@
 		goto err;
 	}
 
-	if (nse->dialect != NS2_DIALECT_STATIC_ALIVE) {
+	if (nse->dialect != GPRS_NS2_DIALECT_STATIC_ALIVE) {
 		vty_out(vty, "Can not mix NS-VC with different dialects%s", VTY_NEWLINE);
 		goto err;
 	}
@@ -934,7 +934,7 @@
 	if (ll_modified)
 		nse->ll = GPRS_NS2_LL_UNDEF;
 	if (dialect_modified)
-		nse->dialect = NS2_DIALECT_UNDEF;
+		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
 	return CMD_WARNING;
 }
 
@@ -961,7 +961,7 @@
 		return CMD_WARNING;
 	}
 
-	if (nse->dialect != NS2_DIALECT_STATIC_ALIVE) {
+	if (nse->dialect != GPRS_NS2_DIALECT_STATIC_ALIVE) {
 		vty_out(vty, "This NSE doesn't support UDP with dialect static alive.%s", VTY_NEWLINE);
 		return CMD_WARNING;
 	}
@@ -1010,7 +1010,7 @@
 	gprs_ns2_free_nsvc(nsvc);
 	if (llist_empty(&nse->nsvc)) {
 		nse->ll = GPRS_NS2_LL_UNDEF;
-		nse->dialect = NS2_DIALECT_UNDEF;
+		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
 	}
 
 	return CMD_SUCCESS;
@@ -1044,8 +1044,8 @@
 		ll_modified = true;
 	}
 
-	if (nse->dialect == NS2_DIALECT_UNDEF) {
-		nse->dialect = NS2_DIALECT_IPACCESS;
+	if (nse->dialect == GPRS_NS2_DIALECT_UNDEF) {
+		nse->dialect = GPRS_NS2_DIALECT_IPACCESS;
 		dialect_modified = true;
 	}
 
@@ -1054,7 +1054,7 @@
 		goto err;
 	}
 
-	if (nse->dialect != NS2_DIALECT_IPACCESS) {
+	if (nse->dialect != GPRS_NS2_DIALECT_IPACCESS) {
 		vty_out(vty, "Can not mix NS-VC with different dialects%s", VTY_NEWLINE);
 		goto err;
 	}
@@ -1095,7 +1095,7 @@
 	if (ll_modified)
 		nse->ll = GPRS_NS2_LL_UNDEF;
 	if (dialect_modified)
-		nse->dialect = NS2_DIALECT_UNDEF;
+		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
 	return CMD_WARNING;
 }
 
@@ -1125,7 +1125,7 @@
 		return CMD_WARNING;
 	}
 
-	if (nse->dialect != NS2_DIALECT_IPACCESS) {
+	if (nse->dialect != GPRS_NS2_DIALECT_IPACCESS) {
 		vty_out(vty, "This NSE doesn't support UDP with dialect ipaccess.%s", VTY_NEWLINE);
 		return CMD_WARNING;
 	}
@@ -1185,7 +1185,7 @@
 	gprs_ns2_free_nsvc(nsvc);
 	if (llist_empty(&nse->nsvc)) {
 		nse->ll = GPRS_NS2_LL_UNDEF;
-		nse->dialect = NS2_DIALECT_UNDEF;
+		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
 	}
 
 	return CMD_SUCCESS;
@@ -1213,13 +1213,13 @@
 		ll_modified = true;
 	}
 
-	if (nse->dialect == NS2_DIALECT_UNDEF) {
+	if (nse->dialect == GPRS_NS2_DIALECT_UNDEF) {
 		char sns[16];
 		snprintf(sns, sizeof(sns), "NSE%05u-SNS", nse->nsei);
 		nse->bss_sns_fi = ns2_sns_bss_fsm_alloc(nse, sns);
 		if (!nse->bss_sns_fi)
 			goto err;
-		nse->dialect = NS2_DIALECT_SNS;
+		nse->dialect = GPRS_NS2_DIALECT_SNS;
 		dialect_modified = true;
 	}
 
@@ -1228,7 +1228,7 @@
 		goto err;
 	}
 
-	if (nse->dialect != NS2_DIALECT_SNS) {
+	if (nse->dialect != GPRS_NS2_DIALECT_SNS) {
 		vty_out(vty, "Can not mix NS-VC with different dialects%s", VTY_NEWLINE);
 		goto err;
 	}
@@ -1259,7 +1259,7 @@
 	if (ll_modified)
 		nse->ll = GPRS_NS2_LL_UNDEF;
 	if (dialect_modified)
-		nse->dialect = NS2_DIALECT_UNDEF;
+		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
 	return CMD_WARNING;
 }
 
@@ -1282,7 +1282,7 @@
 		return CMD_WARNING;
 	}
 
-	if (nse->dialect != NS2_DIALECT_SNS) {
+	if (nse->dialect != GPRS_NS2_DIALECT_SNS) {
 		vty_out(vty, "This NSE doesn't support UDP with dialect ip-sns.%s", VTY_NEWLINE);
 		return CMD_WARNING;
 	}
@@ -1313,7 +1313,7 @@
 		osmo_fsm_inst_term(nse->bss_sns_fi, OSMO_FSM_TERM_REQUEST, NULL);
 		nse->bss_sns_fi = NULL;
 		nse->ll = GPRS_NS2_LL_UNDEF;
-		nse->dialect = NS2_DIALECT_UNDEF;
+		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
 	}
 
 	return CMD_SUCCESS;
@@ -1493,7 +1493,7 @@
 
 	if (!nse->persistent) {
 		gprs_ns2_free_nse(nse);
-	} else if (nse->dialect == NS2_DIALECT_SNS) {
+	} else if (nse->dialect == GPRS_NS2_DIALECT_SNS) {
 		gprs_ns2_free_nsvcs(nse);
 	} else {
 		/* Perform the operation for all nsvc */
diff --git a/tests/gb/gprs_ns2_test.c b/tests/gb/gprs_ns2_test.c
index 335a079..9e4e02f 100644
--- a/tests/gb/gprs_ns2_test.c
+++ b/tests/gb/gprs_ns2_test.c
@@ -45,7 +45,7 @@
 {
 	OSMO_ASSERT(oph->sap == SAP_NS);
 	if (oph->msg) {
-		if (oph->primitive == PRIM_NS_UNIT_DATA) {
+		if (oph->primitive == GPRS_NS2_PRIM_UNIT_DATA) {
 			osmo_wqueue_enqueue(unitdata, oph->msg);
 		} else {
 			msgb_free(oph->msg);
@@ -187,11 +187,11 @@
 	bind[0] = dummy_bind(nsi, "transfercap1");
 	bind[1] = dummy_bind(nsi, "transfercap2");
 	bind[1]->transfer_capability = 23;
-	nse = gprs_ns2_create_nse(nsi, 1001, GPRS_NS2_LL_UDP, NS2_DIALECT_STATIC_ALIVE);
+	nse = gprs_ns2_create_nse(nsi, 1001, GPRS_NS2_LL_UDP, GPRS_NS2_DIALECT_STATIC_ALIVE);
 	OSMO_ASSERT(nse);
 
 	printf("---- Test with NSVC[0]\n");
-	nsvc[0] = ns2_vc_alloc(bind[0], nse, false, NS2_VC_MODE_ALIVE, NULL);
+	nsvc[0] = ns2_vc_alloc(bind[0], nse, false, GPRS_NS2_VC_MODE_ALIVE, NULL);
 	OSMO_ASSERT(nsvc[0]);
 	OSMO_ASSERT(ns2_count_transfer_cap(nse, 0) == 0);
 	nsvc[0]->fi->state = 3;	/* HACK: 3 = GPRS_NS2_ST_UNBLOCKED */
@@ -199,7 +199,7 @@
 	OSMO_ASSERT(ns2_count_transfer_cap(nse, 0) == 42);
 
 	printf("---- Test with NSVC[1]\n");
-	nsvc[1] = ns2_vc_alloc(bind[0], nse, false, NS2_VC_MODE_ALIVE, NULL);
+	nsvc[1] = ns2_vc_alloc(bind[0], nse, false, GPRS_NS2_VC_MODE_ALIVE, NULL);
 	OSMO_ASSERT(nsvc[1]);
 	OSMO_ASSERT(ns2_count_transfer_cap(nse, 0) == 42);
 	nsvc[1]->fi->state = 3; /* HACK: 3 = GPRS_NS2_ST_UNBLOCKED */
@@ -207,7 +207,7 @@
 	OSMO_ASSERT(ns2_count_transfer_cap(nse, 0) == 42);
 
 	printf("---- Test with NSVC[2]\n");
-	nsvc[2] = ns2_vc_alloc(bind[1], nse, false, NS2_VC_MODE_ALIVE, NULL);
+	nsvc[2] = ns2_vc_alloc(bind[1], nse, false, GPRS_NS2_VC_MODE_ALIVE, NULL);
 	OSMO_ASSERT(nsvc[2]);
 	OSMO_ASSERT(ns2_count_transfer_cap(nse, 0) == 42);
 	nsvc[2]->fi->state = 3; /* HACK: 3 = GPRS_NS2_ST_UNBLOCKED */
@@ -244,13 +244,13 @@
 	nsi = gprs_ns2_instantiate(ctx, ns_prim_cb, NULL);
 	bind[0] = dummy_bind(nsi, "bblock1");
 	bind[1] = dummy_bind(nsi, "bblock2");
-	nse = gprs_ns2_create_nse(nsi, 1001, GPRS_NS2_LL_UDP, NS2_DIALECT_STATIC_RESETBLOCK);
+	nse = gprs_ns2_create_nse(nsi, 1001, GPRS_NS2_LL_UDP, GPRS_NS2_DIALECT_STATIC_RESETBLOCK);
 	OSMO_ASSERT(nse);
 
 	for (i=0; i<2; i++) {
 		printf("---- Create NSVC[i]\n");
 		snprintf(idbuf, sizeof(idbuf), "NSE%05u-dummy-%i", nse->nsei, i);
-		nsvc[i] = ns2_vc_alloc(bind[i], nse, false, NS2_VC_MODE_BLOCKRESET, idbuf);
+		nsvc[i] = ns2_vc_alloc(bind[i], nse, false, GPRS_NS2_VC_MODE_BLOCKRESET, idbuf);
 		OSMO_ASSERT(nsvc[i]);
 		nsvc[i]->fi->state = 3;	/* HACK: 3 = GPRS_NS2_ST_UNBLOCKED */
 		/* ensure the fi->state works correct */
@@ -321,13 +321,13 @@
 	bind[0] = dummy_bind(nsi, "bblock1");
 	bind[1] = dummy_bind(nsi, "bblock2");
 	loopbind = loopback_bind(nsi, "loopback");
-	nse = gprs_ns2_create_nse(nsi, 1004, GPRS_NS2_LL_UDP, NS2_DIALECT_STATIC_RESETBLOCK);
+	nse = gprs_ns2_create_nse(nsi, 1004, GPRS_NS2_LL_UDP, GPRS_NS2_DIALECT_STATIC_RESETBLOCK);
 	OSMO_ASSERT(nse);
 
 	for (i=0; i<2; i++) {
 		printf("---- Create NSVC[%d]\n", i);
 		snprintf(idbuf, sizeof(idbuf), "NSE%05u-dummy-%i", nse->nsei, i);
-		nsvc[i] = ns2_vc_alloc(bind[i], nse, false, NS2_VC_MODE_BLOCKRESET, idbuf);
+		nsvc[i] = ns2_vc_alloc(bind[i], nse, false, GPRS_NS2_VC_MODE_BLOCKRESET, idbuf);
 		loop[i] = loopback_nsvc(loopbind, nsvc[i]);
 		OSMO_ASSERT(nsvc[i]);
 		ns2_vc_fsm_start(nsvc[i]);
