diff --git a/src/topo_ieee1905.c b/src/topo_ieee1905.c
index 63dcbaf5de615ab5d63076e54a9fa0997c5f8add..36d876e152c44349247e18ba3d6cfcc8c04f04b1 100644
--- a/src/topo_ieee1905.c
+++ b/src/topo_ieee1905.c
@@ -251,6 +251,9 @@ void topologyd_algo_run(struct topologyd_private *priv)
 				dbg("sending req to " MACFMT "\n", MAC2STR(p->nbr_list[j].nbr_macid));
 				topologyd_send_ieee1905_topology_query(priv, p->nbr_list[j].nbr_macid);
 			}
+			//Here we also need to send the topology query to neighbors
+			dbg("sending topology req to " MACFMT "\n", MAC2STR(p->hwaddr));
+			topologyd_send_ieee1905_topology_query(priv,p->hwaddr);
 			//Here we also need to send the query for higher layer request
 			dbg("sending higher layer req to " MACFMT "\n", MAC2STR(p->hwaddr));
 			topologyd_send_ieee1905_query(priv, p->hwaddr, CMDU_TYPE_HIGHER_LAYER_QUERY, p->ingress_ifr_name, NULL);
diff --git a/src/topologyd.c b/src/topologyd.c
index ebda538f4b4d4407730a210f9b37d4fd7c9f6848..2ab27e573f27c455ee9045bf48a01963fd7cdec4 100644
--- a/src/topologyd.c
+++ b/src/topologyd.c
@@ -604,12 +604,12 @@ void topology_add_txrx_data (uint8_t *metric, struct topologyd_private *priv)
 
 	if(*metric == TLV_TYPE_TRANSMITTER_LINK_METRIC) {
 		dbg (" Inside the transmitter link metric tlv\n");
-		struct transmitterLinkMetricTLV *p;
+		struct transmitterLinkMetricTLV *ptr;
 
-		p = (struct transmitterLinkMetricTLV *)metric;
+		ptr = (struct transmitterLinkMetricTLV *)metric;
 
-		memcpy(fr_al_mac_id, p->local_al_address,6);
-		memcpy(to_al_mac_id, p->neighbor_al_address, 6);
+		memcpy(fr_al_mac_id, ptr->local_al_address,6);
+		memcpy(to_al_mac_id, ptr->neighbor_al_address, 6);
 
 		res = memcmp (fr_al_mac_id, priv->selfnode.hwaddr, 6);
 		if (res == 0) {
@@ -626,16 +626,16 @@ void topology_add_txrx_data (uint8_t *metric, struct topologyd_private *priv)
 				res = memcmp (n->nbr_list[i].nbr_macid, to_al_mac_id, 6);
 				if(res != 0)
 					continue;
-				n->nbr_list[i].metric_num = p->transmitter_link_metrics_nr;
-				dbg (" Inside the transmitter link metric tlv  ln_metric_num %d\n", p->transmitter_link_metrics_nr);
-				for (j = 0; j < p->transmitter_link_metrics_nr; j++) {
-					memcpy(n->nbr_list[i].ln_metric[j].nbr_ifr_addr, p->transmitter_link_metrics[j].neighbor_interface_address, 6);
-					n->nbr_list[i].ln_metric[j].ieee802dot1br = p->transmitter_link_metrics[j].bridge_flag;
-					n->nbr_list[i].ln_metric[j].tx_packet_errors = p->transmitter_link_metrics[j].packet_errors;
-					n->nbr_list[i].ln_metric[j].tx_packet_ok = p->transmitter_link_metrics[j].transmitted_packets;
-					n->nbr_list[i].ln_metric[j].tx_max_xput = p->transmitter_link_metrics[j].mac_throughput_capacity;
-					n->nbr_list[i].ln_metric[j].tx_link_availability = p->transmitter_link_metrics[j].link_availability;
-					n->nbr_list[i].ln_metric[j].tx_phy_rate = p->transmitter_link_metrics[j].phy_rate;
+				n->nbr_list[i].metric_num = ptr->transmitter_link_metrics_nr;
+				dbg (" Inside the transmitter link metric tlv  ln_metric_num %d\n", ptr->transmitter_link_metrics_nr);
+				for (j = 0; j < ptr->transmitter_link_metrics_nr; j++) {
+					memcpy(n->nbr_list[i].ln_metric[j].nbr_ifr_addr, ptr->transmitter_link_metrics[j].neighbor_interface_address, 6);
+					n->nbr_list[i].ln_metric[j].ieee802dot1br = ptr->transmitter_link_metrics[j].bridge_flag;
+					n->nbr_list[i].ln_metric[j].tx_packet_errors = ptr->transmitter_link_metrics[j].packet_errors;
+					n->nbr_list[i].ln_metric[j].tx_packet_ok = ptr->transmitter_link_metrics[j].transmitted_packets;
+					n->nbr_list[i].ln_metric[j].tx_max_xput = ptr->transmitter_link_metrics[j].mac_throughput_capacity;
+					n->nbr_list[i].ln_metric[j].tx_link_availability = ptr->transmitter_link_metrics[j].link_availability;
+					n->nbr_list[i].ln_metric[j].tx_phy_rate = ptr->transmitter_link_metrics[j].phy_rate;
 				}
 			}
 		}
@@ -686,6 +686,8 @@ void topologyd_dump_node(struct blob_buf *bb, struct node *p, int is_self)
 	void *bridge_tuple = NULL, *ipv4_param = NULL, *ipv6_param = NULL, *link_array = NULL;
 	void *table1 = NULL;
 	int  j, k, flag = 0, i = 0;
+	char addr[16] = {0};
+	char addr_v6[40] = {0};
 
 	hwaddr_ntoa(p->hwaddr, mac_str);
         blobmsg_add_string(bb, "ieee1905_macaddr", mac_str);
@@ -816,12 +818,30 @@ void topologyd_dump_node(struct blob_buf *bb, struct node *p, int is_self)
 	//Here we show the ipv4 message structure
 	blobmsg_add_u32(bb, "ipv4_itfr_num", p->ipv4_intf_nbr);
         ipv4_param = blobmsg_open_array(bb, "ipv4_params");
+
         for (j = 0; j < p->ipv4_intf_nbr; j++) {
                 table = blobmsg_open_table(bb, NULL);
                 hwaddr_ntoa(p->device_ipv4[j].mac_address, mac_str);
                 blobmsg_add_string(bb, "mac_address", mac_str);
                 blobmsg_add_string(bb, "ipv4_addr_type",get_ipv4_type(p->device_ipv4[j].ipv4_addr_type));
-		//TODO for ipv4 address and dhcp address
+
+		// ipv4 address 
+                sprintf(addr, "%d.%d.%d.%d", p->device_ipv4[j].ipv4_addr[0],
+                        p->device_ipv4[j].ipv4_addr[1], p->device_ipv4[j].ipv4_addr[2],
+                        p->device_ipv4[j].ipv4_addr[3]);
+                addr[15] = '\0';
+                blobmsg_add_string(bb, "ipv4_address", addr);
+                memset(addr, 0, 16);
+
+		// dhcp address
+		if (p->device_ipv4[j].ipv4_addr_type == IPV4_TYPE_DHCP) {
+                        sprintf(addr, "%d.%d.%d.%d", p->device_ipv4[j].dhcp_addr[0],
+                                p->device_ipv4[j].dhcp_addr[1],
+                                p->device_ipv4[j].dhcp_addr[2],
+                                p->device_ipv4[j].dhcp_addr[3]);
+                        addr[15] = '\0';
+                        blobmsg_add_string(bb, "dhcp_addr", addr);
+                }
                 blobmsg_close_table(bb, table);
         }
         blobmsg_close_array(bb, ipv4_param);
@@ -834,7 +854,31 @@ void topologyd_dump_node(struct blob_buf *bb, struct node *p, int is_self)
                 hwaddr_ntoa(p->device_ipv6[j].mac_address, mac_str);
                 blobmsg_add_string(bb, "mac_address", mac_str);
                 blobmsg_add_string(bb, "ipv6_addr_type",get_ipv6_type(p->device_ipv6[j].ipv6_addr_type));
-                //TODO for ipv6 address and dhcp address
+                //For ipv6 address
+		sprintf(addr_v6, "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
+                                p->device_ipv6[j].ipv6_addr[0], p->device_ipv6[j].ipv6_addr[1], p->device_ipv6[j].ipv6_addr[2],
+                                p->device_ipv6[j].ipv6_addr[3], p->device_ipv6[j].ipv6_addr[4], p->device_ipv6[j].ipv6_addr[5],
+                                p->device_ipv6[j].ipv6_addr[6], p->device_ipv6[j].ipv6_addr[7], p->device_ipv6[j].ipv6_addr[8],
+                                p->device_ipv6[j].ipv6_addr[9], p->device_ipv6[j].ipv6_addr[10], p->device_ipv6[j].ipv6_addr[11],
+                                p->device_ipv6[j].ipv6_addr[12], p->device_ipv6[j].ipv6_addr[13], p->device_ipv6[j].ipv6_addr[14],
+                                p->device_ipv6[j].ipv6_addr[15]);
+                addr_v6[39] = '\0';
+                blobmsg_add_string(bb, "ipv6_address", addr_v6);
+		// origin address
+		if (p->device_ipv6[j].ipv6_addr_type == IPV6_TYPE_SLAAC) {
+			memset(addr_v6, 0, 40);
+                        sprintf(addr_v6, "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
+                                        p->device_ipv6[j].ipv6addr_origin[0], p->device_ipv6[j].ipv6addr_origin[1],
+				       	p->device_ipv6[j].ipv6addr_origin[2], p->device_ipv6[j].ipv6addr_origin[3],
+                                        p->device_ipv6[j].ipv6addr_origin[4], p->device_ipv6[j].ipv6addr_origin[5],
+                                        p->device_ipv6[j].ipv6addr_origin[6], p->device_ipv6[j].ipv6addr_origin[7], 
+					p->device_ipv6[j].ipv6addr_origin[8], p->device_ipv6[j].ipv6addr_origin[9],
+                                        p->device_ipv6[j].ipv6addr_origin[10], p->device_ipv6[j].ipv6addr_origin[11],
+                                        p->device_ipv6[j].ipv6addr_origin[12], p->device_ipv6[j].ipv6addr_origin[13],
+				       	p->device_ipv6[j].ipv6addr_origin[14],p->device_ipv6[j].ipv6addr_origin[15]);
+                        addr[39] = '\0';
+                        blobmsg_add_string(bb, "origin", addr_v6);
+                }
                 blobmsg_close_table(bb, table);
         }
         blobmsg_close_array(bb, ipv6_param);