diff --git a/src/nlsr.cpp b/src/nlsr.cpp
index fe4ba01..3ca2279 100644
--- a/src/nlsr.cpp
+++ b/src/nlsr.cpp
@@ -1,7 +1,6 @@
 #include <ndn-cpp-dev/face.hpp>
 #include <ndn-cpp-dev/security/key-chain.hpp>
 #include <ndn-cpp-dev/util/scheduler.hpp>
-
 #include <cstdlib>
 #include <string>
 #include <sstream>
@@ -108,8 +107,9 @@
     //}
     nlsr_.getLsdb().setLsaRefreshTime(nlsr_.getConfParameter().getLsaRefreshTime());
     nlsr_.getFib().setFibEntryRefreshTime(
-        2*nlsr_.getConfParameter().getLsaRefreshTime());
+                                    2*nlsr_.getConfParameter().getLsaRefreshTime());
     nlsr_.getLsdb().setThisRouterPrefix(nlsr_.getConfParameter().getRouterPrefix());
+    nlsr_.getKeyManager().initKeyManager(nlsr_.getConfParameter());
     /* debugging purpose start */
     cout <<	nlsr_.getConfParameter();
     nlsr_.getAdl().printAdl();
diff --git a/src/nlsr.hpp b/src/nlsr.hpp
index 2f2ee61..cbf2af9 100644
--- a/src/nlsr.hpp
+++ b/src/nlsr.hpp
@@ -16,6 +16,7 @@
 #include "nlsr_npt.hpp"
 #include "nlsr_fib.hpp"
 #include "nlsr_logger.hpp"
+#include "nlsr_km.hpp"
 //testing
 #include "nlsr_test.hpp"
 
@@ -39,6 +40,7 @@
             , im()
             , dm()
             , sm()
+            , km()
             , nlsrLsdb()
             , adjBuildCount(0)
             , isBuildAdjLsaSheduled(0)
@@ -111,11 +113,16 @@
             return nlsrFace;
         }
 
-        ndn::KeyChain& getKeyChain()
+        KeyManager& getKeyManager()
         {
-            return kChain;
+        	return km;
         }
 
+//		ndn::KeyChain& getKeyChain()
+//        {
+//            return kChain;
+//        }
+
         interestManager& getIm()
         {
             return im;
@@ -223,10 +230,11 @@
         ndn::shared_ptr<boost::asio::io_service> io;
         ndn::Scheduler scheduler;
         ndn::Face nlsrFace;
-        ndn::KeyChain kChain;
+//      ndn::KeyChain kChain;
         interestManager im;
         DataManager dm;
         SequencingManager sm;
+        KeyManager km;
         bool isDaemonProcess;
         string configFileName;
         int apiPort;
diff --git a/src/nlsr_im.cpp b/src/nlsr_im.cpp
index 23a56cc..2e6d6d1 100644
--- a/src/nlsr_im.cpp
+++ b/src/nlsr_im.cpp
@@ -48,7 +48,7 @@
             Data data(ndn::Name(interest.getName()).appendVersion());
             data.setFreshnessPeriod(1000); // 10 sec
             data.setContent((const uint8_t*)"info", sizeof("info"));
-            pnlsr.getKeyChain().sign(data);
+            pnlsr.getKeyManager().getKeyChain().sign(data);
             cout << ">> D: " << data << endl;
             pnlsr.getNlsrFace().put(data);
             int status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
diff --git a/src/nlsr_km.cpp b/src/nlsr_km.cpp
new file mode 100644
index 0000000..fb4efaa
--- /dev/null
+++ b/src/nlsr_km.cpp
@@ -0,0 +1,22 @@
+#include <ndn-cpp-dev/security/identity-certificate.hpp>
+#include <ndn-cpp-dev/encoding/block.hpp>
+#include "nlsr_km.hpp"
+
+namespace nlsr
+{
+    void
+    KeyManager::initKeyManager(ConfParameter &cp)
+    {
+        ndn::Name identityName(cp.getRouterPrefix()+"/nlsr");
+        kChain.deleteIdentity(identityName);
+        ndn::Name certName = kChain.createIdentity(identityName);
+        cout<<"Certificate Name: "<<certName.toUri()<<endl;
+        ndn::Name keyName=
+            ndn::IdentityCertificate::certificateNameToPublicKeyName(certName);
+        cout<<"Key Name: "<<keyName.toUri()<<endl;
+    }
+
+}
+
+
+
diff --git a/src/nlsr_km.hpp b/src/nlsr_km.hpp
new file mode 100644
index 0000000..e93e996
--- /dev/null
+++ b/src/nlsr_km.hpp
@@ -0,0 +1,32 @@
+#ifndef NLSR_KM_HPP
+#define NLSR_KM_HPP
+
+#include <ndn-cpp-dev/face.hpp>
+#include <ndn-cpp-dev/security/key-chain.hpp>
+#include <ndn-cpp-dev/util/scheduler.hpp>
+
+#include "nlsr_conf_param.hpp"
+
+namespace nlsr
+{
+    class KeyManager
+    {
+    public:
+        KeyManager()
+            :kChain()
+        {
+        }
+
+        ndn::KeyChain& getKeyChain()
+        {
+            return kChain;
+        }
+
+        void initKeyManager(ConfParameter &cp);
+
+    private:
+        ndn::KeyChain kChain;
+    };
+}
+
+#endif
