diff --git a/src/topologyd.c b/src/topologyd.c
index c188a1df5167c5e0fb45b344c5731214e0e30cad..52bab038de10c2a6b7937c13c7e744fa71d443d0 100644
--- a/src/topologyd.c
+++ b/src/topologyd.c
@@ -79,7 +79,7 @@ static void ieee1905_info_response_cb(struct ubus_request *req,
 	}
 }
 
-static void ieee1905_msg_from_ubus(struct blob_attr *msg, uint16_t *msg_type, uint16_t *msg_mid, uint8_t **tlv, uint32_t *b_len, char * ingress_if_name)
+static int ieee1905_msg_from_ubus(struct blob_attr *msg, uint16_t *msg_type, uint16_t *msg_mid, uint8_t **tlv, uint32_t *b_len, char * ingress_if_name)
 {
 	json_object *jroot = NULL;
 	char *str;
@@ -105,7 +105,7 @@ static void ieee1905_msg_from_ubus(struct blob_attr *msg, uint16_t *msg_type, ui
 			strncpy(ingress_if_name, if_name, strlen(if_name));
 		tlv_str = _json_obj_get_string(jroot, "tlvs");
 		if (tlv_str == NULL)
-			return;
+			return 1;
 		len = strlen(tlv_str);
 		//dbg(" The TLV string is %s LENGTH Id %d", tlv_str, len);
 		*b_len = (len/2);		
@@ -113,11 +113,13 @@ static void ieee1905_msg_from_ubus(struct blob_attr *msg, uint16_t *msg_type, ui
 		*tlv = (uint8_t *) malloc((*b_len) * sizeof(uint8_t));
 		if (*tlv == NULL) {
 			err("No Memory \n");
-			return;
+			return 1;
 		}
 		strtob(tlv_str, len, *tlv);
 		json_safe_put(jroot);
 	}
+
+	return 0;
 }
 
 int topologyd_get_ieee1905_macaddr(struct topologyd_private *p)
@@ -165,6 +167,7 @@ void topologyd_event_handler(struct ubus_context *ctx,
 			struct ubus_event_handler *ev, const char *type,
 			struct blob_attr *msg)
 {
+	int ret = 0;
 	struct cmdu_cstruct *cstruct = NULL;
 	uint16_t msg_type = 0;
 	uint16_t msg_mid = 0;
@@ -179,7 +182,13 @@ void topologyd_event_handler(struct ubus_context *ctx,
 		return;
 
 	//Calling the function to get the args from json msg
-	ieee1905_msg_from_ubus(msg, &msg_type, &msg_mid, &tlv, &len, itfr_name);
+	ret = ieee1905_msg_from_ubus(msg, &msg_type, &msg_mid, &tlv, &len, itfr_name);
+	if (ret != 0) {
+		err("ieee1905_msg_from_ubus error \n");
+		if (tlv != NULL)
+			free(tlv);
+		return;
+	}
 
 	dbg("Inside topology event handler %hu %hu  %s", msg_type, msg_mid, itfr_name);
 
@@ -793,6 +802,7 @@ void topologyd_dump_node(struct blob_buf *bb, struct node *p, int is_self)
 				strcat(behind_mac_str, ",");
 			strcat(behind_mac_str, mac_str);
                 }
+		blobmsg_add_string(bb, "behind_mac_id", behind_mac_str);
 		blobmsg_close_table(bb, table);
 	}
 	blobmsg_close_array(bb, l2_neighbor);
@@ -1020,7 +1030,7 @@ void topologyd_print_changelog(struct blob_buf *bb, struct topologyd_private *pr
 		blobmsg_add_string(bb, "neighbor", nbr_macstr);
 
 		blobmsg_add_string(bb, "is1905_neighbor",
-			log->is1905_nbr ? "true" : "false");
+			log->is1905_nbr ? "IEEE1905" : "Non-IEEE1905");
 
 		blobmsg_add_string(bb, "event_type",
 			log->type ? "delete" : "add");
@@ -1274,6 +1284,9 @@ int topologyd_start(void)
 	priv->heartbeat.cb = topologyd_start_heartbeat;
 	priv->topo.changelog = (struct topology_changelog*) malloc 
 			((priv->config.maxlog)*sizeof(struct topology_changelog));
+	if (priv->topo.changelog == NULL)
+		goto out_and_exit;
+
 	topology_log_max = priv->config.maxlog;
 	dbg("Dynamic array size %d",priv->config.maxlog);