diff --git a/nlsr_lsdb.c b/nlsr_lsdb.c
index 16a7f30..cb24794 100644
--- a/nlsr_lsdb.c
+++ b/nlsr_lsdb.c
@@ -587,34 +587,40 @@
 
 
 
-		if(res == HT_NEW_ENTRY )
+		if(res == HT_NEW_ENTRY)
 		{
-			printf("New ADJ LSA... Adding to LSDB\n");
-			new_adj_lsa = e->data;
+			if ( adj_lsa->no_link > 0)
+			{
+				printf("New ADJ LSA... Adding to LSDB\n");
+				new_adj_lsa = e->data;
 
-			new_adj_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
-			new_adj_lsa->header->ls_type=adj_lsa->header->ls_type;
-			new_adj_lsa->header->orig_time=(char *)malloc(strlen(adj_lsa->header->orig_time)+1);
-			memcpy(new_adj_lsa->header->orig_time,adj_lsa->header->orig_time,strlen(adj_lsa->header->orig_time)+1);		
+				new_adj_lsa->header=(struct alsa_header *)malloc(sizeof(struct alsa_header ));
+				new_adj_lsa->header->ls_type=adj_lsa->header->ls_type;
+				new_adj_lsa->header->orig_time=(char *)malloc(strlen(adj_lsa->header->orig_time)+1);
+				memcpy(new_adj_lsa->header->orig_time,adj_lsa->header->orig_time,strlen(adj_lsa->header->orig_time)+1);		
 
-			new_adj_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
-			new_adj_lsa->header->orig_router->name=(char *)malloc(adj_lsa->header->orig_router->length);
-			memcpy(new_adj_lsa->header->orig_router->name,adj_lsa->header->orig_router->name,adj_lsa->header->orig_router->length);
-			new_adj_lsa->header->orig_router->length=adj_lsa->header->orig_router->length;
+				new_adj_lsa->header->orig_router=(struct name_prefix *)malloc(sizeof(struct name_prefix ));
+				new_adj_lsa->header->orig_router->name=(char *)malloc(adj_lsa->header->orig_router->length);
+				memcpy(new_adj_lsa->header->orig_router->name,adj_lsa->header->orig_router->name,adj_lsa->header->orig_router->length);
+				new_adj_lsa->header->orig_router->length=adj_lsa->header->orig_router->length;
 
-			new_adj_lsa->no_link=adj_lsa->no_link;
+				new_adj_lsa->no_link=adj_lsa->no_link;
 		
-			new_adj_lsa->body=(char *)malloc(strlen(adj_lsa->body)+1);
-			memset(new_adj_lsa->body,0,strlen(adj_lsa->body)+1);
-			memcpy(new_adj_lsa->body,adj_lsa->body,strlen(adj_lsa->body)+1);
+				new_adj_lsa->body=(char *)malloc(strlen(adj_lsa->body)+1);
+				memset(new_adj_lsa->body,0,strlen(adj_lsa->body)+1);
+				memcpy(new_adj_lsa->body,adj_lsa->body,strlen(adj_lsa->body)+1);
+			
+				add_next_hop_router(new_adj_lsa->header->orig_router->name);
+				add_next_hop_from_lsa_adj_body(new_adj_lsa->body,new_adj_lsa->no_link);
+			}
+			else 
+			{
+				hashtb_delete(e);
+			}
 
 			printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
 			set_new_lsdb_version();	
 			printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
-			
-			add_next_hop_router(new_adj_lsa->header->orig_router->name);
-			add_next_hop_from_lsa_adj_body(new_adj_lsa->body,new_adj_lsa->no_link);
 		}
 		else if(res == HT_OLD_ENTRY)
 		{
@@ -625,24 +631,30 @@
 			}
 			else
 			{
-				new_adj_lsa = e->data;
 
-				free(new_adj_lsa->header->orig_time);
-				new_adj_lsa->header->orig_time=(char *)malloc(strlen(adj_lsa->header->orig_time)+1);
-				memcpy(new_adj_lsa->header->orig_time,adj_lsa->header->orig_time,strlen(adj_lsa->header->orig_time)+1);
+				if ( adj_lsa->no_link > 0)
+				{				
+					new_adj_lsa = e->data;
 
-				new_adj_lsa->no_link=adj_lsa->no_link;
+					free(new_adj_lsa->header->orig_time);
+					new_adj_lsa->header->orig_time=(char *)malloc(strlen(adj_lsa->header->orig_time)+1);
+					memcpy(new_adj_lsa->header->orig_time,adj_lsa->header->orig_time,strlen(adj_lsa->header->orig_time)+1);
+
+					new_adj_lsa->no_link=adj_lsa->no_link;
 				
-				new_adj_lsa->body=(char *)malloc(strlen(adj_lsa->body)+1);
-				memset(new_adj_lsa->body,0,strlen(adj_lsa->body)+1);
-				memcpy(new_adj_lsa->body,adj_lsa->body,strlen(adj_lsa->body)+1);
+					new_adj_lsa->body=(char *)malloc(strlen(adj_lsa->body)+1);
+					memset(new_adj_lsa->body,0,strlen(adj_lsa->body)+1);
+					memcpy(new_adj_lsa->body,adj_lsa->body,strlen(adj_lsa->body)+1);
 
+					add_next_hop_from_lsa_adj_body(new_adj_lsa->body,new_adj_lsa->no_link);
+				}
+				else
+				{
+					hashtb_delete(e);
+				}
 				printf("Old Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
 				set_new_lsdb_version();	
 				printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);
-
-				add_next_hop_from_lsa_adj_body(new_adj_lsa->body,new_adj_lsa->no_link);
-
 			}
 	
 		}
