diff --git a/macbook.conf b/macbook.conf
index b78921a..2bfe740 100644
--- a/macbook.conf
+++ b/macbook.conf
@@ -1,8 +1,8 @@
 #----configuration file for macbook----------
 #
 router-name /ndn/memphis.edu/netlab/macbook/
-ccnneighbor /ndn/memphis.edu/dunhall/castor face11
-ccnneighbor /ndn/memphis.edu/netlab/pollux face13
+ccnneighbor /ndn/memphis.edu/dunhall/castor face9
+ccnneighbor /ndn/memphis.edu/netlab/pollux face11
 ccnname /ndn/memphis.edu/patterson
 ccnname /ndn/memphis.edu/houston/
 #------lsdb-synch-interval-----
@@ -11,6 +11,6 @@
 interest-resend-time 5
 lsa-refresh-time 600
 router-dead-interval 900
-multi-path-face-num 2
+multi-path-face-num 2 
 
 logdir /Users/akmhoque/NLSR2.0
diff --git a/nlsr_npt.c b/nlsr_npt.c
index 5116b4d..25c3c38 100644
--- a/nlsr_npt.c
+++ b/nlsr_npt.c
@@ -91,14 +91,17 @@
 			for ( i=0; i < num_face ; i++)
 			{
 				int face=faces[i];
-				res_fle = hashtb_seek(ef, &face, sizeof(face), 0);
-				
-				if ( res_fle == HT_NEW_ENTRY )
+				if ( face != NO_FACE && face != ZERO_FACE)
 				{
-					struct face_list_entry *fle=(struct face_list_entry *)malloc(sizeof(struct face_list_entry));
-					fle=ef->data;
-					fle->next_hop_face=face;
-					fle->route_cost=route_costs[i];
+					res_fle = hashtb_seek(ef, &face, sizeof(face), 0);
+				
+					if ( res_fle == HT_NEW_ENTRY )
+					{
+						struct face_list_entry *fle=(struct face_list_entry *)malloc(sizeof(struct face_list_entry));
+						fle=ef->data;
+						fle->next_hop_face=face;
+						fle->route_cost=route_costs[i];
+					}
 				}
 		
 			}
@@ -144,16 +147,18 @@
 			for ( i=0; i< num_face ; i ++)
 			{
 				int face=faces[i];
-				res_fle = hashtb_seek(ef, &face, sizeof(face), 0);
-				
-				if ( res_fle == HT_NEW_ENTRY )
+				if ( face != NO_FACE && face != ZERO_FACE)
 				{
-					struct face_list_entry *fle=(struct face_list_entry *)malloc(sizeof(struct face_list_entry));
-					fle=ef->data;
-					fle->next_hop_face=face;
-					fle->route_cost=route_costs[i];
+					res_fle = hashtb_seek(ef, &face, sizeof(face), 0);
+				
+					if ( res_fle == HT_NEW_ENTRY )
+					{
+						struct face_list_entry *fle=(struct face_list_entry *)malloc(sizeof(struct face_list_entry));
+						fle=ef->data;
+						fle->next_hop_face=face;
+						fle->route_cost=route_costs[i];
+					}
 				}
-		
 			}
 			hashtb_end(ef);
 		}
@@ -229,24 +234,28 @@
 			
 			for( j=first_face; j>= last_face; j--)
 			{
-				if ( j == last_face )
+				//printf("Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
+				//printf("Orig Router: %s \n",orig_router);
+				//printf("Name Prefix: %s \n",nle->name);
+				//printf("Is neighbor Orig Router: %d \n",is_neighbor(orig_router));
+				//printf("Is neighbor Name Prefix: %d \n",is_neighbor(nle->name));
+
+				if ( is_neighbor(orig_router) == 0 )
 				{
-					if( is_neighbor(nle->name) == 0 )
-					{
-						printf("Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
-						add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_REG, faces[j]);
-					}
+					printf("Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
+					add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_REG, faces[j]);	
 				}
 				else 
 				{
-					if ( num_face-nlsr->multi_path_face_num > 0 && is_neighbor(orig_router) == 0 )
+					if ( j == last_face && is_neighbor(nle->name)==0)
 					{
 						printf("Adding face: Name:%s Face: %d\n",nle->name,faces[j]);
 						add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_REG, faces[j]);
 					}
 				}
 			}
-
+			
+			
 			hashtb_next(enle);
 		}
 		hashtb_end(enle);
@@ -335,22 +344,21 @@
 
 			for( j=first_face; j>= last_face; j--)
 			{
-				if ( j == last_face )
+
+				if ( is_neighbor(orig_router) == 0 )
 				{
-					if( is_neighbor(nle->name) == 0 )
-					{
-						printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
-						add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, faces[j]);
-					}
+					printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
+					add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, faces[j]);	
 				}
 				else 
 				{
-					if ( num_face-nlsr->multi_path_face_num > 0 && is_neighbor(orig_router) == 0 )
+					if ( j == last_face && is_neighbor(nle->name)==0)
 					{
 						printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
 						add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, faces[j]);
 					}
 				}
+				
 			}
 			
 			
@@ -729,6 +737,9 @@
 						nle=enle->data;
 
 						//delete all the fib entries here
+						printf("Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
+
+						
 						if( is_neighbor(nle->name) == 0 )
 						{
 							printf("Deleting face: Name:%s Face: %d\n",nle->name,fle->next_hop_face);
@@ -926,17 +937,14 @@
 			
 			for( j=first_face; j>= last_face; j--)
 			{
-				if ( j == last_face )
+				if ( is_neighbor(orig_router) == 0 )
 				{
-					if( is_neighbor(nle->name) == 0 )
-					{
-						printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
-						add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, faces[j]);
-					}
+					printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
+					add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, faces[j]);	
 				}
 				else 
 				{
-					if ( num_face-nlsr->multi_path_face_num > 0 && is_neighbor(orig_router) == 0 )
+					if ( j == last_face && is_neighbor(nle->name)==0)
 					{
 						printf("Deleting face: Name:%s Face: %d\n",nle->name,faces[j]);
 						add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)nle->name, OP_UNREG, faces[j]);
diff --git a/nlsr_npt.h b/nlsr_npt.h
index c191579..587c8be 100644
--- a/nlsr_npt.h
+++ b/nlsr_npt.h
@@ -2,6 +2,7 @@
 #define _NLSR_NPT_H_
 
 #define NO_FACE -12345
+#define ZERO_FACE 0
 
 struct npt_entry
 {
diff --git a/nlsr_route.c b/nlsr_route.c
index fa6eef2..a5956d8 100644
--- a/nlsr_route.c
+++ b/nlsr_route.c
@@ -56,6 +56,7 @@
 		do_old_routing_table_updates();
 		clear_old_routing_table();	
 		print_routing_table();
+		print_npt();
 
 		int i;
 		int **adj_matrix;
