diff --git a/nlsr.hpp b/nlsr.hpp
index c9f1032..495bf84 100644
--- a/nlsr.hpp
+++ b/nlsr.hpp
@@ -8,6 +8,8 @@
 #include "conf_param.hpp"
 #include "adl.hpp"
 #include "npl.hpp"
+#include "nlsr_im.hpp"
+#include "nlsr_dm.hpp"
 
 
 using namespace ndn;
@@ -15,64 +17,61 @@
 
 class nlsr
 {
-	public:
+public:
 	nlsr()
 		: io(ndn::make_shared<boost::asio::io_service>())
-        , nlsrFace(io)
+		, nlsrFace(io)
 		, scheduler(*io)
 		, configFileName()	
 		, confParam()
 		, adl()
 		, npl()
+    , im()
+    , dm()
 	{
 		isDaemonProcess=false;
 		configFileName="nlsr.conf";	
 	}
 
-	void processInterest(const ptr_lib::shared_ptr<const Name> &name, 
-							const ptr_lib::shared_ptr<const Interest> &interest);
-	void processContent(const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest,
-								 const ndn::ptr_lib::shared_ptr<ndn::Data> &data);
 	void nlsrRegistrationFailed(const ptr_lib::shared_ptr<const Name>&);
-	void processInterestTimedOut(const ndn::ptr_lib::shared_ptr<const ndn::Interest> &interest);
 
 	void setInterestFilterNlsr(const string& name);
-
-	void expressInterest(const string& interestNamePrefix, int scope, int seconds);
-
-	//void scheduleSomeInterest(const string& interestName);
-
-	void sendScheduledInfoInterest(int seconds);
-	void scheduleInfoInterest(int seconds);
-
 	void startEventLoop();
 	
 	int usage(const string& progname);
 
-	string getConfFileName(){
+	string getConfFileName()
+  {
 		return configFileName;
 	}
 
-	void setConfFileName(const string& fileName){
-		configFileName=fileName;
-	}
+  void setConfFileName(const string& fileName)
+  {
+    configFileName=fileName;
+  }
 
-	bool isSetDaemonProcess(){
-		return isDaemonProcess;
-	}
+  bool isSetDaemonProcess()
+  {
+    return isDaemonProcess;
+  }
 
-	void setIsDaemonProcess(bool value){
-		isDaemonProcess=value;
-	}
+  void setIsDaemonProcess(bool value)
+  {
+    isDaemonProcess=value;
+  }
 
 	ConfParameter confParam;
 	Adl adl;
 	Npl npl;
-	private:
 	ndn::shared_ptr<boost::asio::io_service> io;
 	ndn::Scheduler scheduler;
 	ndn::Face nlsrFace;
 	ndn::KeyChain kChain;
+	interestManager im;
+	DataManager dm;
+
+private:
+	
 	bool isDaemonProcess;
 	string configFileName;
 
