diff --git a/src/gb/gprs_ns2_vty.c b/src/gb/gprs_ns2_vty.c
index 76e4434..a769ad1 100644
--- a/src/gb/gprs_ns2_vty.c
+++ b/src/gb/gprs_ns2_vty.c
@@ -900,7 +900,7 @@
 	}
 
 	if (nse->dialect == GPRS_NS2_DIALECT_UNDEF) {
-		nse->dialect = GPRS_NS2_DIALECT_STATIC_RESETBLOCK;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_STATIC_RESETBLOCK);
 		dialect_modified = true;
 	}
 
@@ -935,7 +935,7 @@
 	if (ll_modified)
 		nse->ll = GPRS_NS2_LL_UNDEF;
 	if (dialect_modified)
-		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_UNDEF);
 
 	return CMD_WARNING;
 }
@@ -986,7 +986,7 @@
 	gprs_ns2_free_nsvc(nsvc);
 	if (llist_empty(&nse->nsvc)) {
 		nse->ll = GPRS_NS2_LL_UNDEF;
-		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_UNDEF);
 	}
 
 	return CMD_SUCCESS;
@@ -1032,7 +1032,7 @@
 	gprs_ns2_free_nsvc(nsvc);
 	if (llist_empty(&nse->nsvc)) {
 		nse->ll = GPRS_NS2_LL_UNDEF;
-		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_UNDEF);
 	}
 
 	return CMD_SUCCESS;
@@ -1056,7 +1056,7 @@
 	}
 
 	if (nse->dialect == GPRS_NS2_DIALECT_UNDEF) {
-		nse->dialect = GPRS_NS2_DIALECT_STATIC_ALIVE;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_STATIC_ALIVE);
 		dialect_modified = true;
 	}
 
@@ -1117,7 +1117,7 @@
 	if (ll_modified)
 		nse->ll = GPRS_NS2_LL_UNDEF;
 	if (dialect_modified)
-		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_UNDEF);
 	return CMD_WARNING;
 }
 
@@ -1232,7 +1232,7 @@
 	gprs_ns2_free_nsvc(nsvc);
 	if (llist_empty(&nse->nsvc)) {
 		nse->ll = GPRS_NS2_LL_UNDEF;
-		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_UNDEF);
 	}
 
 	return CMD_SUCCESS;
@@ -1267,7 +1267,7 @@
 	}
 
 	if (nse->dialect == GPRS_NS2_DIALECT_UNDEF) {
-		nse->dialect = GPRS_NS2_DIALECT_IPACCESS;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_IPACCESS);
 		dialect_modified = true;
 	}
 
@@ -1317,7 +1317,7 @@
 	if (ll_modified)
 		nse->ll = GPRS_NS2_LL_UNDEF;
 	if (dialect_modified)
-		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_UNDEF);
 	return CMD_WARNING;
 }
 
@@ -1407,7 +1407,7 @@
 	gprs_ns2_free_nsvc(nsvc);
 	if (llist_empty(&nse->nsvc)) {
 		nse->ll = GPRS_NS2_LL_UNDEF;
-		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_UNDEF);
 	}
 
 	return CMD_SUCCESS;
@@ -1436,12 +1436,8 @@
 	}
 
 	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)
+		if (ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_SNS) < 0)
 			goto err;
-		nse->dialect = GPRS_NS2_DIALECT_SNS;
 		dialect_modified = true;
 	}
 
@@ -1481,7 +1477,7 @@
 	if (ll_modified)
 		nse->ll = GPRS_NS2_LL_UNDEF;
 	if (dialect_modified)
-		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_UNDEF);
 	return CMD_WARNING;
 }
 
@@ -1528,10 +1524,8 @@
 		return CMD_SUCCESS;
 	} else {
 		/* clean up nse to allow other nsvc commands */
-		osmo_fsm_inst_term(nse->bss_sns_fi, OSMO_FSM_TERM_REQUEST, NULL);
-		nse->bss_sns_fi = NULL;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_UNDEF);
 		nse->ll = GPRS_NS2_LL_UNDEF;
-		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
 	}
 
 	return CMD_SUCCESS;
@@ -1557,12 +1551,8 @@
 	}
 
 	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)
+		if (ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_SNS) < 0)
 			goto err;
-		nse->dialect = GPRS_NS2_DIALECT_SNS;
 		dialect_modified = true;
 	}
 
@@ -1632,7 +1622,7 @@
 	if (ll_modified)
 		nse->ll = GPRS_NS2_LL_UNDEF;
 	if (dialect_modified)
-		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_UNDEF);
 
 	return CMD_WARNING;
 }
@@ -1698,10 +1688,8 @@
 
 	if (!vty_nse_check_sns(nse)) {
 		/* clean up nse to allow other nsvc commands */
-		osmo_fsm_inst_term(nse->bss_sns_fi, OSMO_FSM_TERM_REQUEST, NULL);
-		nse->bss_sns_fi = NULL;
+		ns2_nse_set_dialect(nse, GPRS_NS2_DIALECT_UNDEF);
 		nse->ll = GPRS_NS2_LL_UNDEF;
-		nse->dialect = GPRS_NS2_DIALECT_UNDEF;
 	}
 
 	return CMD_SUCCESS;
