diff --git a/src/topo_ieee1905.c b/src/topo_ieee1905.c
index e72b08c1825c9f7707834a7fa7b997e4e65294ba..6bf97f4e87bf5d1ce1823ddba3077f606757d286 100644
--- a/src/topo_ieee1905.c
+++ b/src/topo_ieee1905.c
@@ -102,6 +102,22 @@ static void topologyd_node_expired(struct uloop_timeout *t)
 {
 	struct node *p = container_of(t, struct node, validity_timer);
 	struct topologyd_private *priv = p->priv;
+	int i = 0;
+	struct topology_changelog elem;
+
+	//Here before deleting a ieee1905 node
+	//we also need to log in changelog the nonieee1905 nodes as deleted
+	for (i = 0; i < p->non1905_nbr_num; i++) {
+		dbg("Deleting the non1905 neighbor" MACFMT "\n", MAC2STR(p->non1905_nbrlist[i]));
+		memcpy(elem.nbr_macaddr, p->non1905_nbrlist[i], 6);
+		memcpy(elem.rpt_macaddr, p->hwaddr, 6);
+		memcpy(elem.rpt_ifmacaddr, p->non1905_nbr_localintf, 6);
+		elem.is1905_nbr = 0;
+		elem.type = 1;
+		enqueue_changelog(&(priv->topo), &elem);
+		//Send event
+		topology_send_node_event(&elem, p->ingress_ifr_name);
+	}
 
 	//Here we log in the changelog as the node will be deleted
 	changelog_copy_node_info(priv, p, 1, 1);
@@ -124,8 +140,13 @@ int topologyd_node_add(struct topologyd_private *priv, struct node *node)
 
 	if (!memcmp(node->hwaddr, priv->ieee1905_macaddr, 6)) {
 		p = &priv->selfnode;
+
+		if (first_run_flag == 1)
+			update_changelog_info(priv, p, node);
+
 		topologyd_copy_update_node(p, node);
 		if (first_run_flag == 0) {
+			topologyd_update_changelog_firstentry(priv, p);
 			if (!priv->algo_running)
 				topologyd_algo_run(priv);
 			first_run_flag = 1;
@@ -146,8 +167,10 @@ int topologyd_node_add(struct topologyd_private *priv, struct node *node)
 		p->validity_timer.cb = topologyd_node_expired;
 		p->priv = priv;
 		priv->topo.num_nodes++;
-		//Add this in changelog events
+		//Add this in changelog events for ieee1905 nodes
 		changelog_copy_node_info(priv, p, 0, 1);
+		//Add this in changelog events for nonieee1905 nodes
+		topologyd_update_changelog_firstentry(priv, p);
 
 	} else {
 		//update in changelog
diff --git a/src/topologyd.c b/src/topologyd.c
index 065887d18430e62faa056ed66e812849c563ae35..ffa3afd741c11ccd59938c943d875d443f3509f8 100644
--- a/src/topologyd.c
+++ b/src/topologyd.c
@@ -399,11 +399,9 @@ void topologyd_process_topology_response(struct cmdu_cstruct *cstruct, struct to
 		i++;
 	}
 
-	if (n.nbr_num || n.non1905_nbr_num) {
-		dbg("Updating Node" MACFMT " from topology response\n",
-						MAC2STR(n.hwaddr));
-		topologyd_node_add(priv, &n);
-	}
+	dbg("Updating Node" MACFMT " from topology response\n",
+					MAC2STR(n.hwaddr));
+	topologyd_node_add(priv, &n);
 }
 
 void topologyd_process_higherlayer_response(struct cmdu_cstruct *cstruct, struct topologyd_private *priv)
@@ -1320,9 +1318,6 @@ static int topologyd_run(struct topologyd_private *priv)
 	topologyd_start_heartbeat(&priv->heartbeat);
 	topologyd_periodic_refresh(&priv->refresh_timer);
 
-	//initalize the changelog values
-	priv->topo.changelog_front = priv->topo.changelog_rear = -1;
-
 	return 0;
 }
 
@@ -1531,7 +1526,6 @@ void changelog_copy_node_info(struct topologyd_private *t, struct node *p, int32
 		memcpy(elem.rpt_ifmacaddr, t->selfnode.nbr_localintf, 6);
 	}
 
-	memcpy(elem.rpt_ifmacaddr, p->nbr_localintf, 6);
 	memcpy(elem.nbr_macaddr, p->hwaddr, 6);
 	elem.is1905_nbr = is1905;
 	elem.type = event;
@@ -1544,54 +1538,13 @@ void changelog_copy_node_info(struct topologyd_private *t, struct node *p, int32
 void update_changelog_info(struct topologyd_private *priv, struct node *dest, struct node *src)
 {
 	dbg("Inside %s..\n", __func__);
-	int i = 0, j = 0, k = 0, found = 0;
+	int i = 0, j = 0, found = 0;
 	struct topology_changelog elem;
 
 	if (dest == NULL || src == NULL || priv == NULL)
 		return;
 
-	//Check the update in neighbor node
-	if (dest->nbr_num !=  src->nbr_num) {
-		//Here a new neighbor is added or deleted
-		if (dest->nbr_num > src->nbr_num) {
-			dbg("Inside %s deleting neighbor node\n", __func__);
-			// neighbor node is deleted
-			for (i = 0; i < dest->nbr_num ; i++) {
-				found = 0;
-				for (j = 0; j < src->nbr_num; j++) {
-					if (memcmp(dest->nbr_list[i].nbr_macid, src->nbr_list[j].nbr_macid, 6) == 0) {
-						found = 1;
-						break;
-					}
-				}
-				if (found == 0) {
-					memcpy(elem.nbr_macaddr, dest->nbr_list[i].nbr_macid, 6);
-					memcpy(elem.rpt_macaddr, dest->hwaddr, 6);
-					memcpy(elem.rpt_ifmacaddr, dest->nbr_localintf, 6);
-					elem.is1905_nbr = 1;
-					elem.type = 1;
-					enqueue_changelog(&(priv->topo), &elem);
-					//Send event
-					topology_send_node_event(&elem, src->ingress_ifr_name);
-				}
-			}
-		} else {
-			dbg("Inside %s adding neighbor node\n", __func__);
-			//neighbor node is added
-			k = src->nbr_num - dest->nbr_num;
-			for (i = 0; i < k ; i++) {
-				memcpy(elem.nbr_macaddr, src->nbr_list[i].nbr_macid, 6);
-				memcpy(elem.rpt_macaddr, src->hwaddr, 6);
-				memcpy(elem.rpt_ifmacaddr, src->nbr_localintf, 6);
-				elem.is1905_nbr = 1;
-				elem.type = 0;
-				enqueue_changelog(&(priv->topo), &elem);
-				//Send event
-				topology_send_node_event(&elem, src->ingress_ifr_name);
-			}
-		}
-	}
-
+	dbg("The dest num [%d] src num [%d]", dest->non1905_nbr_num, src->non1905_nbr_num);
 	//Check the update in non neighbor node
 	if (dest->non1905_nbr_num != src->non1905_nbr_num) {
 		//Here a new non ieee1905 neighbor is added or deleted
@@ -1618,18 +1571,28 @@ void update_changelog_info(struct topologyd_private *priv, struct node *dest, st
 				}
 			}
 		} else {
-			//non1905 neighbor node is added
-			dbg("Inside %s non neighbor node\n", __func__);
-			k = src->non1905_nbr_num - dest->non1905_nbr_num;
-			for (i = 0; i < k ; i++) {
-				memcpy(elem.nbr_macaddr, src->non1905_nbrlist[i], 6);
-				memcpy(elem.rpt_macaddr, src->hwaddr, 6);
-				memcpy(elem.rpt_ifmacaddr, src->non1905_nbr_localintf, 6);
-				elem.is1905_nbr = 0;
-				elem.type = 0;
-				enqueue_changelog(&(priv->topo), &elem);
-				//Send event
-				topology_send_node_event(&elem, src->ingress_ifr_name);
+			if (dest->non1905_nbr_num < src->non1905_nbr_num) {
+				// non1905 neighbor node is added
+				dbg("Inside %s adding non neighbor node\n", __func__);
+				for (i = 0; i < src->non1905_nbr_num ; i++) {
+					found = 0;
+					for (j = 0; j < dest->non1905_nbr_num; j++) {
+						if (memcmp(dest->non1905_nbrlist[j], src->non1905_nbrlist[i], 6) == 0) {
+							found = 1;
+							break;
+						}
+					}
+					if (found == 0) {
+						memcpy(elem.nbr_macaddr, src->non1905_nbrlist[i], 6);
+						memcpy(elem.rpt_macaddr, src->hwaddr, 6);
+						memcpy(elem.rpt_ifmacaddr, src->non1905_nbr_localintf, 6);
+						elem.is1905_nbr = 0;
+						elem.type = 0;
+						enqueue_changelog(&(priv->topo), &elem);
+						//Send event
+						topology_send_node_event(&elem, src->ingress_ifr_name);
+					}
+				}
 			}
 		}
 	}
@@ -1823,3 +1786,29 @@ void topology_send_node_event(struct topology_changelog *c, char *ingress)
 
 	ubus_free(sctx);
 }
+
+void topologyd_update_changelog_firstentry(struct topologyd_private *priv, struct node *dest)
+{
+	dbg("Inside %s..\n", __func__);
+	int i = 0;
+	struct topology_changelog elem;
+
+	if (dest == NULL || priv == NULL)
+		return;
+	dbg("dest num for non1905 nodes [%d]", dest->non1905_nbr_num);
+	//Check the update in non neighbor node
+	if (dest->non1905_nbr_num > 0) {
+		//Here add non ieee1905 neighbor
+		for (i = 0; i < dest->non1905_nbr_num ; i++) {
+			memcpy(elem.nbr_macaddr, dest->non1905_nbrlist[i], 6);
+			memcpy(elem.rpt_macaddr, dest->hwaddr, 6);
+			memcpy(elem.rpt_ifmacaddr, dest->non1905_nbr_localintf, 6);
+			elem.is1905_nbr = 0;
+			elem.type = 0;
+			enqueue_changelog(&(priv->topo), &elem);
+			//Send event
+			topology_send_node_event(&elem, dest->ingress_ifr_name);
+		}
+	}
+}
+
diff --git a/src/topologyd.h b/src/topologyd.h
index 9e4811d486387b517288e23c76e18e75113ab4d9..1ea2dfbc8e3d8c6f6378422b42f99a75fd2595f7 100644
--- a/src/topologyd.h
+++ b/src/topologyd.h
@@ -236,6 +236,8 @@ void topologyd_getdata_lnmetric_query(struct linkMetricQueryTLV *tlv);
 void changelog_copy_node_info(struct topologyd_private *t, struct node *p,
 				int32_t event, bool is1905);
 void update_changelog_info(struct topologyd_private *priv, struct node *dest, struct node *src);
+void topologyd_update_changelog_firstentry(struct topologyd_private *priv, struct node *dest);
+void enqueue_changelog(struct topology *t, struct topology_changelog *c);
 
 //Functions to update the response message in node
 void topologyd_process_topology_response(struct cmdu_cstruct *cstruct, struct topologyd_private *priv, char *itfr_name);