diff --git a/src/topo_ieee1905.c b/src/topo_ieee1905.c
index 4007c608baca9f3223f12d1c8656fa948e7ef5d7..3e731fd963b69652f59e96a421e8b4f55c898cca 100644
--- a/src/topo_ieee1905.c
+++ b/src/topo_ieee1905.c
@@ -216,11 +216,11 @@ int topologyd_node_add(struct topologyd_private *priv, struct node *node)
  *
  * Intial state:
  *		Nbr(P) = {N0,..Nn}  <== immediate neighbors of P.
- *		G{P, N0,..Nn} <== graph of all known nodes at P.
  *
  * Step 1:
  *		for all Ni in G:
- *			Send Topology Request to Ni.
+ *		(a)	Send Topology Request to Ni neighbors
+ *		(b)	Send Topology Request to Ni
  *
  * Step 2:
  *		Read Topology Response from Ni.
@@ -233,8 +233,9 @@ int topologyd_node_add(struct topologyd_private *priv, struct node *node)
  */
 void topologyd_algo_run(struct topologyd_private *priv)
 {
-	struct node *p;
+	struct node *p = NULL, *node = NULL;
 	int i, j;
+	int is_selfnode = 0;
 	//struct linkMetricQueryTLV tlv_metric;
 
 	if (priv->algo_running)
@@ -254,17 +255,18 @@ void topologyd_algo_run(struct topologyd_private *priv)
 	dbg("The total nodes are %d", p->nbr_num);
 
 	for (j = 0; j < p->nbr_num; j++) {
-		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);
-		dbg("Processing " MACFMT " AL\n", MAC2STR(p->nbr_list[j].nbr_macid));
+		/*Here we need to see if the node exist in our hash table then req will 
+		 * be sent from below */
+		node = node_lookup(priv->topo.node_htable, p->nbr_list[j].nbr_macid);
+		if (!node) {
+			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);
+			dbg("Processing " MACFMT " AL\n", MAC2STR(p->nbr_list[j].nbr_macid));
+		}
 	}
 	/*here we send the topology query to selfnode each*/
 	/*time the algo runs to keep self node updated */
-	topologyd_send_ieee1905_topology_query(priv, NULL);
-//TEST
-	//topologyd_send_ieee1905_query(priv, NULL, CMDU_TYPE_HIGHER_LAYER_RESPONSE, NULL);
-	//topologyd_send_ieee1905_query(priv, NULL, CMDU_TYPE_LINK_METRIC_RESPONSE, NULL);
-//TEST
+
 	for (i = 0; i < NODE_HTABLE_SIZE; i++) {
 		if (hlist_empty(&priv->topo.node_htable[i]))
 			continue;
@@ -275,8 +277,13 @@ void topologyd_algo_run(struct topologyd_private *priv)
 				continue;
 
 			for (j = 0; j < p->nbr_num; j++) {
-				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);
+				node = NULL;
+				is_selfnode = memcmp(&priv->selfnode, p->nbr_list[j].nbr_macid, 6);
+				node = node_lookup(priv->topo.node_htable, p->nbr_list[j].nbr_macid);
+				if (!node && is_selfnode) {
+					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));