diff --git a/src/contact-storage.h b/src/contact-storage.h
index da6c812..5662ebb 100644
--- a/src/contact-storage.h
+++ b/src/contact-storage.h
@@ -11,7 +11,8 @@
 #ifndef CHRONOS_CONTACT_STORAGE_H
 #define CHRONOS_CONTACT_STORAGE_H
 
-#include "contact-item.h"
+#include "contact.h"
+#include "endorse-collection.pb.h"
 #include <sqlite3.h>
 
 
@@ -23,22 +24,18 @@
 public:
   struct Error : public std::runtime_error { Error(const std::string &what) : std::runtime_error(what) {} };
 
-  ContactStorage();
+  ContactStorage(const ndn::Name& identity);
   
   ~ContactStorage() 
-  { sqlite3_close(m_db); }
+  {
+    sqlite3_close(m_db); 
+  }
 
   ndn::shared_ptr<Profile>
-  getSelfProfile(const ndn::Name& identity) const;
-
-  // ndn::Block
-  // getSelfEndorseCertificate(const ndn::Name& identity);
+  getSelfProfile();
   
   void
-  addSelfEndorseCertificate(const EndorseCertificate& endorseCertificate, const ndn::Name& identity);
-
-  // ndn::Block
-  // getEndorseCertificate(const ndn::Name& identity);
+  addSelfEndorseCertificate(const EndorseCertificate& endorseCertificate);
 
   void
   addEndorseCertificate(const EndorseCertificate& endorseCertificate, const ndn::Name& identity);
@@ -47,7 +44,7 @@
   updateCollectEndorse(const EndorseCertificate& endorseCertificate);
 
   void
-  getCollectEndorseList(const ndn::Name& name, std::vector<ndn::Buffer>& endorseList);
+  getCollectEndorse(EndorseCollection& endorseCollection);
 
   void
   getEndorseList(const ndn::Name& identity, std::vector<std::string>& endorseList);
@@ -58,10 +55,10 @@
   removeContact(const ndn::Name& identity);
 
   void
-  addContact(const ContactItem& contactItem);
+  addContact(const Contact& contact);
 
-  ndn::shared_ptr<ContactItem>
-  getContact(const ndn::Name& name);
+  ndn::shared_ptr<Contact>
+  getContact(const ndn::Name& identity) const;
 
   void
   updateIsIntroducer(const ndn::Name& identity, bool isIntroducer);
@@ -70,19 +67,48 @@
   updateAlias(const ndn::Name& identity, std::string alias);
 
   void
-  getAllContacts(std::vector<ndn::shared_ptr<ContactItem> >& contacts) const;
+  getAllContacts(std::vector<ndn::shared_ptr<Contact> >& contacts) const;
 
- 
+  void
+  updateDnsSelfProfileData(const ndn::Data& data)
+  {
+    updateDnsData(data.wireEncode(), "N/A", "PROFILE", data.getName().toUri());
+  }
+
+  void
+  updateDnsEndorseOthers(const ndn::Data& data, const std::string& endorsee)
+  {
+    updateDnsData(data.wireEncode(), endorsee, "ENDORSEE", data.getName().toUri());
+  }
   
+  void
+  updateDnsOthersEndorse(const ndn::Data& data)
+  {
+    updateDnsData(data.wireEncode(), "N/A", "ENDORSED", data.getName().toUri()); 
+  }
+
+  ndn::shared_ptr<ndn::Data>
+  getDnsData(const ndn::Name& name);
+
+  ndn::shared_ptr<ndn::Data>
+  getDnsData(const std::string& name, const std::string& type);
 
 private:
+  std::string
+  getDBName();
+  
   void
   initializeTable(const std::string& tableName, const std::string& sqlCreateStmt);
 
   bool
   doesContactExist(const ndn::Name& name);
 
+  void
+  updateDnsData(const ndn::Block& data, const std::string& name, const std::string& type, const std::string& dataName);
+
 private:
+  ndn::Name m_identity;
+
   sqlite3 *m_db;
 };
 
