Der encoding: DerNode::accept is not const, so we need a list of non-const children.
diff --git a/src/encoding/der/visitor/certificate-data-visitor.cpp b/src/encoding/der/visitor/certificate-data-visitor.cpp
index c96d988..4270d68 100644
--- a/src/encoding/der/visitor/certificate-data-visitor.cpp
+++ b/src/encoding/der/visitor/certificate-data-visitor.cpp
@@ -34,7 +34,7 @@
 {
   // _LOG_DEBUG("CertificateDataVisitor::visit");
 
-  const DerNodePtrList& children = derSeq.getChildren();
+  DerNodePtrList& children = derSeq.getChildren();
   CertificateValidityVisitor validityVisitor;
   children[0]->accept(validityVisitor, param);
   CertificateSubjectVisitor subjectVisitor;
@@ -60,7 +60,7 @@
   
   Certificate* certData = ndnboost::any_cast<Certificate*>(param); 
 
-  const DerNodePtrList& children = derSeq.getChildren();
+  DerNodePtrList& children = derSeq.getChildren();
   
   SimpleVisitor simpleVisitor;
 
@@ -82,7 +82,7 @@
 {
   Certificate* certData = ndnboost::any_cast<Certificate*>(param); 
   
-  const DerNodePtrList& children = derSeq.getChildren();
+  DerNodePtrList& children = derSeq.getChildren();
   
   SimpleVisitor simpleVisitor;
 
@@ -102,11 +102,11 @@
 {
   // _LOG_DEBUG("CertSubjectVisitor::visit");
 
-  const DerNodePtrList& children = derSeq.getChildren();
+  DerNodePtrList& children = derSeq.getChildren();
   
   CertificateSubjectDescriptionVisitor descryptVisitor;
 
-  DerNodePtrList::const_iterator it = children.begin();
+  DerNodePtrList::iterator it = children.begin();
 
   while(it != children.end()) {
     (*it)->accept(descryptVisitor, param);
@@ -122,7 +122,7 @@
 {
   Certificate* certData = ndnboost::any_cast<Certificate*>(param); 
   
-  const DerNodePtrList& children = derSeq.getChildren();
+  DerNodePtrList& children = derSeq.getChildren();
   
   SimpleVisitor simpleVisitor;
 
@@ -141,11 +141,11 @@
 void 
 CertificateExtensionVisitor::visit(DerSequence& derSeq, ndnboost::any param)
 {
-  const DerNodePtrList& children = derSeq.getChildren();
+  DerNodePtrList& children = derSeq.getChildren();
   
   CertificateExtensionEntryVisitor extnEntryVisitor;
 
-  DerNodePtrList::const_iterator it = children.begin();
+  DerNodePtrList::iterator it = children.begin();
 
   while(it != children.end()) {
     (*it)->accept(extnEntryVisitor, param);
diff --git a/src/encoding/der/visitor/print-visitor.cpp b/src/encoding/der/visitor/print-visitor.cpp
index 4c5ee64..80a4f5d 100644
--- a/src/encoding/der/visitor/print-visitor.cpp
+++ b/src/encoding/der/visitor/print-visitor.cpp
@@ -100,8 +100,8 @@
   
   printData(derSequence.getHeader(), indent);
 
-  const DerNodePtrList& children = derSequence.getChildren();
-  DerNodePtrList::const_iterator it = children.begin();
+  DerNodePtrList& children = derSequence.getChildren();
+  DerNodePtrList::iterator it = children.begin();
   for(; it != children.end(); it++)
   (*it)->accept(*this, indent + " | ");
 }
diff --git a/src/encoding/der/visitor/public-key-visitor.cpp b/src/encoding/der/visitor/public-key-visitor.cpp
index 87e4e6c..d5b6e3e 100644
--- a/src/encoding/der/visitor/public-key-visitor.cpp
+++ b/src/encoding/der/visitor/public-key-visitor.cpp
@@ -21,10 +21,10 @@
 ndnboost::any 
 PublicKeyVisitor::visit(DerSequence& derSeq)
 {
-  const DerNodePtrList& children = derSeq.getChildren();
+  DerNodePtrList& children = derSeq.getChildren();
 
   SimpleVisitor simpleVisitor;
-  shared_ptr<DerSequence> algoSeq = dynamic_pointer_cast<DerSequence>(children[0]); 
+  shared_ptr<DerSequence> algoSeq = static_cast<shared_ptr<DerSequence> >(children[0]); 
   OID algorithm = ndnboost::any_cast<OID>(algoSeq->getChildren()[0]->accept(simpleVisitor));  
   Blob raw = derSeq.getRaw();   
   return ndnboost::any(shared_ptr<PublicKey>(new PublicKey(algorithm, raw)));