diff --git a/src/contact-item.cpp b/src/contact-item.cpp
new file mode 100644
index 0000000..08f4fa6
--- /dev/null
+++ b/src/contact-item.cpp
@@ -0,0 +1,40 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013, Regents of the University of California
+ *                     Yingdi Yu
+ *
+ * BSD license, See the LICENSE file for more information
+ *
+ * Author: Yingdi Yu <yingdi@cs.ucla.edu>
+ */
+
+#include "contact-item.h"
+#include "exception.h"
+
+#include <ndn.cxx/fields/signature-sha256-with-rsa.h>
+
+using namespace std;
+using namespace ndn;
+using namespace ndn::security;
+
+ContactItem::ContactItem(const EndorseCertificate& selfEndorseCertificate,
+                         const string& alias)
+  : m_selfEndorseCertificate(selfEndorseCertificate)
+{
+  Name endorsedkeyName = selfEndorseCertificate.getPublicKeyName();
+  Ptr<const signature::Sha256WithRsa> endorseSig = boost::dynamic_pointer_cast<const signature::Sha256WithRsa>(selfEndorseCertificate.getSignature());
+  const Name& signingKeyName = endorseSig->getKeyLocator().getKeyName();
+
+  if(endorsedkeyName != signingKeyName)
+    throw LnException("not a self-claimed");
+
+  m_namespace = endorsedkeyName.getSubName(0, endorsedkeyName.size() - 1);
+  m_alias = alias.empty() ? m_namespace.toUri() : alias;
+
+  Ptr<ProfileData> profileData = selfEndorseCertificate.getProfileData();
+  Ptr<const Blob> nameBlob = profileData->getProfile().getProfileEntry("name");
+  m_name = string(nameBlob->buf(), nameBlob->size());
+  Ptr<const Blob> institutionBlob = profileData->getProfile().getProfileEntry("institution");
+  m_institution = string(institutionBlob->buf(), institutionBlob->size());
+}
+
