diff --git a/utils/dummy-keychain.cpp b/utils/dummy-keychain.cpp
index 3f62a4e..7294c1e 100644
--- a/utils/dummy-keychain.cpp
+++ b/utils/dummy-keychain.cpp
@@ -66,8 +66,8 @@
 const std::string DummyPib::SCHEME = "pib-dummy";
 const std::string DummyTpm::SCHEME = "tpm-dummy";
 
-NDN_CXX_V2_KEYCHAIN_REGISTER_PIB_BACKEND(DummyPib);
-NDN_CXX_V2_KEYCHAIN_REGISTER_TPM_BACKEND(DummyTpm);
+NDN_CXX_KEYCHAIN_REGISTER_PIB_BACKEND(DummyPib);
+NDN_CXX_KEYCHAIN_REGISTER_TPM_BACKEND(DummyTpm);
 
 DummyPib::DummyPib(const std::string& locator)
 {
@@ -132,8 +132,7 @@
 }
 
 void
-DummyPib::addKey(const Name& identity, const Name& keyName,
-                 const uint8_t* key, size_t keyLen)
+DummyPib::addKey(const Name& identity, const Name& keyName, span<const uint8_t> key)
 {
 }
 
@@ -148,7 +147,7 @@
     typedef boost::iostreams::stream<boost::iostreams::array_source> arrayStream;
     arrayStream
     is(reinterpret_cast<const char*>(DUMMY_CERT), sizeof(DUMMY_CERT));
-    auto cert = io::load<v2::Certificate>(is, io::BASE64);
+    auto cert = io::load<Certificate>(is, io::BASE64);
     return cert->getPublicKey();
 }
 
@@ -178,7 +177,7 @@
 }
 
 void
-DummyPib::addCertificate(const v2::Certificate& certificate)
+DummyPib::addCertificate(const Certificate& certificate)
 {
 }
 
@@ -187,15 +186,15 @@
 {
 }
 
-v2::Certificate
+Certificate
 DummyPib::getCertificate(const Name& certificateName) const
 {
-  static shared_ptr<v2::Certificate> cert = nullptr;
+  static shared_ptr<Certificate> cert = nullptr;
   if (cert == nullptr) {
     typedef boost::iostreams::stream<boost::iostreams::array_source> arrayStream;
     arrayStream
     is(reinterpret_cast<const char*>(DUMMY_CERT), sizeof(DUMMY_CERT));
-    cert = io::load<v2::Certificate>(is, io::BASE64);
+    cert = io::load<Certificate>(is, io::BASE64);
   }
 
   return *cert;
@@ -214,15 +213,15 @@
 {
 }
 
-v2::Certificate
+Certificate
 DummyPib::getDefaultCertificateOfKey(const Name& keyName) const
 {
-  static shared_ptr<v2::Certificate> cert = nullptr;
+  static shared_ptr<Certificate> cert = nullptr;
   if (cert == nullptr) {
     typedef boost::iostreams::stream<boost::iostreams::array_source> arrayStream;
     arrayStream
     is(reinterpret_cast<const char*>(DUMMY_CERT), sizeof(DUMMY_CERT));
-    cert = io::load<v2::Certificate>(is, io::BASE64);
+    cert = io::load<Certificate>(is, io::BASE64);
   }
 
   return *cert;
@@ -246,20 +245,19 @@
 }
 
 ConstBufferPtr
-DummyKeyHandle::doSign(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t size) const
+DummyKeyHandle::doSign(DigestAlgorithm digestAlgorithm, const InputBuffers& bufs) const
 {
   return make_shared<Buffer>(DUMMY_SIGNATURE, sizeof(DUMMY_SIGNATURE));
 }
 
 bool
-DummyKeyHandle::doVerify(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t bufLen,
-                         const uint8_t* sig, size_t sigLen) const
+DummyKeyHandle::doVerify(DigestAlgorithm digestAlgorithm, const InputBuffers& bufs, span<const uint8_t> sig) const
 {
   throw Error("Not supported");
 }
 
 ConstBufferPtr
-DummyKeyHandle::doDecrypt(const uint8_t* cipherText, size_t cipherTextLen) const
+DummyKeyHandle::doDecrypt(span<const uint8_t> cipherText) const
 {
   throw Error("Not supported");
 }
@@ -331,7 +329,7 @@
 }
 
 void
-DummyTpm::doImportKey(const Name& keyName, const uint8_t* pkcs8, size_t pkcs8Len, const char* pw, size_t pwLen)
+DummyTpm::doImportKey(const Name& keyName, span<const uint8_t> pkcs8, const char* pw, size_t pwLen)
 {
   throw Error("Not supported");
 }
diff --git a/utils/dummy-keychain.hpp b/utils/dummy-keychain.hpp
index 7f8b0a3..95ee50e 100644
--- a/utils/dummy-keychain.hpp
+++ b/utils/dummy-keychain.hpp
@@ -83,8 +83,7 @@
   hasKey(const Name& keyName) const override;
 
   void
-  addKey(const Name& identity, const Name& keyName, const uint8_t* key,
-         size_t keyLen) override;
+  addKey(const Name& identity, const Name& keyName, span<const uint8_t> key) override;
 
   void
   removeKey(const Name& keyName) override;
@@ -106,12 +105,12 @@
   hasCertificate(const Name& certName) const override;
 
   void
-  addCertificate(const v2::Certificate& certificate) override;
+  addCertificate(const Certificate& certificate) override;
 
   void
   removeCertificate(const Name& certName) override;
 
-  v2::Certificate
+  Certificate
   getCertificate(const Name& certificateName) const override;
 
   std::set<Name>
@@ -120,7 +119,7 @@
   void
   setDefaultCertificateOfKey(const Name& keyName, const Name& certName) override;
 
-  v2::Certificate
+  Certificate
   getDefaultCertificateOfKey(const Name& keyName) const override;
 
   static std::string
@@ -145,14 +144,13 @@
 
 private:
   ConstBufferPtr
-  doSign(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t size) const final;
+  doSign(DigestAlgorithm digestAlgorithm, const InputBuffers& bufs) const final;
 
   bool
-  doVerify(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t bufLen,
-           const uint8_t* sig, size_t sigLen) const final;
+  doVerify(DigestAlgorithm digestAlgorithm, const InputBuffers& bufs, span<const uint8_t> sig) const final;
 
   ConstBufferPtr
-  doDecrypt(const uint8_t* cipherText, size_t cipherTextLen) const final;
+  doDecrypt(span<const uint8_t> cipherText) const final;
 
   ConstBufferPtr
   doDerivePublicKey() const final;
@@ -211,7 +209,7 @@
   doExportKey(const Name& keyName, const char* pw, size_t pwLen) final;
 
   void
-  doImportKey(const Name& keyName, const uint8_t* pkcs8, size_t pkcs8Len, const char* pw, size_t pwLen) final;
+  doImportKey(const Name& keyName, span<const uint8_t> pkcs8, const char* pw, size_t pwLen) final;
 
   void
   doImportKey(const Name& keyName, shared_ptr<transform::PrivateKey> key) final;
diff --git a/utils/tracers/ndn-app-delay-tracer.cpp b/utils/tracers/ndn-app-delay-tracer.cpp
index d893a72..63fdf73 100644
--- a/utils/tracers/ndn-app-delay-tracer.cpp
+++ b/utils/tracers/ndn-app-delay-tracer.cpp
@@ -197,13 +197,12 @@
 void
 AppDelayTracer::Connect()
 {
-  Config::ConnectWithoutContext("/NodeList/" + m_node
-                                  + "/ApplicationList/*/LastRetransmittedInterestDataDelay",
-                                MakeCallback(&AppDelayTracer::LastRetransmittedInterestDataDelay,
-                                             this));
+  Config::ConnectWithoutContextFailSafe("/NodeList/" + m_node + "/ApplicationList/*/LastRetransmittedInterestDataDelay",
+                                        MakeCallback(&AppDelayTracer::LastRetransmittedInterestDataDelay,
+                                                     this));
 
-  Config::ConnectWithoutContext("/NodeList/" + m_node + "/ApplicationList/*/FirstInterestDataDelay",
-                                MakeCallback(&AppDelayTracer::FirstInterestDataDelay, this));
+  Config::ConnectWithoutContextFailSafe("/NodeList/" + m_node + "/ApplicationList/*/FirstInterestDataDelay",
+                                        MakeCallback(&AppDelayTracer::FirstInterestDataDelay, this));
 }
 
 void
