diff --git a/include/openbsc/abis_nm.h b/include/openbsc/abis_nm.h
index 749f025..a28905c 100644
--- a/include/openbsc/abis_nm.h
+++ b/include/openbsc/abis_nm.h
@@ -25,6 +25,8 @@
 
 #include <sys/types.h>
 
+#include <openbsc/tlv.h>
+
 /* PRIVATE */
 
 /* generic header in front of every OML message according to TS 08.59 */
@@ -371,6 +373,8 @@
 	NM_ATT_BS11_RADIO_MEAS_GRAN	= 0xdc,	/* in SACCH multiframes */
 	NM_ATT_BS11_RADIO_MEAS_REP	= 0xdd,
 
+	NM_ATT_BS11_BTS_STATE		= 0xf0,
+	NM_ATT_BS11_E1_STATE		= 0xf1,
 	NM_ATT_BS11_PLL			= 0xf2,
 	NM_ATT_BS11_RX_OFFSET		= 0xf3,
 	NM_ATT_BS11_ANT_TYPE		= 0xf4,
@@ -497,9 +501,8 @@
 };
 
 extern int abis_nm_rcvmsg(struct msgb *msg);
-//extern struct abis_nm_h *abis_nm_init(struct abis_nm_cfg *cfg);
-//extern void abis_nm_fini(struct abis_nm_h *nmh);
 
+int abis_nm_tlv_parse(struct tlv_parsed *tp, const u_int8_t *buf, int len);
 int abis_nm_rx(struct msgb *msg);
 int abis_nm_opstart(struct gsm_bts *bts, u_int8_t obj_class, u_int8_t i0, u_int8_t i1, u_int8_t i2);
 int abis_nm_chg_adm_state(struct gsm_bts *bts, u_int8_t obj_class, u_int8_t i0,
diff --git a/src/abis_nm.c b/src/abis_nm.c
index 33fc0bf..9793dc4 100644
--- a/src/abis_nm.c
+++ b/src/abis_nm.c
@@ -217,6 +217,8 @@
 		[NM_ATT_BS11_LMT_LOGIN_TIME] =	{ TLV_TYPE_TLV },
 		[NM_ATT_BS11_LMT_USER_ACC_LEV] ={ TLV_TYPE_TLV },
 		[NM_ATT_BS11_LMT_USER_NAME] =	{ TLV_TYPE_TLV },
+		[NM_ATT_BS11_BTS_STATE]	=	{ TLV_TYPE_TLV },
+		[NM_ATT_BS11_E1_STATE]	=	{ TLV_TYPE_TLV },
 		/* ip.access specifics */
 		[NM_ATT_IPACC_RSL_BSC_IP] =	{ TLV_TYPE_FIXED, 4 },
 		[NM_ATT_IPACC_RSL_BSC_PORT] =	{ TLV_TYPE_FIXED, 2 },
@@ -224,7 +226,11 @@
 
 	},
 };
-#define nm_tlv_parse(dec, buf, len)	tlv_parse(dec, &nm_att_tlvdef, buf, len)
+
+int abis_nm_tlv_parse(struct tlv_parsed *tp, const u_int8_t *buf, int len)
+{
+	return tlv_parse(tp, &nm_att_tlvdef, buf, len);
+}
 
 static int is_in_arr(enum abis_nm_msgtype mt, const enum abis_nm_msgtype *arr, int size)
 {
@@ -462,7 +468,7 @@
 
 	new_state = *nm_state;
 	
-	nm_tlv_parse(&tp, foh->data, oh->length-sizeof(*foh));
+	abis_nm_tlv_parse(&tp, foh->data, oh->length-sizeof(*foh));
 	if (TLVP_PRESENT(&tp, NM_ATT_OPER_STATE)) {
 		new_state.operational = *TLVP_VAL(&tp, NM_ATT_OPER_STATE);
 		DEBUGPC(DNM, "OP_STATE=%s ", opstate_name(new_state.operational));
@@ -584,7 +590,7 @@
 	struct tlv_parsed tp;
 	u_int8_t adm_state;
 
-	nm_tlv_parse(&tp, foh->data, oh->length-sizeof(*foh));
+	abis_nm_tlv_parse(&tp, foh->data, oh->length-sizeof(*foh));
 	if (!TLVP_PRESENT(&tp, NM_ATT_ADM_STATE))
 		return -EINVAL;
 
@@ -1858,7 +1864,7 @@
 	}
 
 	foh = (struct abis_om_fom_hdr *) oh->data + 1 + idstrlen;
-	nm_tlv_parse(&tp, foh->data, oh->length-sizeof(*foh));
+	abis_nm_tlv_parse(&tp, foh->data, oh->length-sizeof(*foh));
 
 	switch (foh->msg_type) {
 	case NM_MT_IPACC_RSL_CONNECT_ACK:
diff --git a/src/bs11_config.c b/src/bs11_config.c
index e623ade..bddd1f2 100644
--- a/src/bs11_config.c
+++ b/src/bs11_config.c
@@ -164,12 +164,10 @@
 		break;
 	case NM_MT_LOAD_END_ACK:
 		if (data) {
-			/* we did a SWL load and must activate it */
+			/* we did a safety load and must activate it */
 			abis_nm_software_activate(g_bts, fname_safety,
 						  swload_cbfn, g_bts);
-		} else {
-			/* we did a safety load and have to wait */
-			sleep(10);
+			sleep(5);
 		}
 		break;
 	case NM_MT_LOAD_END_NACK:
@@ -225,49 +223,67 @@
 	return mbccu_load[linkstate];
 }
 
-
-static void print_state(struct abis_nm_bs11_state *st)
+static const char *bts_phase_name(u_int8_t phase)
 {
-	enum abis_bs11_phase phase = st->phase;
-
-	printf("Abis-link: %-9s MBCCU0: %-11s MBCCU1: %-11s PHASE: %u ",
-		linkstate_name(st->abis_link & 0xf),
-		mbccu_load_name(st->mbccu & 0xf), mbccu_load_name(st->mbccu >> 4),
-		phase & 0xf);
-
 	switch (phase) {
 	case BS11_STATE_WARM_UP:
 	case BS11_STATE_WARM_UP_2:
-		printf("Warm Up...\n");
+		return "Warm Up";
 		break;
 	case BS11_STATE_LOAD_SMU_SAFETY:
-		printf("Load SMU Safety...\n");
+		return "Load SMU Safety";
 		break;
 	case BS11_STATE_LOAD_SMU_INTENDED:
-		printf("Load SMU Intended...\n");
+		return "Load SMU Intended";
 		break;
 	case BS11_STATE_LOAD_MBCCU:
-		printf("Load MBCCU...\n");
+		return "Load MBCCU";
 		break;
 	case BS11_STATE_SOFTWARE_RQD:
-		printf("Software required...\n");
+		return "Software required";
 		break;
 	case BS11_STATE_WAIT_MIN_CFG:
 	case BS11_STATE_WAIT_MIN_CFG_2:
-		printf("Wait minimal config...\n");
+		return "Wait minimal config";
 		break;
 	case BS11_STATE_MAINTENANCE:
-		printf("Maintenance...\n");
+		return "Maintenance";
 		break;
 	case BS11_STATE_NORMAL:
-		printf("Normal...\n");
+		return "Normal";
+		break;
+	case BS11_STATE_ABIS_LOAD:
+		return "Abis load";
 		break;
 	default:
-		printf("Unknown phase 0x%02x\n", phase);
+		return "Unknown";
 		break;
 	}
 }
 
+static void print_state(struct tlv_parsed *tp)
+{
+	if (TLVP_PRESENT(tp, NM_ATT_BS11_BTS_STATE)) {
+		u_int8_t phase, mbccu;
+		if (TLVP_LEN(tp, NM_ATT_BS11_BTS_STATE) >= 1) {
+			phase = *TLVP_VAL(tp, NM_ATT_BS11_BTS_STATE);
+			printf("PHASE: %u %-20s ", phase & 0xf,
+				bts_phase_name(phase));
+		}
+		if (TLVP_LEN(tp, NM_ATT_BS11_BTS_STATE) >= 2) {
+			mbccu = *(TLVP_VAL(tp, NM_ATT_BS11_BTS_STATE)+1);
+			printf("MBCCU0: %-11s MBCCU1: %-11s ",
+				mbccu_load_name(mbccu & 0xf), mbccu_load_name(mbccu >> 4));
+		}
+	}
+	if (TLVP_PRESENT(tp, NM_ATT_BS11_E1_STATE) &&
+	    TLVP_LEN(tp, NM_ATT_BS11_E1_STATE) >= 1) {
+		u_int8_t e1_state = *TLVP_VAL(tp, NM_ATT_BS11_E1_STATE);
+		printf("Abis-link: %-9s ", linkstate_name(e1_state & 0xf));
+	}
+	printf("\n");
+}
+
 /* handle a response from the BTS to a GET STATE command */
 static int handle_state_resp(enum abis_bs11_phase state)
 {
@@ -332,7 +348,7 @@
 {
 	struct abis_om_hdr *oh;
 	struct abis_om_fom_hdr *foh;
-	struct abis_nm_bs11_state *st;
+	struct tlv_parsed tp;
 	int rc = -1;
 
 #if 0
@@ -363,9 +379,11 @@
 		exit(0);
 		break;
 	case NM_MT_BS11_GET_STATE_ACK:
-		st = (struct abis_nm_bs11_state *) &foh->data[0];
-		print_state(st);
-		rc = handle_state_resp(st->phase);
+		abis_nm_tlv_parse(&tp, foh->data, oh->length-sizeof(*foh));
+		print_state(&tp);
+		if (TLVP_PRESENT(&tp, NM_ATT_BS11_BTS_STATE) &&
+		    TLVP_LEN(&tp, NM_ATT_BS11_BTS_STATE) >= 1)
+			rc = handle_state_resp(*TLVP_VAL(&tp, NM_ATT_BS11_BTS_STATE));
 		break;
 	default:
 		rc = abis_nm_rcvmsg(rx_msg);
@@ -391,6 +409,12 @@
 	return rc;
 }
 
+int nm_state_event(enum nm_evt evt, u_int8_t obj_class, void *obj,
+		   struct gsm_nm_state *old_state, struct gsm_nm_state *new_state)
+{
+	return 0;
+}
+
 static void print_banner(void)
 {
 	printf("bs11_config (C) 2009 by Harald Welte and Dieter Spaar\n");
@@ -428,7 +452,7 @@
 			{ "restart", 0, 0, 'r' },
 		};
 
-		c = getopt_long(argc, argv, "hp:s:S:td:Dw:fr",
+		c = getopt_long(argc, argv, "hp:s:S:td:Dw:fra:",
 				long_options, &option_index);
 
 		if (c == -1)
@@ -492,7 +516,7 @@
 
 	handle_options(argc, argv);
 
-	gsmnet = gsm_network_init(1, 1, 1);
+	gsmnet = gsm_network_init(1, 1, 1, GSM_BTS_TYPE_BS11);
 	if (!gsmnet) {
 		fprintf(stderr, "Unable to allocate gsm network\n");
 		exit(1);
