diff --git a/openbsc/include/vty/command.h b/openbsc/include/vty/command.h
index f536f2e..1be05aa 100644
--- a/openbsc/include/vty/command.h
+++ b/openbsc/include/vty/command.h
@@ -61,6 +61,7 @@
 
 /* There are some command levels which called from command node. */
 enum node_type {
+	GSMNET_NODE,
 	BTS_NODE,
 	TRX_NODE,
 	TS_NODE,
diff --git a/openbsc/include/vty/vty.h b/openbsc/include/vty/vty.h
index d43d992..4a1a6ff 100644
--- a/openbsc/include/vty/vty.h
+++ b/openbsc/include/vty/vty.h
@@ -129,6 +129,7 @@
 
 /* Prototypes. */
 void vty_init (void);
+int vty_read_config_file(const char *file_name);
 void vty_init_vtysh (void);
 void vty_reset (void);
 struct vty *vty_new (void);
@@ -136,8 +137,7 @@
 int vty_out (struct vty *, const char *, ...) PRINTF_ATTRIBUTE(2, 3);
 int vty_out_newline(struct vty *);
 int vty_read(struct vty *vty);
-void vty_read_config (char *, char *);
-void vty_time_print (struct vty *, int);
+//void vty_time_print (struct vty *, int);
 void vty_close (struct vty *);
 char *vty_get_cwd (void);
 void vty_log (const char *level, const char *proto, const char *fmt, va_list);
@@ -147,5 +147,5 @@
 int vty_shell_serv (struct vty *);
 void vty_hello (struct vty *);
 
-
+void *tall_vty_ctx;
 #endif
diff --git a/openbsc/src/openbsc.cfg.1-1 b/openbsc/src/openbsc.cfg.1-1
new file mode 100644
index 0000000..acd6681
--- /dev/null
+++ b/openbsc/src/openbsc.cfg.1-1
@@ -0,0 +1,51 @@
+!
+! OpenBSC configuration saved from vty
+!   !
+password foo
+!
+line vty
+ no login
+!
+network
+ network country code 1
+ mobile network code 1
+ short name OpenBSC
+ long name OpenBSC
+ bts 0
+  type bs11
+  band GSM900
+  location_area_code 1
+  training_sequence_code 7
+  base_station_id_code 63
+  oml e1 line 0 timeslot 1 sub-slot full
+  oml e1 tei 25
+  trx 0
+   arfcn 121
+   max_power_red 0
+   rsl e1 line 0 timeslot 1 sub-slot full
+   rsl e1 tei 1
+    timeslot 0
+     phys_chan_config CCCH+SDCCH4
+     e1 line 0 timeslot 1 sub-slot full
+    timeslot 1
+     phys_chan_config SDCCH8
+     e1 line 0 timeslot 2 sub-slot 1
+    timeslot 2
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 2 sub-slot 2
+    timeslot 3
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 2 sub-slot 3
+    timeslot 4
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 0
+    timeslot 5
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 1
+    timeslot 6
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 2
+    timeslot 7
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 3
+
diff --git a/openbsc/src/openbsc.cfg.1-2 b/openbsc/src/openbsc.cfg.1-2
new file mode 100644
index 0000000..6bb6522
--- /dev/null
+++ b/openbsc/src/openbsc.cfg.1-2
@@ -0,0 +1,79 @@
+!
+! OpenBSC configuration saved from vty
+!   !
+password foo
+!
+line vty
+ no login
+!
+network
+ network country code 1
+ mobile network code 1
+ short name OpenBSC
+ long name OpenBSC
+ bts 0
+  type bs11
+  band GSM900
+  location_area_code 1
+  training_sequence_code 7
+  base_station_id_code 63
+  oml e1 line 0 timeslot 1 sub-slot full
+  oml e1 tei 25
+  trx 0
+   arfcn 121
+   max_power_red 0
+   rsl e1 line 0 timeslot 1 sub-slot full
+   rsl e1 tei 1
+    timeslot 0
+     phys_chan_config CCCH+SDCCH4
+     e1 line 0 timeslot 1 sub-slot full
+    timeslot 1
+     phys_chan_config SDCCH8
+     e1 line 0 timeslot 2 sub-slot 1
+    timeslot 2
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 2 sub-slot 2
+    timeslot 3
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 2 sub-slot 3
+    timeslot 4
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 0
+    timeslot 5
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 1
+    timeslot 6
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 2
+    timeslot 7
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 3
+  trx 1
+   arfcn 123
+   max_power_red 0
+   rsl e1 line 0 timeslot 1 sub-slot full
+   rsl e1 tei 2
+    timeslot 0
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 4 sub-slot 0
+    timeslot 1
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 4 sub-slot 1
+    timeslot 2
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 4 sub-slot 2
+    timeslot 3
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 4 sub-slot 3
+    timeslot 4
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 5 sub-slot 0
+    timeslot 5
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 5 sub-slot 1
+    timeslot 6
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 5 sub-slot 2
+    timeslot 7
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 5 sub-slot 3
diff --git a/openbsc/src/openbsc.cfg.2-2 b/openbsc/src/openbsc.cfg.2-2
new file mode 100644
index 0000000..461f8e9
--- /dev/null
+++ b/openbsc/src/openbsc.cfg.2-2
@@ -0,0 +1,145 @@
+!
+! OpenBSC configuration saved from vty
+!   !
+password foo
+!
+line vty
+ no login
+!
+network
+ network country code 1
+ mobile network code 1
+ short name OpenBSC
+ long name OpenBSC
+ bts 0
+  type bs11
+  band GSM900
+  location_area_code 1
+  training_sequence_code 7
+  base_station_id_code 63
+  oml e1 line 0 timeslot 1 sub-slot full
+  oml e1 tei 25
+  trx 0
+   arfcn 121
+   max_power_red 0
+   rsl e1 line 0 timeslot 1 sub-slot full
+   rsl e1 tei 1
+    timeslot 0
+     phys_chan_config CCCH+SDCCH4
+     e1 line 0 timeslot 1 sub-slot full
+    timeslot 1
+     phys_chan_config SDCCH8
+     e1 line 0 timeslot 2 sub-slot 1
+    timeslot 2
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 2 sub-slot 2
+    timeslot 3
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 2 sub-slot 3
+    timeslot 4
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 0
+    timeslot 5
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 1
+    timeslot 6
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 2
+    timeslot 7
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 3 sub-slot 3
+  trx 1
+   arfcn 123
+   max_power_red 0
+   rsl e1 line 0 timeslot 1 sub-slot full
+   rsl e1 tei 2
+    timeslot 0
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 4 sub-slot 0
+    timeslot 1
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 4 sub-slot 1
+    timeslot 2
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 4 sub-slot 2
+    timeslot 3
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 4 sub-slot 3
+    timeslot 4
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 5 sub-slot 0
+    timeslot 5
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 5 sub-slot 1
+    timeslot 6
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 5 sub-slot 2
+    timeslot 7
+     phys_chan_config TCH/F
+     e1 line 0 timeslot 5 sub-slot 3
+ bts 1
+  type bs11
+  band GSM900
+  location_area_code 2
+  training_sequence_code 7
+  base_station_id_code 63
+  oml e1 line 1 timeslot 6 sub-slot full
+  oml e1 tei 25
+  trx 0
+   arfcn 122
+   max_power_red 0
+   rsl e1 line 1 timeslot 6 sub-slot full
+   rsl e1 tei 1
+    timeslot 0
+     phys_chan_config CCCH+SDCCH4
+     e1 line 1 timeslot 7 sub-slot 0
+    timeslot 1
+     phys_chan_config SDCCH8
+     e1 line 1 timeslot 7 sub-slot 1
+    timeslot 2
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 7 sub-slot 2
+    timeslot 3
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 7 sub-slot 3
+    timeslot 4
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 8 sub-slot 0
+    timeslot 5
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 8 sub-slot 1
+    timeslot 6
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 8 sub-slot 2
+    timeslot 7
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 8 sub-slot 3
+  trx 1
+   arfcn 124
+   max_power_red 0
+   rsl e1 line 1 timeslot 6 sub-slot full
+   rsl e1 tei 2
+    timeslot 0
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 9 sub-slot 0
+    timeslot 1
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 9 sub-slot 1
+    timeslot 2
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 9 sub-slot 2
+    timeslot 3
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 9 sub-slot 3
+    timeslot 4
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 10 sub-slot 0
+    timeslot 5
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 10 sub-slot 1
+    timeslot 6
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 10 sub-slot 2
+    timeslot 7
+     phys_chan_config TCH/F
+     e1 line 1 timeslot 10 sub-slot 3
diff --git a/openbsc/src/vty/buffer.c b/openbsc/src/vty/buffer.c
index be6623d..8ab7311 100644
--- a/openbsc/src/vty/buffer.c
+++ b/openbsc/src/vty/buffer.c
@@ -32,8 +32,6 @@
 #include <vty/buffer.h>
 #include <vty/vty.h>
 
-static void *tall_vbuf_ctx;
-
 /* Buffer master. */
 struct buffer {
 	/* Data list. */
@@ -71,7 +69,7 @@
 {
 	struct buffer *b;
 
-	b = talloc_zero(tall_vbuf_ctx, struct buffer);
+	b = talloc_zero(tall_vty_ctx, struct buffer);
 
 	if (size)
 		b->size = size;
@@ -105,7 +103,7 @@
 
 	for (data = b->head; data; data = data->next)
 		totlen += data->cp - data->sp;
-	if (!(s = _talloc_zero(tall_vbuf_ctx, (totlen + 1), "buffer_getstr")))
+	if (!(s = _talloc_zero(tall_vty_ctx, (totlen + 1), "buffer_getstr")))
 		return NULL;
 	p = s;
 	for (data = b->head; data; data = data->next) {
@@ -140,7 +138,7 @@
 {
 	struct buffer_data *d;
 
-	d = _talloc_zero(tall_vbuf_ctx,
+	d = _talloc_zero(tall_vty_ctx,
 			 offsetof(struct buffer_data, data[b->size]),
 			 "buffer_add");
 	if (!d)
@@ -463,8 +461,3 @@
 	}
 	return b->head ? BUFFER_PENDING : BUFFER_EMPTY;
 }
-
-static __attribute__((constructor)) void on_dso_load_vty_buf(void)
-{
-	tall_vbuf_ctx = talloc_named_const(NULL, 1, "vty_buffer");
-}
diff --git a/openbsc/src/vty/command.c b/openbsc/src/vty/command.c
index 9841343..16e0dfb 100644
--- a/openbsc/src/vty/command.c
+++ b/openbsc/src/vty/command.c
@@ -49,8 +49,6 @@
 #include <openbsc/gsm_subscriber.h>
 #include <openbsc/talloc.h>
 
-static void *tall_vcmd_ctx;
-
 /* Command vector which includes some level of command lists. Normally
    each daemon maintains each own cmdvec. */
 vector cmdvec;
@@ -175,7 +173,7 @@
 		len += strlen(argv[i]) + 1;
 	if (!len)
 		return NULL;
-	p = str = _talloc_zero(tall_vcmd_ctx, len, "arvg_concat");
+	p = str = _talloc_zero(tall_vty_ctx, len, "arvg_concat");
 	for (i = shift; i < argc; i++) {
 		size_t arglen;
 		memcpy(p, argv[i], (arglen = strlen(argv[i])));
@@ -277,7 +275,7 @@
 		       *cp != '\0')
 			cp++;
 		strlen = cp - start;
-		token = _talloc_zero(tall_vcmd_ctx, strlen + 1, "make_strvec");
+		token = _talloc_zero(tall_vty_ctx, strlen + 1, "make_strvec");
 		memcpy(token, start, strlen);
 		*(token + strlen) = '\0';
 		vector_set(strvec, token);
@@ -333,7 +331,7 @@
 		cp++;
 
 	strlen = cp - start;
-	token = _talloc_zero(tall_vcmd_ctx, strlen + 1, "cmd_desc_str");
+	token = _talloc_zero(tall_vty_ctx, strlen + 1, "cmd_desc_str");
 	memcpy(token, start, strlen);
 	*(token + strlen) = '\0';
 
@@ -404,11 +402,11 @@
 
 		len = cp - sp;
 
-		token = _talloc_zero(tall_vcmd_ctx, len + 1, "cmd_make_descvec");
+		token = _talloc_zero(tall_vty_ctx, len + 1, "cmd_make_descvec");
 		memcpy(token, sp, len);
 		*(token + len) = '\0';
 
-		desc = talloc_zero(tall_vcmd_ctx, struct desc);
+		desc = talloc_zero(tall_vty_ctx, struct desc);
 		desc->cmd = token;
 		desc->str = cmd_desc_str(&dp);
 
@@ -509,7 +507,6 @@
 /* This function write configuration of this host. */
 static int config_write_host(struct vty *vty)
 {
-#if 0
 	if (host.name)
 		vty_out(vty, "hostname %s%s", host.name, VTY_NEWLINE);
 
@@ -529,6 +526,7 @@
 				VTY_NEWLINE);
 	}
 
+#if 0
 	if (zlog_default->default_lvl != LOG_DEBUG) {
 		vty_out(vty, "! N.B. The 'log trap' command is deprecated.%s",
 			VTY_NEWLINE);
@@ -581,7 +579,7 @@
 
 	if (zlog_default->record_priority == 1)
 		vty_out(vty, "log record-priority%s", VTY_NEWLINE);
-
+#endif
 	if (host.advanced)
 		vty_out(vty, "service advanced-vty%s", VTY_NEWLINE);
 
@@ -598,7 +596,6 @@
 	else if (!host.motd)
 		vty_out(vty, "no banner motd%s", VTY_NEWLINE);
 
-#endif
 	return 1;
 }
 
@@ -1805,16 +1802,9 @@
 				descvec = vector_slot(strvec, index);
 				for (j = 0; j < vector_active(descvec); j++)
 					if ((desc = vector_slot(descvec, j))) {
-						if ((string =
-						     cmd_entry_function
-						     (vector_slot(vline, index),
-						      desc->cmd)))
-							if (cmd_unique_string
-							    (matchvec, string))
-								vector_set
-								    (matchvec,
-								     strdup
-								     (string));
+						if ((string = cmd_entry_function(vector_slot(vline, index), desc->cmd)))
+							if (cmd_unique_string (matchvec, string))
+								vector_set (matchvec, talloc_strdup(tall_vty_ctx, string));
 					}
 			}
 		}
@@ -1855,7 +1845,7 @@
 			if (len < lcd) {
 				char *lcdstr;
 
-				lcdstr = _talloc_zero(tall_vcmd_ctx, lcd + 1,
+				lcdstr = _talloc_zero(tall_vty_ctx, lcd + 1,
 						      "complete-lcdstr");
 				memcpy(lcdstr, matchvec->index[0], lcd);
 				lcdstr[lcd] = '\0';
@@ -2298,10 +2288,18 @@
       config_exit_cmd, "exit", "Exit current mode and down to previous mode\n")
 {
 	switch (vty->node) {
-	case BTS_NODE:
-		vty->node = VIEW_NODE;
+	case GSMNET_NODE:
+		vty->node = CONFIG_NODE;
 		vty->index = NULL;
 		break;
+	case BTS_NODE:
+		vty->node = GSMNET_NODE;
+		{
+			/* set vty->index correctly ! */
+			struct gsm_bts *bts = vty->index;
+			vty->index = bts->network;
+		}
+		break;
 	case TRX_NODE:
 		vty->node = BTS_NODE;
 		{
@@ -2476,13 +2474,13 @@
 	config_file = host.config;
 
 	config_file_sav =
-	    _talloc_zero(tall_vcmd_ctx,
+	    _talloc_zero(tall_vty_ctx,
 			 strlen(config_file) + strlen(CONF_BACKUP_EXT) + 1,
 			 "config_file_sav");
 	strcpy(config_file_sav, config_file);
 	strcat(config_file_sav, CONF_BACKUP_EXT);
 
-	config_file_tmp = _talloc_zero(tall_vcmd_ctx, strlen(config_file) + 8,
+	config_file_tmp = _talloc_zero(tall_vty_ctx, strlen(config_file) + 8,
 					"config_file_tmp");
 	sprintf(config_file_tmp, "%s.XXXXXX", config_file);
 
@@ -2663,7 +2661,7 @@
 	if (host.name)
 		talloc_free(host.name);
 
-	host.name = strdup(argv[0]);
+	host.name = talloc_strdup(tall_vty_ctx, argv[0]);
 	return CMD_SUCCESS;
 }
 
@@ -2698,7 +2696,7 @@
 			host.password = NULL;
 			if (host.password_encrypt)
 				talloc_free(host.password_encrypt);
-			host.password_encrypt = strdup(strdup(argv[1]));
+			host.password_encrypt = talloc_strdup(tall_vty_ctx, argv[1]);
 			return CMD_SUCCESS;
 		} else {
 			vty_out(vty, "Unknown encryption type.%s", VTY_NEWLINE);
@@ -2721,10 +2719,10 @@
 	if (host.encrypt) {
 		if (host.password_encrypt)
 			talloc_free(host.password_encrypt);
-		host.password_encrypt = strdup(zencrypt(argv[0]));
+		host.password_encrypt = talloc_strdup(tall_vty_ctx, zencrypt(argv[0]));
 	} else
 #endif
-		host.password = strdup(argv[0]);
+		host.password = talloc_strdup(tall_vty_ctx, argv[0]);
 
 	return CMD_SUCCESS;
 }
@@ -2757,7 +2755,7 @@
 
 			if (host.enable_encrypt)
 				talloc_free(host.enable_encrypt);
-			host.enable_encrypt = strdup(argv[1]);
+			host.enable_encrypt = talloc_strdup(tall_vty_ctx, argv[1]);
 
 			return CMD_SUCCESS;
 		} else {
@@ -2782,10 +2780,10 @@
 	if (host.encrypt) {
 		if (host.enable_encrypt)
 			talloc_free(host.enable_encrypt);
-		host.enable_encrypt = strdup(zencrypt(argv[0]));
+		host.enable_encrypt = talloc_strdup(tall_vty_ctx, zencrypt(argv[0]));
 	} else
 #endif
-		host.enable = strdup(argv[0]);
+		host.enable = talloc_strdup(tall_vty_ctx, argv[0]);
 
 	return CMD_SUCCESS;
 }
@@ -2829,12 +2827,12 @@
 	if (host.password) {
 		if (host.password_encrypt)
 			talloc_free(host.password_encrypt);
-		host.password_encrypt = strdup(zencrypt(host.password));
+		host.password_encrypt = talloc_strdup(tall_vty_ctx, zencrypt(host.password));
 	}
 	if (host.enable) {
 		if (host.enable_encrypt)
 			talloc_free(host.enable_encrypt);
-		host.enable_encrypt = strdup(zencrypt(host.enable));
+		host.enable_encrypt = talloc_strdup(tall_vty_ctx, zencrypt(host.enable));
 	}
 
 	return CMD_SUCCESS;
@@ -3108,7 +3106,7 @@
 	if (host.logfile)
 		talloc_free(host.logfile);
 
-	host.logfile = strdup(fname);
+	host.logfile = talloc_strdup(tall_vty_ctx, fname);
 
 	return CMD_SUCCESS;
 }
@@ -3298,7 +3296,7 @@
 {
 	if (host.motdfile)
 		talloc_free(host.motdfile);
-	host.motdfile = strdup(argv[0]);
+	host.motdfile = talloc_strdup(tall_vty_ctx, argv[0]);
 
 	return CMD_SUCCESS;
 }
@@ -3326,7 +3324,7 @@
 /* Set config filename.  Called from vty.c */
 void host_config_set(char *filename)
 {
-	host.config = strdup(filename);
+	host.config = talloc_strdup(tall_vty_ctx, filename);
 }
 
 void install_default(enum node_type node)
@@ -3421,8 +3419,3 @@
 	}
 	srand(time(NULL));
 }
-
-static __attribute__((constructor)) void on_dso_load_vty_command(void)
-{
-	tall_vcmd_ctx = talloc_named_const(NULL, 1, "vty_command");
-}
diff --git a/openbsc/src/vty/vector.c b/openbsc/src/vty/vector.c
index c8885a4..371f71d 100644
--- a/openbsc/src/vty/vector.c
+++ b/openbsc/src/vty/vector.c
@@ -23,15 +23,14 @@
 #include <unistd.h>
 
 #include <vty/vector.h>
+#include <vty/vty.h>
 #include <openbsc/talloc.h>
 #include <memory.h>
 
-static void *tall_vvec_ctx;
-
 /* Initialize vector : allocate memory and return vector. */
 vector vector_init(unsigned int size)
 {
-	vector v = talloc_zero(tall_vvec_ctx, struct _vector);
+	vector v = talloc_zero(tall_vty_ctx, struct _vector);
 	if (!v)
 		return NULL;
 
@@ -41,7 +40,7 @@
 
 	v->alloced = size;
 	v->active = 0;
-	v->index = _talloc_zero(tall_vvec_ctx, sizeof(void *) * size,
+	v->index = _talloc_zero(tall_vty_ctx, sizeof(void *) * size,
 				"vector_init:index");
 	if (!v->index) {
 		talloc_free(v);
@@ -69,7 +68,7 @@
 vector vector_copy(vector v)
 {
 	unsigned int size;
-	vector new = talloc_zero(tall_vvec_ctx, struct _vector);
+	vector new = talloc_zero(tall_vty_ctx, struct _vector);
 	if (!new)
 		return NULL;
 
@@ -77,7 +76,7 @@
 	new->alloced = v->alloced;
 
 	size = sizeof(void *) * (v->alloced);
-	new->index = _talloc_zero(tall_vvec_ctx, size, "vector_copy:index");
+	new->index = _talloc_zero(tall_vty_ctx, size, "vector_copy:index");
 	if (!new->index) {
 		talloc_free(new);
 		return NULL;
@@ -93,7 +92,7 @@
 	if (v->alloced > num)
 		return;
 
-	v->index = talloc_realloc_size(tall_vvec_ctx, v->index,
+	v->index = talloc_realloc_size(tall_vty_ctx, v->index,
 				       sizeof(void *) * (v->alloced * 2));
 	memset(&v->index[v->alloced], 0, sizeof(void *) * v->alloced);
 	v->alloced *= 2;
@@ -189,8 +188,3 @@
 
 	return count;
 }
-
-static __attribute__((constructor)) void on_dso_load_vty_vec(void)
-{
-	tall_vvec_ctx = talloc_named_const(NULL, 1, "vty_vector");
-}
diff --git a/openbsc/src/vty/vty.c b/openbsc/src/vty/vty.c
index 0549914..5472fa0 100644
--- a/openbsc/src/vty/vty.c
+++ b/openbsc/src/vty/vty.c
@@ -33,7 +33,7 @@
 
 static int no_password_check = 1;
 
-static void *tall_vty_ctx;
+void *tall_vty_ctx;
 
 static void vty_clear_buf(struct vty *vty)
 {
@@ -1373,6 +1373,39 @@
 	return 0;
 }
 
+/* Read up configuration file */
+static int
+vty_read_file(FILE *confp)
+{
+	int ret;
+	struct vty *vty;
+
+	vty = vty_new();
+	vty->fd = 0;
+	vty->type = VTY_FILE;
+	vty->node = CONFIG_NODE;
+
+	ret = config_from_file(vty, confp);
+
+	if (ret != CMD_SUCCESS) {
+		switch (ret) {
+		case CMD_ERR_AMBIGUOUS:
+			fprintf(stderr, "Ambiguous command.\n");
+			break;
+		case CMD_ERR_NO_MATCH:
+			fprintf(stderr, "Ther is no such command.\n");
+			break;
+		}
+		fprintf(stderr, "Error occurred during reading below "
+			"line:\n%s\n", vty->buf);
+		vty_close(vty);
+		return -EINVAL;
+	}
+
+	vty_close(vty);
+	return 0;
+}
+
 /* Create new vty structure. */
 struct vty *
 vty_create (int vty_sock, void *priv)
@@ -1616,14 +1649,15 @@
 	vtyvec = vector_init(VECTOR_MIN_SIZE);
 }
 
+extern void *tall_bsc_ctx;
 /* Install vty's own commands like `who' command. */
 void vty_init()
 {
+	tall_vty_ctx = talloc_named_const(tall_bsc_ctx, 1, "vty");
+
 	/* For further configuration read, preserve current directory. */
 	vty_save_cwd();
 
-	host.config = "openbsc.cfg";
-
 	vtyvec = vector_init(VECTOR_MIN_SIZE);
 
 	/* Install bgp top node. */
@@ -1647,7 +1681,19 @@
 #endif
 }
 
-static __attribute__((constructor)) void on_dso_load_vty(void)
+int vty_read_config_file(const char *file_name)
 {
-	tall_vty_ctx = talloc_named_const(NULL, 1, "vty");
+	FILE *cfile;
+	int rc;
+
+	cfile = fopen(file_name, "r");
+	if (!cfile)
+		return -ENOENT;
+
+	rc = vty_read_file(cfile);
+	fclose(cfile);
+
+	host_config_set(file_name);
+
+	return rc;
 }
diff --git a/openbsc/src/vty_interface.c b/openbsc/src/vty_interface.c
index 00b1df2..45b2c74 100644
--- a/openbsc/src/vty_interface.c
+++ b/openbsc/src/vty_interface.c
@@ -33,9 +33,16 @@
 #include <openbsc/e1_input.h>
 #include <openbsc/abis_nm.h>
 #include <openbsc/db.h>
+#include <openbsc/talloc.h>
 
 static struct gsm_network *gsmnet;
 
+struct cmd_node net_node = {
+	GSMNET_NODE,
+	"%s(network)#",
+	1,
+};
+
 struct cmd_node bts_node = {
 	BTS_NODE,
 	"%s(bts)#",
@@ -159,10 +166,10 @@
 
 static void config_write_ts_single(struct vty *vty, struct gsm_bts_trx_ts *ts)
 {
-	vty_out(vty, "\t\tts %u%s", ts->nr, VTY_NEWLINE);
-	vty_out(vty, "\t\t\tphys_chan_config %s%s", gsm_pchan_name(ts->pchan),
+	vty_out(vty, "    ts %u%s", ts->nr, VTY_NEWLINE);
+	vty_out(vty, "     phys_chan_config %s%s", gsm_pchan_name(ts->pchan),
 		VTY_NEWLINE);
-	vty_out(vty, "\t\t\te1_subslot %u %u %u%s", ts->e1_link.e1_nr,
+	vty_out(vty, "     e1_subslot %u %u %u%s", ts->e1_link.e1_nr,
 		ts->e1_link.e1_ts, ts->e1_link.e1_ts_ss, VTY_NEWLINE);
 }
 
@@ -170,9 +177,9 @@
 {
 	int i;
 
-	vty_out(vty, "\ttrx %u%s", trx->nr, VTY_NEWLINE);
-	vty_out(vty, "\t\tarfcn %u%s", trx->arfcn, VTY_NEWLINE);
-	vty_out(vty, "\t\tmax_power_red %u%s", trx->max_power_red, VTY_NEWLINE);
+	vty_out(vty, "  trx %u%s", trx->nr, VTY_NEWLINE);
+	vty_out(vty, "   arfcn %u%s", trx->arfcn, VTY_NEWLINE);
+	vty_out(vty, "   max_power_red %u%s", trx->max_power_red, VTY_NEWLINE);
 
 	for (i = 0; i < TRX_NR_TS; i++)
 		config_write_ts_single(vty, &trx->ts[i]);
@@ -182,15 +189,15 @@
 {
 	struct gsm_bts_trx *trx;
 
-	vty_out(vty, "bts %u%s", bts->nr, VTY_NEWLINE);
-	vty_out(vty, "\ttype %s%s", btstype2str(bts->type), VTY_NEWLINE);
-	vty_out(vty, "\tband %s%s", gsm_band_name(bts->band), VTY_NEWLINE);
-	vty_out(vty, "\tlocation_area_code %u%s", bts->location_area_code,
+	vty_out(vty, " bts %u%s", bts->nr, VTY_NEWLINE);
+	vty_out(vty, "  type %s%s", btstype2str(bts->type), VTY_NEWLINE);
+	vty_out(vty, "  band %s%s", gsm_band_name(bts->band), VTY_NEWLINE);
+	vty_out(vty, "  location_area_code %u%s", bts->location_area_code,
 		VTY_NEWLINE);
-	vty_out(vty, "\ttraining_sequence_code %u%s", bts->tsc, VTY_NEWLINE);
-	vty_out(vty, "\tbase_station_id_code %u%s", bts->bsic, VTY_NEWLINE);
+	vty_out(vty, "  training_sequence_code %u%s", bts->tsc, VTY_NEWLINE);
+	vty_out(vty, "  base_station_id_code %u%s", bts->bsic, VTY_NEWLINE);
 	if (is_ipaccess_bts(bts))
-		vty_out(vty, "\tunit_id %u %u%s",
+		vty_out(vty, "  ip.access unit_id %u %u%s",
 			bts->ip_access.site_id, bts->ip_access.bts_id, VTY_NEWLINE);
 
 	llist_for_each_entry(trx, &bts->trx_list, list)
@@ -207,6 +214,16 @@
 	return CMD_SUCCESS;
 }
 
+static int config_write_net(struct vty *vty)
+{
+	vty_out(vty, "network%s", VTY_NEWLINE);
+	vty_out(vty, " country code %u%s", gsmnet->country_code, VTY_NEWLINE);
+	vty_out(vty, " mobile network code %u%s", gsmnet->network_code, VTY_NEWLINE);
+	vty_out(vty, " short name '%s'%s", gsmnet->name_short, VTY_NEWLINE);
+	vty_out(vty, " long name '%s'%s", gsmnet->name_long, VTY_NEWLINE);
+
+	return CMD_SUCCESS;
+}
 
 static void trx_dump_vty(struct vty *vty, struct gsm_bts_trx *trx)
 {
@@ -654,6 +671,63 @@
 	return CMD_SUCCESS;
 }
 
+DEFUN(cfg_net,
+      cfg_net_cmd,
+      "network",
+      "Configure the GSM network")
+{
+	vty->index = gsmnet;
+	vty->node = GSMNET_NODE;
+
+	return CMD_SUCCESS;
+}
+
+
+DEFUN(cfg_net_ncc,
+      cfg_net_ncc_cmd,
+      "network country code <1-999>",
+      "Set the GSM network country code")
+{
+	gsmnet->country_code = atoi(argv[0]);
+
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_net_mnc,
+      cfg_net_mnc_cmd,
+      "mobile network code <1-999>",
+      "Set the GSM mobile network code")
+{
+	gsmnet->network_code = atoi(argv[0]);
+
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_net_name_short,
+      cfg_net_name_short_cmd,
+      "short name NAME",
+      "Set the short GSM network name")
+{
+	if (gsmnet->name_short)
+		talloc_free(gsmnet->name_short);
+
+	gsmnet->name_short = talloc_strdup(gsmnet, argv[0]);
+
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_net_name_long,
+      cfg_net_name_long_cmd,
+      "long name NAME",
+      "Set the long GSM network name")
+{
+	if (gsmnet->name_long)
+		talloc_free(gsmnet->name_long);
+
+	gsmnet->name_long = talloc_strdup(gsmnet, argv[0]);
+
+	return CMD_SUCCESS;
+}
 
 /* per-BTS configuration */
 DEFUN(cfg_bts,
@@ -772,8 +846,8 @@
 
 DEFUN(cfg_bts_unit_id,
       cfg_bts_unit_id_cmd,
-      "unit_id <0-65534> <0-255>",
-      "Set the BTS Unit ID of this BTS\n")
+      "ip.access unit_id <0-65534> <0-255>",
+      "Set the ip.access BTS Unit ID of this BTS\n")
 {
 	struct gsm_bts *bts = vty->index;
 	int site_id = atoi(argv[0]);
@@ -789,6 +863,12 @@
 			bts_id, VTY_NEWLINE);
 		return CMD_WARNING;
 	}
+
+	if (!is_ipaccess_bts(bts)) {
+		vty_out(vty, "%% BTS is not of ip.access type%s", VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+
 	bts->ip_access.site_id = site_id;
 	bts->ip_access.bts_id = bts_id;
 
@@ -1075,7 +1155,14 @@
 	install_element(VIEW_NODE, &sms_send_imsi_cmd);
 #endif
 
-	install_element(CONFIG_NODE, &cfg_bts_cmd);
+	install_element(CONFIG_NODE, &cfg_net_cmd);
+	install_node(&net_node, config_write_net);
+	install_default(GSMNET_NODE);
+	install_element(GSMNET_NODE, &cfg_net_mnc_cmd);
+	install_element(GSMNET_NODE, &cfg_net_name_short_cmd);
+	install_element(GSMNET_NODE, &cfg_net_name_long_cmd);
+
+	install_element(GSMNET_NODE, &cfg_bts_cmd);
 	install_node(&bts_node, config_write_bts);
 	install_default(BTS_NODE);
 	install_element(BTS_NODE, &cfg_bts_type_cmd);
