diff --git a/nlsr.cpp b/nlsr.cpp
index a92f8cb..f1b5d93 100644
--- a/nlsr.cpp
+++ b/nlsr.cpp
@@ -17,7 +17,7 @@
 using namespace std;
 
 void
-nlsr::nlsrRegistrationFailed(const ptr_lib::shared_ptr<const Name>&)
+nlsr::nlsrRegistrationFailed(const ndn::Name& name)
 {
   cerr << "ERROR: Failed to register prefix in local hub's daemon" << endl;
   getNlsrFace().shutdown();
diff --git a/nlsr.hpp b/nlsr.hpp
index 460f2f1..5ff2ef7 100644
--- a/nlsr.hpp
+++ b/nlsr.hpp
@@ -51,7 +51,7 @@
 		configFileName="nlsr.conf";	
 	}
 
-	void nlsrRegistrationFailed(const ptr_lib::shared_ptr<const Name>&);
+	void nlsrRegistrationFailed(const ndn::Name& name);
 
 	void setInterestFilterNlsr(const string& name);
 	void startEventLoop();
diff --git a/nlsr_dm.cpp b/nlsr_dm.cpp
index 1ff7555..46b278d 100644
--- a/nlsr_dm.cpp
+++ b/nlsr_dm.cpp
@@ -12,15 +12,14 @@
 using namespace ndn;
 
 void
-DataManager::processContent(nlsr& pnlsr, 
-                  const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest,
-								               const ndn::ptr_lib::shared_ptr<ndn::Data> &data)
+DataManager::processContent(nlsr& pnlsr, const ndn::Interest &interest,
+								               const ndn::Data & data)
 {
 
-	cout << "I: " << interest->toUri() << endl;
+	cout << "I: " << interest.toUri() << endl;
 
-	string dataName(data->getName().toUri());
-	string dataContent((char *)data->getContent().value());
+	string dataName(data.getName().toUri());
+	string dataContent((char *)data.getContent().value());
 	
   	cout << "D: " << dataName << endl;
 	cout << "Data Content: " << dataContent << endl;
diff --git a/nlsr_dm.hpp b/nlsr_dm.hpp
index c174e02..923d2fa 100644
--- a/nlsr_dm.hpp
+++ b/nlsr_dm.hpp
@@ -14,9 +14,8 @@
 class DataManager
 {
 public:
-  void processContent(nlsr& pnlsr, 
-                  const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest,
-								               const ndn::ptr_lib::shared_ptr<ndn::Data> &data);
+  void processContent(nlsr& pnlsr, const ndn::Interest &interest,
+								               const ndn::Data& data);
 	void processContentInfo(nlsr& pnlsr, string& dataName,
                                                            string& dataContent);
 private:
diff --git a/nlsr_im.cpp b/nlsr_im.cpp
index cdcba5f..6ae0131 100644
--- a/nlsr_im.cpp
+++ b/nlsr_im.cpp
@@ -14,12 +14,12 @@
 
 void 
 interestManager::processInterest( nlsr& pnlsr,
-                                  const ptr_lib::shared_ptr<const Name> &name, 
-                            const ptr_lib::shared_ptr<const Interest> &interest)
+                                  const ndn::Name &name, 
+                                  const ndn::Interest &interest)
 {
 
-	cout << "<< I: " << *interest << endl;
-	string intName=interest->getName().toUri();
+	cout << "<< I: " << interest << endl;
+	string intName=interest.getName().toUri();
 	cout << "Interest Received for Name: "<< intName <<endl;
 	nlsrTokenizer nt(intName,"/");
 	string chkString("info");
@@ -39,11 +39,11 @@
 
 void 
 interestManager::processInterestInfo(nlsr& pnlsr, string& neighbor,
-							            const ptr_lib::shared_ptr<const Interest> &interest)
+							                                    const ndn::Interest &interest)
 {
 	if ( pnlsr.getAdl().isNeighbor(neighbor) )
 	{
-		Data data(ndn::Name(interest->getName()).appendVersion());
+		Data data(ndn::Name(interest.getName()).appendVersion());
   		data.setFreshnessPeriod(1000); // 10 sec
   		data.setContent((const uint8_t*)"info", sizeof("info"));
   		pnlsr.getKeyChain().sign(data);
@@ -63,10 +63,10 @@
 
 void 
 interestManager::processInterestTimedOut(nlsr& pnlsr,
-                 const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest)
+                                                  const ndn::Interest &interest)
 {
-  	cout << "Timed out interest : " << interest->getName().toUri() << endl;
-	string intName=	interest->getName().toUri();
+  	cout << "Timed out interest : " << interest.getName().toUri() << endl;
+	string intName=	interest.getName().toUri();
 	nlsrTokenizer nt(intName,"/");
 	string chkString("info");
 	if( nt.doesTokenExist(chkString) ){
@@ -79,7 +79,7 @@
 
 void 
 interestManager::processInterestTimedOutInfo(nlsr& pnlsr, string& neighbor,
-                 const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest)
+                                                  const ndn::Interest &interest)
 {
 	pnlsr.getAdl().incrementTimedOutInterestCount(neighbor);
 	int status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
diff --git a/nlsr_im.hpp b/nlsr_im.hpp
index de6ba74..6e71500 100644
--- a/nlsr_im.hpp
+++ b/nlsr_im.hpp
@@ -16,14 +16,13 @@
 	interestManager()
 	{
 	}
-  void processInterest(nlsr& pnlsr, const ptr_lib::shared_ptr<const Name> &name, 
-							            const ptr_lib::shared_ptr<const Interest> &interest);
+  void processInterest(nlsr& pnlsr, const ndn::Name &name, 
+							                                   const ndn::Interest &interest);
 	void processInterestInfo(nlsr& pnlsr, string& neighbor, 
-							            const ptr_lib::shared_ptr<const Interest> &interest);
-  void processInterestTimedOut(nlsr& pnlsr,
-                 const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest);
+							                                   const ndn::Interest &interest);
+  void processInterestTimedOut(nlsr& pnlsr, const ndn::Interest &interest);
   void processInterestTimedOutInfo(nlsr& pnlsr, string& neighbor,
-                 const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest);
+                                                 const ndn::Interest &interest);
   void expressInterest(nlsr& pnlsr,const string& interestNamePrefix, int scope, 
                                                                    int seconds);
   void sendScheduledInfoInterest(nlsr& pnlsr, int seconds);
