diff --git a/nlsr.c b/nlsr.c
index 108f7d1..dda2525 100644
--- a/nlsr.c
+++ b/nlsr.c
@@ -26,6 +26,10 @@
 #include "utility.h"
 #include "nlsr_npl.h"
 #include "nlsr_adl.h"
+#include "nlsr_npt.h"
+#include "nlsr_route.h"
+
+
 
 struct option longopts[] =
 {
@@ -343,7 +347,25 @@
 	hashtb_destroy(&nlsr->lsdb->name_lsdb);
 	hashtb_destroy(&nlsr->lsdb->adj_lsdb);
 	hashtb_destroy(&nlsr->pit_alsa);
-	
+	hashtb_destroy(&nlsr->routing_table);
+
+
+	int i, npt_element;
+	struct npt_entry *ne;
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+    	hashtb_start(nlsr->npt, e);
+	npt_element=hashtb_n(nlsr->npt);
+	for(i=0;i<npt_element;i++)
+	{
+		ne=e->data;
+		hashtb_destroy(&ne->next_hop_table);	
+		hashtb_next(e);		
+	}
+
+	hashtb_end(e);
+	hashtb_destroy(&nlsr->npt);
+
 	
 	ccn_schedule_destroy(&nlsr->sched);
 	ccn_destroy(&nlsr->ccn);
@@ -385,6 +407,10 @@
 	nlsr->npl = hashtb_create(sizeof(struct name_prefix), &param_npl);
 	struct hashtb_param param_pit_alsa = {0};	
 	nlsr->pit_alsa = hashtb_create(sizeof(struct pneding_interest), &param_pit_alsa);
+	struct hashtb_param param_npt = {0};	
+	nlsr->npt = hashtb_create(sizeof(struct npt_entry), &param_npt);
+	struct hashtb_param param_rte = {0};	
+	nlsr->routing_table = hashtb_create(sizeof(struct routing_table_entry), &param_rte);
 
 	nlsr->in_interest.p = &incoming_interest;
 	nlsr->in_content.p = &incoming_content;
@@ -427,7 +453,7 @@
 {
     	int res;
     	char *config_file;
-	//int daemon_mode;
+	int daemon_mode;
 
 	init_nlsr();	
     	
@@ -436,7 +462,7 @@
         	switch (res) 
 		{
 			case 'd':
-				//daemon_mode = 1;
+				daemon_mode = 1;
 				break;
 			case 'f':
 				config_file = optarg;
@@ -495,7 +521,6 @@
 		{
         		res = ccn_run(nlsr->ccn, 500);
 		}
-
 		if (!(nlsr->sched && nlsr->ccn))
 		{	      
 			break;
diff --git a/nlsr.h b/nlsr.h
index 41df3c5..65500fa 100644
--- a/nlsr.h
+++ b/nlsr.h
@@ -42,6 +42,8 @@
 	struct hashtb *npl;
 	struct hashtb *pit_alsa;
 	struct hashtb *map;
+	struct hashtb *npt;
+	struct hashtb *routing_table;
 
 	struct linkStateDatabase *lsdb;
 
diff --git a/nlsr_lsdb.c b/nlsr_lsdb.c
index 4df0840..f271e50 100644
--- a/nlsr_lsdb.c
+++ b/nlsr_lsdb.c
@@ -24,6 +24,7 @@
 #include "nlsr_npl.h"
 #include "nlsr_adl.h"
 #include "nlsr_route.h"
+#include "nlsr_npt.h"
 
 void
 set_new_lsdb_version(void)
@@ -191,7 +192,26 @@
 
 		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);		
+		printf("New Version Number of LSDB: %s \n",nlsr->lsdb->lsdb_version);	
+
+		int next_hop=get_next_hop(new_name_lsa->header->orig_router->name);
+		if ( next_hop == NO_NEXT_HOP )
+		{
+			int check=add_npt_entry(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name,NO_FACE);
+			if ( check == HT_NEW_ENTRY )
+			{
+				printf("Added in npt \n");
+			}
+		}
+		else 
+		{
+			int check=add_npt_entry(new_name_lsa->header->orig_router->name,new_name_lsa->name_prefix->name,next_hop);
+			if ( check == HT_NEW_ENTRY )
+			{
+				printf("Added in npt \n");
+			}
+
+		}
 
 	}
 	else if(res == HT_OLD_ENTRY)
@@ -482,7 +502,9 @@
 		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)
 	{
@@ -509,6 +531,8 @@
 			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);
+
 		}
 
 	}
diff --git a/nlsr_npt.c b/nlsr_npt.c
new file mode 100644
index 0000000..f3b5fc8
--- /dev/null
+++ b/nlsr_npt.c
@@ -0,0 +1,208 @@
+#include<stdio.h>
+#include<string.h>
+#include<stdlib.h>
+#include <unistd.h>
+#include <getopt.h>
+#include <sys/time.h>
+#include <assert.h>
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <sys/types.h>
+#include <signal.h>
+
+
+
+#include <ccn/ccn.h>
+#include <ccn/uri.h>
+#include <ccn/keystore.h>
+#include <ccn/signing.h>
+#include <ccn/schedule.h>
+#include <ccn/hashtb.h>
+
+#include "nlsr.h"
+#include "nlsr_npt.h"
+#include "nlsr_fib.h"
+
+void 
+make_npt_key(char *key, char *orig_router, char *name_prefix)
+{
+	memcpy(key+strlen(key),orig_router,strlen(orig_router));
+	memcpy(key+strlen(key),name_prefix,strlen(name_prefix));
+}
+
+int
+add_npt_entry(char *orig_router, char *name_prefix, int face)
+{
+	if ( strcmp(orig_router,nlsr->router_name)== 0)
+	{
+		return -1;
+	}
+	
+	struct npt_entry *ne=(struct npt_entry*)malloc(sizeof(struct npt_entry ));
+	
+	int res,res_nht;
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee; 	
+    	
+	char *key=(char *)malloc(strlen(orig_router)+strlen(name_prefix)+2);
+	memset(key,0,strlen(orig_router)+strlen(name_prefix)+2);
+
+	make_npt_key(key,orig_router,name_prefix);
+
+   	hashtb_start(nlsr->npt, e);
+    	res = hashtb_seek(e, key, strlen(key), 0);
+
+	if(res == HT_NEW_ENTRY)
+	{
+		ne=e->data;
+
+		ne->name_prefix=(char *)malloc(strlen(name_prefix)+1);
+		memset(ne->name_prefix,0,strlen(name_prefix)+1);
+		memcpy(ne->name_prefix,name_prefix,strlen(name_prefix));
+
+		/* Adding Orig Router in Orig Router List */
+
+		struct next_hop_entry *nhe=(struct next_hop_entry *)malloc(sizeof(struct next_hop_entry));
+
+		struct hashtb_param param_nht = {0};
+		ne->next_hop_table= hashtb_create(sizeof(struct next_hop_entry ), &param_nht);
+
+		struct hashtb_enumerator eenht;
+    		struct hashtb_enumerator *enht = &eenht;
+
+		hashtb_start(ne->next_hop_table, enht);
+		res_nht = hashtb_seek(enht, orig_router, strlen(orig_router), 0);
+
+		if(res_nht == HT_NEW_ENTRY )
+		{
+			nhe=enht->data;
+			nhe->orig_router=(char *)malloc(strlen(orig_router)+1);
+			memset(nhe->orig_router,0,strlen(orig_router)+1);
+			memcpy(nhe->orig_router,orig_router,strlen(orig_router));
+
+			nhe->next_hop_face=face;
+
+		}
+		hashtb_end(enht);
+
+		if ( face != NO_FACE )
+		{
+			add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)name_prefix, OP_REG, face);
+		}
+	
+	}
+	else if (res == HT_OLD_ENTRY)
+	{
+		free(ne);
+		struct npt_entry *one;
+
+		one=e->data;
+		
+		struct next_hop_entry *nhe=(struct next_hop_entry *)malloc(sizeof(struct next_hop_entry));
+		struct hashtb_param param_nht = {0};
+		ne->next_hop_table= hashtb_create(sizeof(struct next_hop_entry ), &param_nht);
+
+		struct hashtb_enumerator eenht;
+    		struct hashtb_enumerator *enht = &eenht;
+
+		hashtb_start(one->next_hop_table, enht);
+		res_nht = hashtb_seek(enht, orig_router, strlen(orig_router), 0);
+
+		if(res_nht == HT_NEW_ENTRY )
+		{
+			nhe=enht->data;
+			nhe->orig_router=(char *)malloc(strlen(orig_router)+1);
+			memset(nhe->orig_router,0,strlen(orig_router)+1);
+			memcpy(nhe->orig_router,orig_router,strlen(orig_router));
+
+			nhe->next_hop_face=face;
+
+			if ( face != NO_FACE )
+			{
+				add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)name_prefix, OP_REG, face);
+			}
+
+		}
+		else if ( res_nht == HT_OLD_ENTRY)
+		{
+			free(nhe);
+			struct next_hop_entry *onhe;
+			onhe=enht->data;
+
+			if(onhe->next_hop_face != face )
+			{
+				if ( onhe->next_hop_face != NO_FACE )
+				{
+					add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)name_prefix, OP_UNREG, onhe->next_hop_face);
+				}
+
+				if ( face != NO_FACE )
+				{
+					add_delete_ccn_face_by_face_id(nlsr->ccn, (const char *)name_prefix, OP_REG, onhe->next_hop_face);
+				}
+
+				onhe->next_hop_face=face;
+
+			}			
+
+		}
+		hashtb_end(enht);
+		
+		
+
+	}
+	hashtb_end(e);
+
+	free(key);
+	return res;
+}
+
+
+void 
+print_npt(void)
+{
+	printf("\n");
+	printf("print_npt called\n\n");
+	int i, npt_element;
+	
+	struct npt_entry *ne;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+    	
+    	hashtb_start(nlsr->npt, e);
+	npt_element=hashtb_n(nlsr->npt);
+
+	for(i=0;i<npt_element;i++)
+	{
+		printf("\n");
+		printf("----------NPT ENTRY %d------------------\n",i+1);
+		ne=e->data;
+		printf(" Name Prefix: %s \n",ne->name_prefix);
+		
+		struct next_hop_entry *nhe;
+		struct hashtb_enumerator eenht;
+    		struct hashtb_enumerator *enht = &eenht;
+
+		int j, nht_element;
+		hashtb_start(ne->next_hop_table, enht);
+		nht_element=hashtb_n(ne->next_hop_table);	
+
+		for (j=0;j<nht_element;j++)
+		{
+			nhe=enht->data;
+			printf(" Origination Router: %s \n",nhe->orig_router);
+			nhe->next_hop_face == NO_FACE ? printf(" Next Hop Face: NO_NEXT_HOP \n") : printf(" Next Hop Face: %d \n", nhe->next_hop_face);
+
+			hashtb_next(enht);
+		}
+		hashtb_end(enht);
+			
+		hashtb_next(e);		
+	}
+
+	hashtb_end(e);
+
+	printf("\n");
+}
diff --git a/nlsr_npt.h b/nlsr_npt.h
new file mode 100644
index 0000000..48ef6d4
--- /dev/null
+++ b/nlsr_npt.h
@@ -0,0 +1,22 @@
+#ifndef _NLSR_NPT_H_
+#define _NLSR_NPT_H_
+
+#define NO_FACE -12345
+
+struct npt_entry
+{
+	char *name_prefix;
+	struct hashtb *next_hop_table;
+};
+
+struct next_hop_entry
+{
+	char *orig_router;
+	int next_hop_face;
+};
+
+
+int add_npt_entry(char *orig_router, char *name_prefix, int face);
+void print_npt(void);
+
+#endif
diff --git a/nlsr_route.c b/nlsr_route.c
index 8d47f3e..61bf3dc 100644
--- a/nlsr_route.c
+++ b/nlsr_route.c
@@ -22,6 +22,7 @@
 #include "nlsr.h"
 #include "nlsr_route.h"
 #include "nlsr_lsdb.h"
+#include "nlsr_npt.h"
 
 int
 route_calculate(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags)
@@ -31,13 +32,19 @@
 	if( ! nlsr->is_build_adj_lsa_sheduled )
 	{
 		/* Calculate Route here */
-		
+		print_routing_table();
+		print_npt();		
+
 		struct hashtb_param param_me = {0};
 		nlsr->map = hashtb_create(sizeof(struct map_entry), &param_me);
 		make_map();
 		assign_mapping_number();		
 		print_map();
 
+		 
+		do_old_routing_table_updates();
+	
+
 		int i;
 		int **adj_matrix;
 		int map_element=hashtb_n(nlsr->map);
@@ -56,7 +63,7 @@
 		
 		print_all_path_from_source(parent,source);
 
-	
+		
 		
 		for(i = 0; i < map_element; i++)
 		{
@@ -453,4 +460,147 @@
 	}
 }
 
+int 
+get_next_hop(char *dest_router)
+{
+	struct routing_table_entry *rte;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee; 	
+    	int res,ret;
+
+   	hashtb_start(nlsr->routing_table, e);
+    	res = hashtb_seek(e, dest_router, strlen(dest_router), 0);
+
+	if( res == HT_OLD_ENTRY )
+	{
+		rte=e->data;
+		ret=rte->next_hop_face;
+	}
+	else if(res == HT_NEW_ENTRY)
+	{
+		hashtb_delete(e);
+		ret=NO_NEXT_HOP;
+	}
+
+	hashtb_end(e);	
+
+	return ret;
+}
+
+void
+add_next_hop_router(char *dest_router)
+{
+	if ( strcmp(dest_router,nlsr->router_name)== 0)
+	{
+		return ;
+	}
+
+	struct routing_table_entry *rte=(struct routing_table_entry *)malloc(sizeof(struct routing_table_entry));
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee; 	
+    	int res;
+
+   	hashtb_start(nlsr->routing_table, e);
+    	res = hashtb_seek(e, dest_router, strlen(dest_router), 0);
+
+	if( res == HT_NEW_ENTRY )
+	{
+		rte=e->data;
+		rte->dest_router=(char *)malloc(strlen(dest_router)+1);
+		memset(rte->dest_router,0,strlen(dest_router)+1);
+		memcpy(rte->dest_router,dest_router,strlen(dest_router));
+		rte->next_hop_face=NO_NEXT_HOP;
+	}
+	hashtb_end(e);
+
+}
+
+void 
+add_next_hop_from_lsa_adj_body(char *body, int no_link)
+{
+
+	int i=0;
+	char *lsa_data=(char *)malloc(strlen(body)+1);
+	memset(	lsa_data,0,strlen(body)+1);
+	memcpy(lsa_data,body,strlen(body)+1);
+	char *sep="|";
+	char *rem;
+	char *rtr_id;
+	char *length;
+	char *face;
+	char *metric;
+
+	if(no_link >0 )
+	{
+		rtr_id=strtok_r(lsa_data,sep,&rem);
+		length=strtok_r(NULL,sep,&rem);
+		face=strtok_r(NULL,sep,&rem);
+		metric=strtok_r(NULL,sep,&rem);
+
+		//printf("		Link %d	 	\n",i+1);
+		//printf("		Neighbor		 : %s	\n",rtr_id);
+		//printf("		Neighbor Length		 : %s	\n",length);
+		//printf("		Connecting Face		 : %s	\n",face);
+		//printf("		Metric			 : %s	\n",metric);
+
+		add_next_hop_router(rtr_id);
+
+		for(i=1;i<no_link;i++)
+		{
+			rtr_id=strtok_r(NULL,sep,&rem);
+			length=strtok_r(NULL,sep,&rem);
+			face=strtok_r(NULL,sep,&rem);
+			metric=strtok_r(NULL,sep,&rem);
+			//printf("		Link %d	 	\n",i+1);
+			//printf("		Neighbor		 : %s	\n",rtr_id);
+			//printf("		Neighbor Length		 : %s	\n",length);
+			//printf("		Connecting Face		 : %s	\n",face);
+			//printf("		Metric			 : %s	\n",metric);
+
+			add_next_hop_router(rtr_id);
+	
+		}
+	}
+
+	free(lsa_data);
+
+
+}
+
+void 
+print_routing_table(void)
+{
+	printf("\n");
+	printf("print_routing_table called\n");
+	int i, rt_element;
+	
+	struct routing_table_entry *rte;
+
+	struct hashtb_enumerator ee;
+    	struct hashtb_enumerator *e = &ee;
+    	
+    	hashtb_start(nlsr->routing_table, e);
+	rt_element=hashtb_n(nlsr->routing_table);
+
+	for(i=0;i<rt_element;i++)
+	{
+		printf("----------Routing Table Entry %d------------------\n",i+1);
+		rte=e->data;
+		printf(" Destination Router: %s \n",rte->dest_router);
+		rte->next_hop_face == NO_NEXT_HOP ? printf(" Next Hop Face: NO_NEXT_HOP \n") : printf(" Next Hop Face: %d \n", rte->next_hop_face);
+		hashtb_next(e);		
+	}
+
+	hashtb_end(e);
+
+	printf("\n");
+}
+
+void 
+do_old_routing_table_updates()
+{
+	
+}
 
diff --git a/nlsr_route.h b/nlsr_route.h
index 0e7884b..ec243e9 100644
--- a/nlsr_route.h
+++ b/nlsr_route.h
@@ -4,12 +4,22 @@
 #define EMPTY_PARENT -12345
 #define INF_DISTANCE 2147483647
 
+#define NO_NEXT_HOP -4321
+
 struct map_entry
 {
 	char *router;
 	int mapping;
 };
 
+
+struct routing_table_entry
+{
+	char *dest_router;
+	int next_hop_face;
+}
+;
+
 int route_calculate(struct ccn_schedule *sched, void *clienth, struct ccn_scheduled_event *ev, int flags);
 void make_map(void);
 void add_map_entry(char *router);
@@ -26,4 +36,12 @@
 void print_path(long int *parent, long int dest);
 void print_all_path_from_source(long int *parent,long int source);
 
+/* Routing Table Relates function */
+
+int get_next_hop(char *dest_router);
+void add_next_hop_router(char *dest_router);
+void add_next_hop_from_lsa_adj_body(char *body, int no_link);
+void print_routing_table(void);
+void do_old_routing_table_updates();
+
 #endif
