* implement some simplistic OML EVENT STATE CHANGE REPORT parsing
* make sure we don't call a user_cb() function if it is NULL

diff --git a/src/abis_nm.c b/src/abis_nm.c
index 84a7981..79af71e 100644
--- a/src/abis_nm.c
+++ b/src/abis_nm.c
@@ -168,6 +168,44 @@
 
 static int abis_nm_rcvmsg_sw(struct msgb *mb);
 
+static int abis_nm_rx_statechg_rep(struct msgb *mb)
+{
+	struct abis_om_fom_hdr *foh = msgb_l3(mb);
+	u_int8_t mt = foh->msg_type;
+	u_int8_t *data = &foh->data[0];
+	
+	DEBUGP(DNM, "STATE CHG: OC=%02x INST=(%02x,%02x,%02x) ",
+		foh->obj_class, foh->obj_inst.bts_nr, foh->obj_inst.trx_nr,
+		foh->obj_inst.ts_nr);
+	if (*data++ == NM_ATT_OPER_STATE)
+		DEBUGPC(DNM, "OP_STATE=%02x ", *data++);
+	if (*data++ == NM_ATT_AVAIL_STATUS) {
+		u_int8_t att_len = *data++;
+		while (att_len--)
+			DEBUGPC(DNM, "AVAIL=%02x ", *data++);
+	}
+	DEBUGPC(DNM, "\n");
+	return 0;
+}
+
+static int abis_nm_rcvmsg_report(struct msgb *mb)
+{
+	struct abis_om_fom_hdr *foh = msgb_l3(mb);
+	u_int8_t mt = foh->msg_type;
+
+	//nmh->cfg->report_cb(mb, foh);
+
+	switch (mt) {
+	case NM_MT_STATECHG_EVENT_REP:
+		return abis_nm_rx_statechg_rep(mb);
+		break;
+	};
+
+	DEBUGP(DNM, "reporting NM MT 0x%02x\n", mt);
+
+	return 0;
+}
+
 /* Receive a OML NM Message from BTS */
 static int abis_nm_rcvmsg_fom(struct msgb *mb)
 {
@@ -175,11 +213,8 @@
 	u_int8_t mt = foh->msg_type;
 
 	/* check for unsolicited message */
-	if (is_report(mt)) {
-		DEBUGP(DNM, "reporting NM MT 0x%02x\n", mt);
-		//nmh->cfg->report_cb(mb, foh);
-		return 0;
-	}
+	if (is_report(mt))
+		return abis_nm_rcvmsg_report(mb);
 
 	if (is_in_arr(mt, sw_load_msgs, ARRAY_SIZE(sw_load_msgs)))
 		return abis_nm_rcvmsg_sw(mb);
@@ -203,6 +238,12 @@
 	}
 #endif
 
+	switch (mt) {
+	case NM_MT_BS11_LMT_SESSION:
+		DEBUGP(DNM, "LMT Event: \n");
+		break;
+	}
+
 	return 0;
 }
 
@@ -1144,6 +1185,8 @@
 	struct file_list_entry *fle;
 	int rc = 0;
 
+	DEBUGP(DNM, "Event %u\n", event);
+
 	switch (event) {
 	case NM_MT_LOAD_END_ACK:
 		fle = fl_dequeue(&bs11_sw->file_list);
@@ -1170,7 +1213,8 @@
 	case NM_MT_ACTIVATE_SW_ACK:
 	default:
 		/* fallthrough to the user callback */
-		rc = bs11_sw->user_cb(hook, event, msg, NULL, NULL);
+		if (bs11_sw->user_cb)
+			rc = bs11_sw->user_cb(hook, event, msg, NULL, NULL);
 		break;
 	}