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);
