diff --git a/ndn-cpp/encoding/der/visitor/certificate-data-visitor.cpp b/ndn-cpp/encoding/der/visitor/certificate-data-visitor.cpp
index e2ea049..bddf20c 100644
--- a/ndn-cpp/encoding/der/visitor/certificate-data-visitor.cpp
+++ b/ndn-cpp/encoding/der/visitor/certificate-data-visitor.cpp
@@ -35,9 +35,9 @@
   // _LOG_DEBUG("CertificateDataVisitor::visit");
 
   const DerNodePtrList& children = derSeq.getChildren();
-  CertValidityVisitor validityVisitor;
+  CertificateValidityVisitor validityVisitor;
   children[0]->accept(validityVisitor, param);
-  CertSubjectVisitor subjectVisitor;
+  CertificateSubjectVisitor subjectVisitor;
   children[1]->accept(subjectVisitor, param);
   PublicKeyVisitor pubkeyVisitor;
   Certificate* certData = ndnboost::any_cast<Certificate*>(param);
@@ -45,7 +45,7 @@
       
   if(children.size() > 3)
     {
-      CertExtensionVisitor extnVisitor;
+      CertificateExtensionVisitor extnVisitor;
       children[3]->accept(extnVisitor, param);
     }
 }
@@ -54,7 +54,7 @@
  * CertValidityVisitor
  */
 void 
-CertValidityVisitor::visit(DerSequence& derSeq, ndnboost::any param)
+CertificateValidityVisitor::visit(DerSequence& derSeq, ndnboost::any param)
 {
   // _LOG_DEBUG("CertValidityVisitor::visit");
   
@@ -78,7 +78,7 @@
  * CertSubDescryptVisitor
  */
 void
-CertSubDescryptVisitor::visit(DerSequence& derSeq, ndnboost::any param)
+CertificateSubjectDescriptionVisitor::visit(DerSequence& derSeq, ndnboost::any param)
 {
   Certificate* certData = ndnboost::any_cast<Certificate*>(param); 
   
@@ -98,13 +98,13 @@
  * CertSubjectVisitor
  */
 void 
-CertSubjectVisitor::visit(DerSequence& derSeq, ndnboost::any param)
+CertificateSubjectVisitor::visit(DerSequence& derSeq, ndnboost::any param)
 {
   // _LOG_DEBUG("CertSubjectVisitor::visit");
 
   const DerNodePtrList& children = derSeq.getChildren();
   
-  CertSubDescryptVisitor descryptVisitor;
+  CertificateSubjectDescriptionVisitor descryptVisitor;
 
   DerNodePtrList::const_iterator it = children.begin();
 
@@ -118,7 +118,7 @@
  * CertExtnEntryVisitor
  */
 void 
-CertExtnEntryVisitor::visit(DerSequence& derSeq, ndnboost::any param)
+CertificateExtensionEntryVisitor::visit(DerSequence& derSeq, ndnboost::any param)
 {
   Certificate* certData = ndnboost::any_cast<Certificate*>(param); 
   
@@ -139,11 +139,11 @@
  * CertExtensionVisitor
  */
 void 
-CertExtensionVisitor::visit(DerSequence& derSeq, ndnboost::any param)
+CertificateExtensionVisitor::visit(DerSequence& derSeq, ndnboost::any param)
 {
   const DerNodePtrList& children = derSeq.getChildren();
   
-  CertExtnEntryVisitor extnEntryVisitor;
+  CertificateExtensionEntryVisitor extnEntryVisitor;
 
   DerNodePtrList::const_iterator it = children.begin();
 
diff --git a/ndn-cpp/encoding/der/visitor/certificate-data-visitor.hpp b/ndn-cpp/encoding/der/visitor/certificate-data-visitor.hpp
index 3df60be..ec73bd7 100644
--- a/ndn-cpp/encoding/der/visitor/certificate-data-visitor.hpp
+++ b/ndn-cpp/encoding/der/visitor/certificate-data-visitor.hpp
@@ -19,27 +19,27 @@
   virtual void visit(DerSequence&,         ndnboost::any);
 };
 
-class CertValidityVisitor : public VoidVisitor {
+class CertificateValidityVisitor : public VoidVisitor {
 public:
   virtual void visit(DerSequence&,         ndnboost::any);
 };
 
-class CertSubDescryptVisitor : public VoidVisitor {
+class CertificateSubjectDescriptionVisitor : public VoidVisitor {
 public:
   virtual void visit(DerSequence&,         ndnboost::any);
 };
 
-class CertSubjectVisitor : public VoidVisitor {
+class CertificateSubjectVisitor : public VoidVisitor {
 public:
   virtual void visit(DerSequence&,         ndnboost::any);
 };
 
-class CertExtnEntryVisitor : public VoidVisitor {
+class CertificateExtensionEntryVisitor : public VoidVisitor {
 public:
   virtual void visit(DerSequence&,         ndnboost::any);
 };
 
-class CertExtensionVisitor : public VoidVisitor {
+class CertificateExtensionVisitor : public VoidVisitor {
 public:
   virtual void visit(DerSequence&,         ndnboost::any);
 };
diff --git a/ndn-cpp/security/certificate/certificate.cpp b/ndn-cpp/security/certificate/certificate.cpp
index 90010b3..8f6288c 100644
--- a/ndn-cpp/security/certificate/certificate.cpp
+++ b/ndn-cpp/security/certificate/certificate.cpp
@@ -13,9 +13,7 @@
 #include <ndn-cpp/sha256-with-rsa-signature.hpp>
 #include "../../encoding/der/der.hpp"
 #include "../../encoding/der/visitor/certificate-data-visitor.hpp"
-#if 0
 #include "../../encoding/der/visitor/print-visitor.hpp"
-#endif
 #include "../../util/logging.hpp"
 #include "../../util/blob-stream.hpp"
 #include "../../c/util/time.h"
@@ -124,7 +122,6 @@
   node->accept(certDataVisitor, this);
 }
 
-#if 0
 void 
 Certificate::printCertificate()
 {
@@ -133,19 +130,17 @@
   cout << notAfter_ << endl;
 
   cout << "Subject Info:" << endl;  
-  vector<CertificateSubDescrypt>::iterator it = m_subjectList.begin();
-  for(; it < m_subjectList.end(); it++){
-    cout << it->getOidStr() << "\t" << it->getValue() << endl;
+  vector<CertificateSubjectDescription>::iterator it = subjectDescriptionList_.begin();
+  for(; it < subjectDescriptionList_.end(); it++){
+    cout << it->getOidString() << "\t" << it->getValue() << endl;
   }
 
-  boost::iostreams::stream
-    <boost::iostreams::array_source> is(key_.getKeyBlob().buf (), m_key.getKeyBlob().size ());
+  ndnboost::iostreams::stream<ndnboost::iostreams::array_source> is((const char*)key_.getKeyDer().buf(), key_.getKeyDer().size());
 
-  shared_ptr<der::DerNode> keyRoot = der::DerNode::parse(reinterpret_cast<InputIterator&> (is));
+  shared_ptr<der::DerNode> keyRoot = der::DerNode::parse(reinterpret_cast<der::InputIterator&> (is));
 
   der::PrintVisitor printVisitor;
   keyRoot->accept(printVisitor, string(""));
 }
-#endif
 
 }
