diff --git a/src/nl.c b/src/nl.c
index 54395ce45552f1c0165b222f3528ad7e898df16d..9e3cdbb3d98472942c3e8a7f68479aba97164853 100644
--- a/src/nl.c
+++ b/src/nl.c
@@ -299,18 +299,26 @@ static void ts_set_iface_vlan(struct ts_context *ts, struct ts_iface *tsif)
 static void ts_set_system(struct ts_context *ts)
 {
 	char buf[16] = {0};
+	char cmd[128] = {0};
 	uint16_t vid;
 	int i;
 
 	if (ts->primary_vid == 0)
 		return;
 
+	strncpy(cmd, "/lib/wifi/multiap ts keep", sizeof(cmd));
+
 	for (i = 0; i < ts->num_vids; i++) {
 		vid = ts->all_vids[i];
 		warn("/lib/wifi/multiap ts create %u\n",vid);
 		Cmd(buf, sizeof(buf), "/lib/wifi/multiap ts create %u", vid);
+		snprintf(cmd + strlen(cmd),  sizeof(cmd) - strlen(cmd), " %hu", vid);
 	}
 
+	/* remove any stale vids from network config */
+	if (ts->num_vids)
+		Cmd(buf, sizeof(buf), cmd);
+
 	warn("/lib/wifi/multiap ts reload\n");
 	Cmd(buf, sizeof(buf), "/lib/wifi/multiap ts reload");
 }