diff --git a/macbook.conf b/macbook.conf
index 7310e35..efe4f59 100644
--- a/macbook.conf
+++ b/macbook.conf
@@ -1,9 +1,9 @@
 #----configuration file for macbook----------
 #
-router-name /ndn/memphis.edu/netlab/macbook
+router-name /ndn/memphis.edu/cs/pollux
 ccnneighbor /ndn/memphis.edu/cs/gemeni
 ccnneighbor /ndn/memphis.edu/cs/altair
-ccnneighbor /ndn/memphis.edu/cs/pollux 141.225.11.132
+#ccnneighbor /ndn/memphis.edu/cs/pollux 141.225.11.132
 ccnname /ndn/memphis.edu/macbook/patterson
 ccnname /ndn/memphis.edu/macbook/houston/
 #------lsdb-synch-interval-----
@@ -12,12 +12,16 @@
 interest-resend-time 5
 lsa-refresh-time 600
 router-dead-interval 900
-max_faces_per_prefix 1 
+max-faces-per-prefix 1 
 debug on
 #hyperbolic-routing on
 hyperbolic-cordinate 1234.0 0.875
 tunnel-type udp
 
+keystore-path /Users/akmhoque/CCN_KEY/nlsr_key_store/.ccnx/.ccnx_keystore
+root-key-prefix /ndn/keys
+site-name memphis.edu
+
 topo-prefix /ndn/routing/nlsr/
 slice-prefix /ndn/routing/nlsr/LSA
 
diff --git a/nlsr.c b/nlsr.c
index b3c2f64..6ca3c40 100644
--- a/nlsr.c
+++ b/nlsr.c
@@ -563,7 +563,7 @@
 			//free(nlsr->topo_prefix);
 		nlsr->topo_prefix=(char *)calloc(strlen(topo_prefix)+1,sizeof(char));
 		memcpy(nlsr->topo_prefix,topo_prefix,strlen(topo_prefix)+1);
-		printf ("Topo prefix is: %s", nlsr->topo_prefix);;
+		printf ("Topo prefix is: %s\n", nlsr->topo_prefix);
 	}
 }
 
@@ -596,6 +596,38 @@
 			//free(nlsr->slice_prefix);
 		nlsr->slice_prefix=(char *)calloc(strlen(slice_prefix)+1,sizeof(char));
 		memcpy(nlsr->slice_prefix,slice_prefix,strlen(slice_prefix)+1);
+		printf("Slice prefix: %s \n",nlsr->slice_prefix);
+	}
+}
+
+
+	void 
+process_command_root_key_prefix(char *command)
+{
+	if(command==NULL)
+	{
+		printf(" Wrong Command Format ( root-key-prefix /name/prefix )\n");
+		return;
+	}
+	char *rem;
+	const char *sep=" \t\n";
+	char *root_key_prefix;
+
+	root_key_prefix=strtok_r(command,sep,&rem);
+	if(root_key_prefix==NULL)
+	{
+		printf(" Wrong Command Format (  root-key-prefix /name/prefix  )\n");
+		return;
+	}
+	else
+	{
+		if ( nlsr->root_key_prefix != NULL)
+			free(nlsr->root_key_prefix);
+		if ( root_key_prefix[strlen(root_key_prefix)-1] == '/' )
+			root_key_prefix[strlen(root_key_prefix)-1]='\0';
+		nlsr->root_key_prefix=(char *)calloc(strlen(root_key_prefix)+1,sizeof(char));
+		memcpy(nlsr->root_key_prefix,root_key_prefix,strlen(root_key_prefix)+1);
+		printf("Root key prefix: %s \n",nlsr->root_key_prefix);
 	}
 }
 
@@ -686,6 +718,94 @@
 	}
 }
 
+void 
+process_command_keystore_passphrase(char *command)
+{
+	if(command==NULL)
+	{
+		printf(" Wrong Command Format ( keystore-passphrase passphrase )\n");
+		return;
+	}
+	char *rem;
+	const char *sep=" \t\n";
+	char *passphrase;
+
+	passphrase=strtok_r(command,sep,&rem);
+	if(passphrase==NULL)
+	{
+		printf(" Wrong Command Format ( keystore-passphrase passphrase )\n");
+		return;
+	}
+
+	if( nlsr->keystore_passphrase)
+		free(nlsr->keystore_passphrase);
+	nlsr->keystore_passphrase=(char *)calloc(strlen(passphrase)+1,sizeof(char));
+	memcpy(nlsr->keystore_passphrase,passphrase,strlen(passphrase));
+
+	
+}
+
+
+void 
+process_command_keystore_path(char *command)
+{
+	if(command==NULL)
+	{
+		printf(" Wrong Command Format ( keystore-path path/to/.ccnx_keystore )\n");
+		return;
+	}
+	char *rem;
+	const char *sep=" \t\n";
+	char *path;
+
+	path=strtok_r(command,sep,&rem);
+	if(path==NULL)
+	{
+		printf(" Wrong Command Format ( keystore-path path/to/.ccnx_keystore )\n");
+		return;
+	}
+
+	if( nlsr->keystore_path)
+		free(nlsr->keystore_path);
+	nlsr->keystore_path=(char *)calloc(strlen(path)+1,sizeof(char));
+	memcpy(nlsr->keystore_path,path,strlen(path));
+	
+}
+
+
+
+void 
+process_command_site_name(char *command)
+{
+	if(command==NULL)
+	{
+		printf(" Wrong Command Format ( site-name site/name/prefix )\n");
+		return;
+	}
+	char *rem;
+	const char *sep=" \t\n";
+	char *site_name;
+
+	site_name=strtok_r(command,sep,&rem);
+	if(site_name==NULL)
+	{
+		printf(" Wrong Command Format ( site-name site/name/prefix )\n");
+		return;
+	}
+
+	if( nlsr->site_name)
+		free(nlsr->site_name);
+
+	if ( site_name[strlen(site_name)-1] == '/' )
+			site_name[strlen(site_name)-1]='\0';
+
+	nlsr->site_name=(char *)calloc(strlen(site_name)+1,sizeof(char));
+	memcpy(nlsr->site_name,site_name,strlen(site_name));
+	printf("Site Name prefix: %s \n",nlsr->site_name);
+	
+}
+
+
 	void 
 process_conf_command(char *command)
 {
@@ -762,6 +882,22 @@
 	{
 		process_command_tunnel_type(remainder);
 	}
+	else if(!strcmp(cmd_type,"site-name") )
+	{
+		process_command_site_name(remainder);
+	}
+	else if(!strcmp(cmd_type,"keystore-path") )
+	{
+		process_command_keystore_path(remainder);
+	}
+	else if(!strcmp(cmd_type,"keystore-passphrase") )
+	{
+		process_command_keystore_passphrase(remainder);	
+	}
+	else if(!strcmp(cmd_type,"root-key-prefix") )
+	{
+		process_command_root_key_prefix(remainder);
+	}
 	else 
 	{
 		printf("Wrong configuration Command %s \n",cmd_type);
@@ -1070,6 +1206,11 @@
 		fprintf(stderr,"Hyperbolic codinate has not been defined :(\n");
 		return -1;
 	}
+	if (nlsr->site_name == NULL )
+	{
+		fprintf(stderr,"Site name has not been configured :(\n");
+		return -1;
+	}
 
 	return 0;
 }
@@ -1101,6 +1242,13 @@
 	close(nlsr->nlsr_api_server_sock_fd);
 
 	ccn_destroy(&nlsr->ccn);
+
+	free(nlsr->root_key_prefix);
+	free(nlsr->keystore_path);
+	free(nlsr->keystore_passphrase);
+	if( nlsr->site_name )
+		free(nlsr->site_name);
+
 	free(nlsr->router_name);
 	if ( nlsr->debugging )
 	{
@@ -1176,13 +1324,7 @@
 	nlsr->lsdb->name_lsdb = hashtb_create(sizeof(struct nlsa), NULL);
 	nlsr->lsdb->cor_lsdb = hashtb_create(sizeof(struct clsa), NULL);
 
-	/*
-	char *time_stamp=(char *) calloc (20,sizeof(char));
-	get_current_timestamp_micro(time_stamp);
-	nlsr->lsdb->lsdb_version=(char *)malloc(strlen(time_stamp)+1);
-	memset(nlsr->lsdb->lsdb_version,0,strlen(time_stamp));
-	free(time_stamp);
-	*/
+
 
 	nlsr->lsdb->lsdb_version=get_current_timestamp_micro_v2();
 
@@ -1221,6 +1363,14 @@
 
 	nlsr->tunnel_type=IPPROTO_UDP;
 
+	nlsr->root_key_prefix=(char *)calloc(strlen("/ndn/keys")+1,sizeof(char));
+	memcpy(nlsr->root_key_prefix,"/ndn/keys",strlen("/ndn/keys"));
+	nlsr->keystore_path=get_current_user_default_keystore();
+	nlsr->keystore_passphrase=(char *)calloc(strlen("Th1s1sn0t8g00dp8ssw0rd.")+1
+																,sizeof(char));
+	memcpy(nlsr->keystore_passphrase,"Th1s1sn0t8g00dp8ssw0rd.",
+											strlen("Th1s1sn0t8g00dp8ssw0rd."));
+
 	return 0;
 }
 
diff --git a/nlsr.h b/nlsr.h
index 2e33371..cb7a1c3 100644
--- a/nlsr.h
+++ b/nlsr.h
@@ -47,21 +47,17 @@
 	struct ccn_closure in_content;
 
 	struct ccns_name_closure *closure;
-
 	struct ccns_slice *slice;
     	struct ccns_handle *ccns;
 
 	struct ccn_schedule *sched;
     	struct ccn_scheduled_event *event;
-	struct ccn_scheduled_event *event_send_lsdb_interest;
 	struct ccn_scheduled_event *event_send_info_interest;
-	struct ccn_scheduled_event *event_build_name_lsa;
 	struct ccn_scheduled_event *event_build_adj_lsa;
 	struct ccn_scheduled_event *event_calculate_route;
 
 	struct hashtb *adl;
 	struct hashtb *npl;
-	//struct hashtb *pit_alsa;
 	struct hashtb *map;
 	struct hashtb *rev_map;
 	struct hashtb *npt;
@@ -83,12 +79,11 @@
 	int is_send_lsdb_interest_scheduled;
 	int is_route_calculation_scheduled;
 
-	//long int lsdb_synch_interval;
 	int interest_retry;
 	long int interest_resend_time;
 	long int lsa_refresh_time;
 	long int router_dead_interval;
-	//long int multi_path_face_num;
+	
 	long int max_faces_per_prefix;
 	char *logDir;
 	int detailed_logging;
@@ -103,6 +98,11 @@
 	char *topo_prefix;
 	char *slice_prefix;
 
+	char *root_key_prefix;
+	char *keystore_path;
+	char *keystore_passphrase;
+	char *site_name;
+
 	int is_hyperbolic_calc;
 	double cor_r;
 	double cor_theta;
diff --git a/nlsr_km.c b/nlsr_km.c
index 2bfa8fa..995db18 100644
--- a/nlsr_km.c
+++ b/nlsr_km.c
@@ -29,7 +29,8 @@
 										char *site_name,
 										char *router_name){
 	
-	printf("sign_content_with_user_defined_keystore called\n");
+	if ( nlsr->debugging )
+		printf("sign_content_with_user_defined_keystore called\n");
 
 	
 	int res;
@@ -43,7 +44,8 @@
 	keystore=ccn_keystore_create();
 	res=ccn_keystore_init(keystore, keystore_path,keystore_passphrase );
 	if ( res < 0 ){
-		printf("Error in initiating keystore :(\n");
+		if ( nlsr->debugging )
+			printf("Error in initiating keystore :(\n");
 		ccn_keystore_destroy(&keystore);
 		return -1;
 	}
@@ -51,11 +53,12 @@
 
 	res=ccn_load_private_key	(nlsr->ccn,
 							keystore_path,
-							"Th1s1sn0t8g00dp8ssw0rd.",
+							keystore_passphrase,
 							pubid_out);
 
 	if(res < 0 ){
-		printf("Error in loading keystore :( \n");
+		if ( nlsr->debugging )
+			printf("Error in loading keystore :( \n");
 		ccn_charbuf_destroy(&pubid_out);
 		return -1;
 	}
@@ -63,7 +66,8 @@
 	char *baseuri=(char *)calloc(strlen(key_repo_name)+strlen(site_name)+
 				  strlen(router_name)+strlen("/%C1.R.N.Start")+5,sizeof(char));
 	memcpy(baseuri,key_repo_name,strlen(key_repo_name)+1);
-	memcpy(baseuri+strlen(baseuri),"/",1);
+	if ( site_name[0] != '/')
+		memcpy(baseuri+strlen(baseuri),"/",1);
 	memcpy(baseuri+strlen(baseuri),site_name,strlen(site_name)+1);
 	memcpy(baseuri+strlen(baseuri),"/%C1.R.N.Start",strlen("/%C1.R.N.Start"));
 	memcpy(baseuri+strlen(baseuri),router_name,strlen(router_name)+1);
@@ -78,7 +82,8 @@
 	}
 	ccn_name_from_uri(keyname,baseuri);
 	if ( res < 0 ){
-		printf("Bad URI format: %s\n",baseuri);
+		if ( nlsr->debugging )
+			printf("Bad URI format: %s\n",baseuri);
 		ccn_charbuf_destroy(&pubid_out);
 		ccn_charbuf_destroy(&keyname);
 		free(baseuri);
@@ -97,7 +102,8 @@
 
 	struct ccn_charbuf *uri = ccn_charbuf_create();
 	ccn_uri_append(uri, keyname->buf, keyname->length, 0);
-	printf("Key Name Included when processing content: %s\n", ccn_charbuf_as_string(uri));
+	if ( nlsr->debugging )
+		printf("Key Name Included when processing content: %s\n", ccn_charbuf_as_string(uri));
 	ccn_charbuf_destroy(&uri);	
 
 	struct ccn_signing_params sp = CCN_SIGNING_PARAMS_INIT;
@@ -117,7 +123,8 @@
 
 
 	if (pubid_out->length != sizeof(sp.pubid)){
-		printf("Size of pubid and sp.pubid is not equal");
+		if ( nlsr->debugging )
+			printf("Size of pubid and sp.pubid is not equal");
 		ccn_charbuf_destroy(&keyname);
 		ccn_charbuf_destroy(&pubid_out);
 		free(baseuri);
@@ -130,7 +137,8 @@
 
 	res=ccn_sign_content(nlsr->ccn,resultbuf,content_name,&sp,data,data_size);
 	if( res < 0 ){
-		printf("Content signing error \n");
+		if ( nlsr->debugging )
+			printf("Content signing error \n");
 		ccn_charbuf_destroy(&sp.template_ccnb);
 		ccn_charbuf_destroy(&keyid);
 		ccn_charbuf_destroy(&keyname);
@@ -170,8 +178,8 @@
 int 
 verify_key(const unsigned char *ccnb,size_t size, 
 										struct ccn_parsed_ContentObject *pco){
-
-	printf("verify key called\n");
+	if ( nlsr->debugging )
+		printf("verify key called\n");
 	int ret=-1;
 
 	if ( contain_key_name(ccnb, pco) == 1){
@@ -179,9 +187,11 @@
 		struct ccn_charbuf *key_name=get_key_name(ccnb, pco);
 		struct ccn_charbuf *key_uri = ccn_charbuf_create();
 		ccn_uri_append(key_uri, key_name->buf, key_name->length, 0);
-		printf("Key Name from Incoming Content: %s\n",ccn_charbuf_as_string(key_uri));
-		int res=get_key_type_from_key_name(key_name);		
-		printf("Key Type: %d \n",res);
+		if ( nlsr->debugging )
+			printf("Key Name from Incoming Content: %s\n",ccn_charbuf_as_string(key_uri));
+		int res=get_key_type_from_key_name(key_name);
+		if ( nlsr->debugging )		
+			printf("Key Type: %d \n",res);
 
 		struct ccn_charbuf *result = ccn_charbuf_create();
 		struct ccn_parsed_ContentObject temp_pco = {0};
@@ -194,10 +204,12 @@
 		int chk_verify=ccn_verify_content(nlsr->ccn,ccnb,pco);		
 
 		if ( chk_verify == 0 ){
-			printf("Verification Successful :)\n");
+			if ( nlsr->debugging )
+				printf("Verification Successful :)\n");
 
 			if ( counter == 3){
-				printf("Could not retrieve key by name !!!\n");
+				if ( nlsr->debugging )
+					printf("Could not retrieve key by name !!!\n");
 			}
 			else{
 				if ( res == ROOT_KEY ){
diff --git a/nlsr_km_util.c b/nlsr_km_util.c
index ee55252..6750c67 100644
--- a/nlsr_km_util.c
+++ b/nlsr_km_util.c
@@ -65,6 +65,44 @@
 	return key_name;
 }
 
+
+int 
+get_orig_router_from_key_name(struct ccn_charbuf *orig_router ,struct ccn_charbuf *name) 
+{
+	int res;	
+	struct ccn_indexbuf *name_comps;
+	
+	name_comps = ccn_indexbuf_create();
+	res = ccn_name_split(name, name_comps);
+	if ( res < 0 ){
+		ccn_indexbuf_destroy(&name_comps);
+		return res;
+	}
+	else{
+		res=ccn_name_chop(name, name_comps, -2);
+		if ( res < 0 ){
+			ccn_indexbuf_destroy(&name_comps);
+			return res;
+		}
+		else{
+			res=check_for_tag_component_in_name(name,name_comps,"R.N.Start");
+			if ( res > 0 ){
+				ccn_name_init(orig_router);	
+				ccn_name_append_components(orig_router,name->buf,
+										name_comps->buf[res+1], 
+										name_comps->buf[name_comps->n - 1]);
+			}
+			else{
+				ccn_indexbuf_destroy(&name_comps);
+				return -1;
+			}
+		}
+	}	
+
+	ccn_indexbuf_destroy(&name_comps);
+	return 0;
+}
+
 int
 check_for_name_component_in_name(const struct ccn_charbuf *name, 
 								const struct ccn_indexbuf *indx,
diff --git a/nlsr_km_util.h b/nlsr_km_util.h
index 8ad001f..204a592 100644
--- a/nlsr_km_util.h
+++ b/nlsr_km_util.h
@@ -20,6 +20,10 @@
 enum key_type
 get_key_type_from_key_name(struct ccn_charbuf *keyname); 
 
+int
+get_orig_router_from_key_name(struct ccn_charbuf *orig_router,
+									 struct ccn_charbuf *name);
+
 
 int
 appendLifetime(struct ccn_charbuf *cb, int lifetime);
diff --git a/nlsr_ndn.c b/nlsr_ndn.c
index e4b1378..b907570 100644
--- a/nlsr_ndn.c
+++ b/nlsr_ndn.c
@@ -761,6 +761,7 @@
 		}	
 		ccn_charbuf_destroy(&templ);
 	}
+
 	ccn_charbuf_destroy(&name);
 	free(int_name);
 }
diff --git a/nlsr_sync.c b/nlsr_sync.c
index 53652b5..fd884cb 100644
--- a/nlsr_sync.c
+++ b/nlsr_sync.c
@@ -30,6 +30,7 @@
 #include "nlsr_lsdb.h"
 #include "utility.h"
 #include "nlsr_km.h"
+#include "nlsr_km_util.h"
 
 
 char *
@@ -133,13 +134,16 @@
 	struct ccn_charbuf *temp=ccn_charbuf_create();
 	ccn_name_init(temp);	
 	ccn_name_append_components( temp,	interest_ccnb->buf,
-			interest_comps->buf[lsa_position+1], interest_comps->buf[interest_comps->n - 1]);
+								interest_comps->buf[lsa_position+1], 
+								interest_comps->buf[interest_comps->n - 1]);
 
 	struct ccn_charbuf *temp1=ccn_charbuf_create();
 	ccn_uri_append(temp1, temp->buf, temp->length, 0);
 
-	name_part->name=(char *)calloc(strlen(ccn_charbuf_as_string(temp1))+1,sizeof(char));
-	memcpy(name_part->name,ccn_charbuf_as_string(temp1),strlen(ccn_charbuf_as_string(temp1)));
+	name_part->name=(char *)calloc(strlen(ccn_charbuf_as_string(temp1))+1,
+																sizeof(char));
+	memcpy(name_part->name,ccn_charbuf_as_string(temp1),
+										strlen(ccn_charbuf_as_string(temp1)));
 	name_part->name[strlen(ccn_charbuf_as_string(temp1))]='\0';
 	name_part->length=strlen(ccn_charbuf_as_string(temp1))+1;
 
@@ -156,20 +160,22 @@
 
 
 
-	void 
-get_content_by_content_name(char *content_name, unsigned char **content_data)
+int 
+get_content_by_content_name(char *content_name, unsigned char **content_data,
+							char *orig_router)
 {
-
+	
+	int ret=-1;
 	struct ccn_charbuf *name = NULL;
 	struct ccn_charbuf *templ = NULL;
 	struct ccn_charbuf *resultbuf = NULL;
 	struct ccn_parsed_ContentObject pcobuf = { 0 };
 	int res;
-	int allow_stale = 0;
+	int allow_stale = 1;
 	int content_only = 1;
 	int scope = -1;
-	const unsigned char *ptr; 
-	size_t length;
+	const unsigned char *ptr,*ptr_in; 
+	size_t length,length_in;
 	int resolve_version = CCN_V_HIGHEST;
 	int timeout_ms = 3000;
 	const unsigned lifetime_default = CCN_INTEREST_LIFETIME_SEC << 12;
@@ -180,7 +186,8 @@
 	res = ccn_name_from_uri(name,content_name);
 	if (res < 0) {
 		fprintf(stderr, "Bad ccn URI: %s\n", content_name);
-		exit(1);
+		ccn_charbuf_destroy(&name);
+		return ret;
 	}
 
 	if (allow_stale || lifetime_l12 != lifetime_default || scope != -1) {
@@ -226,13 +233,53 @@
 		length = resultbuf->length;
 		if (content_only){
 			ccn_content_get_value(ptr, length, &pcobuf, &ptr, &length);
-			*content_data = (unsigned char *) calloc(length, sizeof(char *));
-			memcpy (*content_data, ptr, length);
+			struct ccn_parsed_ContentObject pcobuf1 = { 0 };
+			int chk_cont=ccn_parse_ContentObject(ptr,length,&pcobuf1,NULL);
+			printf("Content Parsing result: %d\n",chk_cont); 
+			if ( contain_key_name(ptr, &pcobuf1) == 1){
+				struct ccn_charbuf *key_name=get_key_name(ptr, &pcobuf1);
+				struct ccn_charbuf *orig_router_kn=ccn_charbuf_create();
+				res=get_orig_router_from_key_name(orig_router_kn,key_name);
+				if( res == 0){
+					struct ccn_charbuf *rtr_uri = ccn_charbuf_create();
+					ccn_uri_append(rtr_uri, orig_router_kn->buf,
+													orig_router_kn->length, 0);
+					printf("Orig Router from Key name: %s\n",
+												ccn_charbuf_as_string(rtr_uri));
+					
+					if( strcmp(orig_router,ccn_charbuf_as_string(rtr_uri)) == 0){
+						
+						int res_verify=verify_key(ptr,pcobuf1.offset[CCN_PCO_E],
+																	&pcobuf1);
+
+						if ( res_verify != 0 ){
+							printf("Error in verfiying keys !! :( \n");
+						}
+						else{
+							printf("Key verification is successful :)\n");
+							ptr_in=ptr;
+							length_in=length;
+							ccn_content_get_value(ptr_in, length_in, &pcobuf1, 
+															&ptr_in, &length_in);
+							*content_data = (unsigned char *) calloc(length_in, 
+																sizeof(char *));
+							memcpy (*content_data, ptr_in, length_in);
+							ret=0;
+						}
+					}
+					ccn_charbuf_destroy(&rtr_uri);
+				}
+				ccn_charbuf_destroy(&key_name);
+				ccn_charbuf_destroy(&orig_router_kn);	
+			}
 		}
 	}
+
 	ccn_charbuf_destroy(&resultbuf);
 	ccn_charbuf_destroy(&templ);
-	ccn_charbuf_destroy(&name);   
+	ccn_charbuf_destroy(&name);
+
+	return ret;   
 }
 
 void 
@@ -304,7 +351,8 @@
 				printf("	Name Prefix length: %d\n",name_length);
 			}
 
-			build_and_install_others_name_lsa(orig_router,ls_type,ls_id,orig_time,isValid,np);
+			build_and_install_others_name_lsa(orig_router,ls_type,ls_id,
+														orig_time,isValid,np);
 
 			print_name_lsdb();
 
@@ -322,7 +370,8 @@
 				printf("	No Link  : %d\n",no_link);
 				printf("	Data  : %s\n",data);
 			}
-			build_and_install_others_adj_lsa(orig_router,ls_type,orig_time,no_link,data);
+			build_and_install_others_adj_lsa(orig_router,ls_type,orig_time,
+																no_link,data);
 		}
 		else if ( ls_type == LS_TYPE_COR )
 		{
@@ -340,13 +389,14 @@
 				printf("	Cor R	    : %f\n",r);
 				printf("	Cor Theta   : %f\n",theta);
 			}
-			build_and_install_others_cor_lsa(orig_router,ls_type,orig_time, (double)r, (double)theta);	
+			build_and_install_others_cor_lsa(orig_router,ls_type,orig_time, 
+													(double)r, (double)theta);	
 		}
 
 	}
 }
 
-	void
+void
 process_content_from_sync (struct ccn_charbuf *content_name, 
 								struct ccn_indexbuf *components)
 {
@@ -393,42 +443,63 @@
 	{	
 		lsid=rem;
 		ls_id=atoi(rem);
-		ccn_name_comp_get(content_name->buf, components,components->n-2-2,&third_last_comp, &comp_size);
+		ccn_name_comp_get(content_name->buf, components,components->n-2-2,
+												&third_last_comp, &comp_size);
 		lst=strtok_r((char *)third_last_comp,sep,&rem);
 		lst=rem;
 		ls_type=atoi(lst);
-		ccn_name_comp_get(content_name->buf, components,components->n-2,&origtime, &comp_size);
+		ccn_name_comp_get(content_name->buf, components,components->n-2,
+														&origtime, &comp_size);
 		ccn_name_chop(content_name,components,-3);
 		get_name_part(orig_router,content_name,components,0);
 
 		if ( nlsr->debugging )
-			printf("Orig Router: %s Ls Type: %d Ls id: %ld Orig Time: %s\n",orig_router->name,ls_type,ls_id,origtime);
+			printf("Orig Router: %s Ls Type: %d Ls id: %ld Orig Time: %s\n",
+									orig_router->name,ls_type,ls_id,origtime);
 
 		int lsa_life_time=get_time_diff(time_stamp,(char *)origtime);
 		if ( nlsr->debugging )
 			printf("LSA Life time: %d\n",lsa_life_time);
 
-		if ( (strcmp(orig_router->name,nlsr->router_name) == 0 && lsa_life_time < nlsr->lsa_refresh_time) 
-				|| (strcmp(orig_router->name,nlsr->router_name) != 0 && lsa_life_time < nlsr->router_dead_interval) )
+		if ( (strcmp(orig_router->name,nlsr->router_name) == 0 && 
+					lsa_life_time < nlsr->lsa_refresh_time) 
+				|| (strcmp(orig_router->name,nlsr->router_name) != 0 
+				&& lsa_life_time < nlsr->router_dead_interval) )
 		{
-			int is_new_name_lsa=check_is_new_name_lsa(orig_router->name,(char *)lst,(char *)lsid,(char *)origtime);
+			int is_new_name_lsa=check_is_new_name_lsa(orig_router->name,
+									(char *)lst,(char *)lsid,(char *)origtime);
 			if ( is_new_name_lsa == 1 )
 			{
 				if ( nlsr->debugging )
 					printf("New NAME LSA.....\n");	
-				get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
-				if ( nlsr->debugging )
-					printf("Content Data: %s \n",content_data);
-				process_incoming_sync_content_lsa(content_data);
+				int chk_con=get_content_by_content_name(ccn_charbuf_as_string(uri), 
+												&content_data,orig_router->name);
+				if ( chk_con == 0 ){
+					if ( nlsr->debugging )
+						printf("Content Data: %s \n",content_data);
+					process_incoming_sync_content_lsa(content_data);
+				}
+				else{
+					if ( nlsr->debugging )
+						printf("Verification failed. No content given back\n");
+				}
 			}
 			else 
 			{
 				if ( nlsr->debugging )
 					printf("Name LSA / Newer Name LSA already xists in LSDB\n");
-				get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
+				int chk_con=get_content_by_content_name(ccn_charbuf_as_string(uri)
+											, &content_data,orig_router->name);
 
-				if ( nlsr->debugging )
-					printf("Content Data: %s \n",content_data);
+				if ( chk_con == 0 ){
+					if ( nlsr->debugging )
+						printf("Content Data: %s \n",content_data);
+					process_incoming_sync_content_lsa(content_data);
+				}
+				else{
+					if ( nlsr->debugging )
+						printf("Verification failed. No content given back\n");
+				}
 			}
 		}
 		else 
@@ -467,19 +538,34 @@
 				{
 					if ( nlsr->debugging )
 						printf("New Adj LSA.....\n");	
-					get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
+					int chk_con=get_content_by_content_name(ccn_charbuf_as_string(uri), 
+												&content_data,orig_router->name);
 
-					if ( nlsr->debugging )
-						printf("Content Data: %s \n",content_data);
-					process_incoming_sync_content_lsa(content_data);			
+					if ( chk_con == 0 ){
+						if ( nlsr->debugging )
+							printf("Content Data: %s \n",content_data);
+						process_incoming_sync_content_lsa(content_data);
+					}
+					else{
+						if ( nlsr->debugging )
+							printf("Verification failed. No content given back\n");
+					}		
 				}
 				else
 				{
 					if ( nlsr->debugging )
 						printf("Adj LSA / Newer Adj LSA already exists in LSDB\n");
-					get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
-					if ( nlsr->debugging )
-						printf("Content Data: %s \n",content_data);
+					int chk_con=get_content_by_content_name(ccn_charbuf_as_string(uri), 
+												&content_data,orig_router->name);
+					if ( chk_con == 0 ){
+						if ( nlsr->debugging )
+							printf("Content Data: %s \n",content_data);
+						process_incoming_sync_content_lsa(content_data);
+					}
+					else{
+						if ( nlsr->debugging )
+							printf("Verification failed. No content given back\n");
+					}
 				}
 			}
 			else 
@@ -514,20 +600,35 @@
 				{
 					if ( nlsr->debugging )
 						printf("New Cor LSA.....\n");	
-					get_content_by_content_name(ccn_charbuf_as_string(uri), 
-																&content_data);
+					int chk_con=get_content_by_content_name(ccn_charbuf_as_string(uri), 
+																&content_data,
+															orig_router->name);
 
-					if ( nlsr->debugging )
-						printf("Content Data: %s \n",content_data);
-					process_incoming_sync_content_lsa(content_data);			
+					if ( chk_con == 0 ){
+						if ( nlsr->debugging )
+							printf("Content Data: %s \n",content_data);
+						process_incoming_sync_content_lsa(content_data);
+					}
+					else{
+						if ( nlsr->debugging )
+							printf("Verification failed. No content given back\n");
+					}		
 				}
 				else
 				{
 					if ( nlsr->debugging )
 						printf("Cor LSA / Newer Cor LSA already exists in LSDB\n");
-					get_content_by_content_name(ccn_charbuf_as_string(uri), &content_data);
-					if ( nlsr->debugging )
-						printf("Content Data: %s \n",content_data);
+					int chk_con=get_content_by_content_name(ccn_charbuf_as_string(uri), 
+												&content_data,orig_router->name);
+					if ( chk_con == 0 ){
+						if ( nlsr->debugging )
+							printf("Content Data: %s \n",content_data);
+						process_incoming_sync_content_lsa(content_data);
+					}
+					else{
+						if ( nlsr->debugging )
+							printf("Verification failed. No content given back\n");
+					}
 				}
 			}
 			else 
@@ -648,15 +749,30 @@
 		return -1;
 	}
 
-	blockread = 0;
+	struct ccn_charbuf *resultbuf=ccn_charbuf_create();
 
-	blockread=strlen(data)+1;
+	sign_content_with_user_defined_keystore(name,
+										resultbuf,
+										data,
+										strlen(data),
+										nlsr->keystore_path,
+										nlsr->keystore_passphrase,
+										nlsr->root_key_prefix,
+										nlsr->site_name,
+										nlsr->router_name);	
+
+
+	//blockread = 0;
+	//blockread=strlen(data)+1;
+	blockread=resultbuf->length;
 
 	if (blockread > 0) {
-		res = ccn_seqw_write(w, data, blockread);	
+		//res = ccn_seqw_write(w, data, blockread);
+		res = ccn_seqw_write(w, resultbuf->buf, resultbuf->length);	
 		while (res == -1) {
 			ccn_run(temp_ccn,100);
-			res = ccn_seqw_write(w, data, blockread);
+			//res = ccn_seqw_write(w, data, blockread);
+			res = ccn_seqw_write(w, resultbuf->buf, resultbuf->length);	
 		}
 	}
 
@@ -671,7 +787,7 @@
 	create_sync_slice(char *topo_prefix, char *slice_prefix)
 {
 	int res;
-	struct ccn *handle; //obaid: probably we don't need it use the same handle i.e. nlsr->ccn
+	struct ccn *handle; 
 	struct ccns_slice *slice;
 	struct ccn_charbuf *prefix = ccn_charbuf_create();
 	struct ccn_charbuf *topo = ccn_charbuf_create();
@@ -702,7 +818,6 @@
 
 
 	res = ccns_write_slice(handle, slice, slice_name);
-	//res = ccns_write_slice(nlsr->ccn, slice, slice_name);
 
 	//01/31/2013
 	ccns_slice_destroy(&slice);
diff --git a/utility.c b/utility.c
index ece8dea..51afa86 100644
--- a/utility.c
+++ b/utility.c
@@ -92,7 +92,7 @@
 }
 
 char *
-get_current_timestamp_micro_v2()
+get_current_timestamp_micro_v2(void)
 {
 	struct timeval now; 
 	gettimeofday(&now, NULL);
@@ -144,21 +144,15 @@
 	char *ret;
 	char *logExt;
 	char *defaultLogDir;	
-	//int status;
 	struct stat st;
 	int isLogDirExists=0;
 	char *time=getLocalTimeStamp();
 
-	pwdbuffer=(char *)malloc(sizeof(char)*200);
-	memset(pwdbuffer,0,200);		
-	logDir=(char *)malloc(sizeof(char)*200);
-	memset(logDir,0,200);
-	logFileName=(char *)malloc(sizeof(char)*200);
-	memset(logFileName,0,200);
-	logExt=(char *)malloc(sizeof(char)*5);
-	memset(logExt,0,5);
-	defaultLogDir=(char *)malloc(sizeof(char)*10);
-	memset(defaultLogDir,0,10);
+	pwdbuffer=(char *)calloc(200,sizeof(char));		
+	logDir=(char *)calloc(200,sizeof(char));
+	logFileName=(char *)calloc(200,sizeof(char));
+	logExt=(char *)calloc(5,sizeof(char));
+	defaultLogDir=(char *)calloc(10,sizeof(char));
 
 	memcpy(logExt,".log",4);
 	logExt[4]='\0';
@@ -192,8 +186,7 @@
 			memcpy(logDir,pd.pw_dir,strlen(pd.pw_dir)+1);	
 			memcpy(logDir+strlen(logDir),defaultLogDir,strlen(defaultLogDir)+1);	
 			if(stat(logDir,&st) != 0)
-				mkdir(logDir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);	
-			//printf("Status: %d\n",status);
+				mkdir(logDir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
 		}
 	}	
  	memcpy(logFileName,logDir,strlen(logDir)+1);	
@@ -220,6 +213,39 @@
 }
 
 
+char *
+get_current_user_home(void){
+
+	const char *homeDir = getenv("HOME");
+
+    if (!homeDir ) {
+        struct passwd* pwd = getpwuid(getuid());
+        if (pwd)
+           homeDir = pwd->pw_dir;
+    }
+    
+	char *home=(char *)calloc(strlen(homeDir)+1,sizeof(char));
+	memcpy(home,homeDir,strlen(homeDir)+1);
+
+	return home;
+}
+
+
+char * 
+get_current_user_default_keystore(void){
+
+	char *home=get_current_user_home();
+	char *def_keystore=(char *)calloc(strlen(home)+strlen("/.ccnx") + 
+						strlen("/.ccnx_keystore")+1,sizeof(char));
+	memcpy(def_keystore,home,strlen(home));
+	memcpy(def_keystore+strlen(def_keystore),"/.ccnx/.ccnx_keystore",
+			strlen("/.ccnx/.ccnx_keystore"));
+	def_keystore[strlen(def_keystore)]='\0';
+	free(home);
+
+	return def_keystore;
+}
+
 void 
 writeLogg(const char *source_file, const char *function, const int line, const char *format, ...)
 {
diff --git a/utility.h b/utility.h
index e681a0e..dc935da 100644
--- a/utility.h
+++ b/utility.h
@@ -11,7 +11,9 @@
 void writeLogg(const char *source_file, const char *function, const int line, const char *format, ...);
 struct sockaddr_in * get_ip_from_hostname(char *hostname);
 int get_ip_from_hostname_02(char * hostname , char* ip);
-char * get_current_timestamp_micro_v2();
+char * get_current_timestamp_micro_v2(void);
+char * get_current_user_home(void);
+char * get_current_user_default_keystore(void);
 
 int add_ccn_uri_name(struct ccn_charbuf *res_name, struct ccn_charbuf *add);
 
