diff --git a/nlsr.c b/nlsr.c
index 9f16325..1576bc4 100644
--- a/nlsr.c
+++ b/nlsr.c
@@ -60,6 +60,18 @@
     NULL
 };
 
+void
+my_lock(void)
+{
+	nlsr->semaphor=1;
+}
+
+void 
+my_unlock(void)
+{
+	nlsr->semaphor=0;
+}
+
 void 
 process_command_router_name(char *command)
 {
@@ -160,7 +172,7 @@
 	nbr->neighbor=ccn_charbuf_create();
 	ccn_charbuf_append_string(nbr->neighbor,rtr_name);
 	nbr->face=face_id;
-	nbr->status=0;	
+	nbr->status=NBR_DOWN;	
 
 	
 
@@ -462,6 +474,8 @@
 	nlsr->lsdb_synch_interval = LSDB_SYNCH_INTERVAL;
 	nlsr->interest_retry = INTEREST_RETRY;
 	nlsr->interest_resend_time = INTEREST_RESEND_TIME;
+
+	nlsr->semaphor=0;
 	
 
 }
@@ -519,14 +533,17 @@
 
 	nlsr->sched = ccn_schedule_create(nlsr, &ndn_rtr_ticker);
 
-	nlsr->event_build_name_lsa = ccn_schedule_event(nlsr->sched, 500, &initial_build_name_lsa, NULL, 0);
+	nlsr->event_build_name_lsa = ccn_schedule_event(nlsr->sched, 100, &initial_build_name_lsa, NULL, 0);
 	nlsr->event_send_info_interest = ccn_schedule_event(nlsr->sched, 1000000, &send_info_interest, NULL, 0);
 	
 
 	while(1)
 	{
-		ccn_schedule_run(nlsr->sched);
-        	res = ccn_run(nlsr->ccn, 500);
+		if(nlsr->semaphor !=1)
+		{
+			ccn_schedule_run(nlsr->sched);
+        		res = ccn_run(nlsr->ccn, 500);
+		}
 
 	}
 	
diff --git a/nlsr.h b/nlsr.h
index 0cd71e8..144742c 100644
--- a/nlsr.h
+++ b/nlsr.h
@@ -58,6 +58,8 @@
 	long int lsdb_synch_interval;
 	int interest_retry;
 	long int interest_resend_time;
+
+	int semaphor;
 	
 };
 
@@ -78,7 +80,8 @@
 void add_name_prefix_to_npl(struct name_prefix *name_prefix);
 void print_name_prefix_from_npl(void);
 
-
+void my_lock(void);
+void my_unlock(void);
 
 
 
diff --git a/nlsr_adl.c b/nlsr_adl.c
index 767d7bd..de6ad07 100644
--- a/nlsr_adl.c
+++ b/nlsr_adl.c
@@ -103,7 +103,11 @@
 	if (res == HT_OLD_ENTRY)
 	{
 		nnbr=e->data;
-		nnbr->status=status;
+		if ( nnbr->status!=status )
+		{
+			nnbr->status=status;
+			nlsr->adj_build_flag++;
+		}
 	}
 	else if(res == HT_NEW_ENTRY)
 	{
diff --git a/nlsr_adl.h b/nlsr_adl.h
index dc2e899..1bcb381 100644
--- a/nlsr_adl.h
+++ b/nlsr_adl.h
@@ -1,6 +1,9 @@
 #ifndef _NLSR_ADL_H_
 #define _NLSR_ADL_H_
 
+#define NBR_ACTIVE 1
+#define NBR_DOWN 0
+
 void add_adjacent_to_adl(struct ndn_neighbor *nbr);
 void print_adjacent_from_adl(void);
 void update_adjacent_status_to_adl(struct ccn_charbuf *nbr, int status);
diff --git a/nlsr_lsdb.c b/nlsr_lsdb.c
index c8c4160..b6b115e 100644
--- a/nlsr_lsdb.c
+++ b/nlsr_lsdb.c
@@ -123,6 +123,7 @@
 int 
 initial_build_name_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
 {
+	my_lock();	
 	printf("initial_build_name_lsa called \n");	
 	int i, npl_element;
 	struct name_prefix *np;
@@ -161,9 +162,9 @@
 	hashtb_end(e);
 
 	print_name_lsdb();
-
+	
+	my_unlock();
 	//nlsr->event_send_info_interest = ccn_schedule_event(nlsr->sched, 1, &send_info_interest, NULL, 0);
-
 	return 0;
 }
 
@@ -215,10 +216,13 @@
 int 
 install_adj_lsa(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
 {
+	my_lock();
+		
 	printf("install_adj_lsa called \n");
 
 	ev = ccn_schedule_event(nlsr->sched, 1000000, &install_adj_lsa, NULL, 0);
 
+	my_unlock();
 	return 0;
 	
 }
diff --git a/nlsr_ndn.c b/nlsr_ndn.c
index 52edb16..af79e3a 100644
--- a/nlsr_ndn.c
+++ b/nlsr_ndn.c
@@ -45,6 +45,7 @@
 incoming_interest(struct ccn_closure *selfp,
         enum ccn_upcall_kind kind, struct ccn_upcall_info *info)
 {
+	my_lock();
     
     switch (kind) {
         case CCN_UPCALL_FINAL:
@@ -87,6 +88,7 @@
             break;
     }
 
+	my_unlock();
     return CCN_UPCALL_RESULT_OK;
 }
 
@@ -95,6 +97,7 @@
         enum ccn_upcall_kind kind, struct ccn_upcall_info* info)
 {
 
+	my_lock();
 
     switch(kind) {
         case CCN_UPCALL_FINAL:
@@ -125,6 +128,7 @@
             return CCN_UPCALL_RESULT_ERR;
     }
 
+	my_unlock();
     return CCN_UPCALL_RESULT_OK;
 }
 
@@ -218,6 +222,47 @@
 	ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E_Content]-info->pco->offset[CCN_PCO_B_Content], info->pco, &content_data, &length);
 
 	printf("Info Value: %s \n",(char *)content_data);
+
+
+	int res,i;
+	int nlsr_position=0;
+	int name_comps=(int)info->interest_comps->n;
+
+	for(i=0;i<name_comps;i++)
+	{
+		res=ccn_name_comp_strcmp(info->interest_ccnb,info->interest_comps,i,"nlsr");
+		if( res == 0)
+		{
+			nlsr_position=i;
+			break;
+		}	
+	}
+	
+	struct ccn_charbuf *nbr;
+	nbr=ccn_charbuf_create();
+
+	
+	const unsigned char *comp_ptr1;
+	size_t comp_size;
+	for(i=0;i<nlsr_position;i++)
+	{
+		res=ccn_name_comp_get(info->interest_ccnb, info->interest_comps,i,&comp_ptr1, &comp_size);
+		//printf("%s \n",comp_ptr1);
+		ccn_charbuf_append_string(nbr,"/");
+		ccn_charbuf_append_string(nbr,(const char *)comp_ptr1);	
+	}
+
+	ccn_charbuf_append_string(nbr,"\0");	
+	printf("Info Content received for Neighbor: %s\n",ccn_charbuf_as_string(nbr));
+	
+	update_adjacent_timed_out_zero_to_adl(nbr);
+	update_adjacent_status_to_adl(nbr,NBR_ACTIVE);
+
+	print_adjacent_from_adl();
+
+	nlsr->event_build_adj_lsa = ccn_schedule_event(nlsr->sched, 1, &install_adj_lsa, NULL, 0);
+
+	ccn_charbuf_destroy(&nbr);	
 	
 
 }
@@ -308,7 +353,7 @@
 	ccn_charbuf_append_string(nbr,"\0");	
 	printf("Interest Timed out for Neighbor: %s\n",ccn_charbuf_as_string(nbr));
 
-	update_adjacent_status_to_adl(nbr,1);
+	//update_adjacent_status_to_adl(nbr,1);
 
 	ccn_charbuf_destroy(&nbr);	
 }
@@ -351,6 +396,9 @@
 	printf("Info Interest Timed out for Neighbor: %s\n",ccn_charbuf_as_string(nbr));
 
 	update_adjacent_timed_out_to_adl(nbr,1);
+
+	print_adjacent_from_adl();	
+
 	int timed_out=get_timed_out_number(nbr);
 	if(timed_out<nlsr->interest_retry && timed_out>0) // use configured variables 
 	{
@@ -540,7 +588,7 @@
 send_lsdb_interest(struct ccn_schedule *sched, void *clienth,
         struct ccn_scheduled_event *ev, int flags)
 {
-
+	my_lock();
 	struct ccn_charbuf *name;
 	long int rnum;
 	char rnumstr[20];
@@ -618,6 +666,7 @@
 
 	nlsr->event_send_lsdb_interest = ccn_schedule_event(nlsr->sched, 60000000, &send_lsdb_interest, NULL, 0);
 
+	my_unlock();
 	return 0;
 
 }
@@ -628,6 +677,7 @@
         struct ccn_scheduled_event *ev, int flags)
 {
 
+	my_lock();
 	struct ccn_charbuf *name;
 	long int rnum;
 	char rnumstr[20];
@@ -708,6 +758,7 @@
 
 	//nlsr->event_send_info_interest = ccn_schedule_event(nlsr->sched, 20000000, &send_info_interest, NULL, 0);
 
+	my_unlock();
 	return 0;
 
 }
@@ -717,6 +768,7 @@
 send_info_interest_to_neighbor(struct ccn_charbuf *nbr)
 {
 
+	my_lock();
 	struct ccn_charbuf *name;
 	long int rnum;
 	char rnumstr[20];
@@ -776,4 +828,6 @@
 	ccn_charbuf_destroy(&templ);
 	ccn_charbuf_destroy(&name);
 
+	my_unlock();
+
 }
