diff --git a/nlsr.hpp b/nlsr.hpp
new file mode 100644
index 0000000..c9f1032
--- /dev/null
+++ b/nlsr.hpp
@@ -0,0 +1,81 @@
+#ifndef NLSR_HPP
+#define NLSR_HPP
+
+#include <ndn-cpp-dev/face.hpp>
+#include <ndn-cpp-dev/security/key-chain.hpp>
+#include <ndn-cpp-dev/util/scheduler.hpp>
+
+#include "conf_param.hpp"
+#include "adl.hpp"
+#include "npl.hpp"
+
+
+using namespace ndn;
+using namespace std;
+
+class nlsr
+{
+	public:
+	nlsr()
+		: io(ndn::make_shared<boost::asio::io_service>())
+        , nlsrFace(io)
+		, scheduler(*io)
+		, configFileName()	
+		, confParam()
+		, adl()
+		, npl()
+	{
+		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(){
+		return configFileName;
+	}
+
+	void setConfFileName(const string& fileName){
+		configFileName=fileName;
+	}
+
+	bool isSetDaemonProcess(){
+		return isDaemonProcess;
+	}
+
+	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;
+	bool isDaemonProcess;
+	string configFileName;
+
+};
+
+#endif
