diff --git a/ndn-cxx/data.cpp b/ndn-cxx/data.cpp
index db0b745..fff95b8 100644
--- a/ndn-cxx/data.cpp
+++ b/ndn-cxx/data.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2022 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -259,15 +259,21 @@
 }
 
 Data&
+Data::setContent(span<const uint8_t> value)
+{
+  m_content = makeBinaryBlock(tlv::Content, value.data(), value.size());
+  resetWire();
+  return *this;
+}
+
+Data&
 Data::setContent(const uint8_t* value, size_t length)
 {
   if (value == nullptr && length != 0) {
     NDN_THROW(std::invalid_argument("Content buffer cannot be nullptr"));
   }
 
-  m_content = makeBinaryBlock(tlv::Content, value, length);
-  resetWire();
-  return *this;
+  return setContent(make_span(value, length));
 }
 
 Data&
diff --git a/ndn-cxx/data.hpp b/ndn-cxx/data.hpp
index beca2cd..c75e138 100644
--- a/ndn-cxx/data.hpp
+++ b/ndn-cxx/data.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2020 Regents of the University of California.
+ * Copyright (c) 2013-2022 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -184,11 +184,21 @@
   setContent(const Block& block);
 
   /**
+   * @brief Set Content by copying from a contiguous sequence of bytes
+   * @param value buffer with the TLV-VALUE of the content
+   * @return a reference to this Data, to allow chaining
+   */
+  Data&
+  setContent(span<const uint8_t> value);
+
+  /**
    * @brief Set Content by copying from a raw buffer
    * @param value buffer with the TLV-VALUE of the content; may be nullptr if @p length is zero
    * @param length size of the buffer
    * @return a reference to this Data, to allow chaining
+   * @deprecated Use setContent(span<const uint8_t>)
    */
+  [[deprecated("use the overload that takes a span<>")]]
   Data&
   setContent(const uint8_t* value, size_t length);
 
diff --git a/ndn-cxx/detail/nonstd/span-lite.hpp b/ndn-cxx/detail/nonstd/span-lite.hpp
index 17f87c8..4382f99 100644
--- a/ndn-cxx/detail/nonstd/span-lite.hpp
+++ b/ndn-cxx/detail/nonstd/span-lite.hpp
@@ -1068,40 +1068,42 @@
 
 #if !span_BETWEEN( span_COMPILER_MSVC_VERSION, 120, 130 )
 
-#if span_COMPILER_GNUC_VERSION >= 900
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Winit-list-lifetime"
-#endif
     template< extent_t U = Extent
         span_REQUIRES_T((
             U != dynamic_extent
         ))
     >
+#if span_COMPILER_GNUC_VERSION >= 900   // prevent GCC's "-Winit-list-lifetime"
+    span_constexpr14 explicit span( std::initializer_list<value_type> il ) span_noexcept
+    {
+        data_ = il.begin();
+        size_ = il.size();
+    }
+#else
     span_constexpr explicit span( std::initializer_list<value_type> il ) span_noexcept
         : data_( il.begin() )
         , size_( il.size()  )
     {}
-#if span_COMPILER_GNUC_VERSION >= 900
-# pragma GCC diagnostic pop
 #endif
 
 #endif // MSVC 120 (VS2013)
 
-#if span_COMPILER_GNUC_VERSION >= 900
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Winit-list-lifetime"
-#endif
     template< extent_t U = Extent
         span_REQUIRES_T((
             U == dynamic_extent
         ))
     >
+#if span_COMPILER_GNUC_VERSION >= 900   // prevent GCC's "-Winit-list-lifetime"
+    span_constexpr14 /*explicit*/ span( std::initializer_list<value_type> il ) span_noexcept
+    {
+        data_ = il.begin();
+        size_ = il.size();
+    }
+#else
     span_constexpr /*explicit*/ span( std::initializer_list<value_type> il ) span_noexcept
         : data_( il.begin() )
         , size_( il.size()  )
     {}
-#if span_COMPILER_GNUC_VERSION >= 900
-# pragma GCC diagnostic pop
 #endif
 
 #endif // P2447
diff --git a/ndn-cxx/interest.cpp b/ndn-cxx/interest.cpp
index ea0302c..66e240a 100644
--- a/ndn-cxx/interest.cpp
+++ b/ndn-cxx/interest.cpp
@@ -492,16 +492,22 @@
 }
 
 Interest&
+Interest::setApplicationParameters(span<const uint8_t> value)
+{
+  setApplicationParametersInternal(makeBinaryBlock(tlv::ApplicationParameters, value.data(), value.size()));
+  addOrReplaceParametersDigestComponent();
+  m_wire.reset();
+  return *this;
+}
+
+Interest&
 Interest::setApplicationParameters(const uint8_t* value, size_t length)
 {
   if (value == nullptr && length != 0) {
     NDN_THROW(std::invalid_argument("ApplicationParameters buffer cannot be nullptr"));
   }
 
-  setApplicationParametersInternal(makeBinaryBlock(tlv::ApplicationParameters, value, length));
-  addOrReplaceParametersDigestComponent();
-  m_wire.reset();
-  return *this;
+  return setApplicationParameters(make_span(value, length));
 }
 
 Interest&
diff --git a/ndn-cxx/interest.hpp b/ndn-cxx/interest.hpp
index 4abfe0c..e470aa8 100644
--- a/ndn-cxx/interest.hpp
+++ b/ndn-cxx/interest.hpp
@@ -96,7 +96,7 @@
     friend std::ostream&
     operator<<(std::ostream& os, const Nonce& nonce)
     {
-      printHex(os, nonce.data(), nonce.size(), false);
+      printHex(os, nonce, false);
       return os;
     }
   };
@@ -345,10 +345,8 @@
   setApplicationParameters(const Block& block);
 
   /**
-   * @brief Set ApplicationParameters by copying from a raw buffer.
-   * @param value points to a buffer from which the TLV-VALUE of the parameters will be copied;
-   *              may be nullptr if @p length is zero
-   * @param length size of the buffer
+   * @brief Set ApplicationParameters by copying from a contiguous sequence of bytes.
+   * @param value buffer from which the TLV-VALUE of the parameters will be copied
    * @return a reference to this Interest
    *
    * This function will also recompute the value of the ParametersSha256DigestComponent in the
@@ -356,6 +354,22 @@
    * be appended to it.
    */
   Interest&
+  setApplicationParameters(span<const uint8_t> value);
+
+  /**
+   * @brief Set ApplicationParameters by copying from a raw buffer.
+   * @param value points to a buffer from which the TLV-VALUE of the parameters will be copied;
+   *              may be nullptr if @p length is zero
+   * @param length size of the buffer
+   * @return a reference to this Interest
+   * @deprecated Use setApplicationParameters(span<const uint8_t>)
+   *
+   * This function will also recompute the value of the ParametersSha256DigestComponent in the
+   * Interest's name. If the name does not contain a ParametersSha256DigestComponent, one will
+   * be appended to it.
+   */
+  [[deprecated("use the overload that takes a span<>")]]
+  Interest&
   setApplicationParameters(const uint8_t* value, size_t length);
 
   /**
diff --git a/ndn-cxx/link.cpp b/ndn-cxx/link.cpp
index 54e9321..9110bf8 100644
--- a/ndn-cxx/link.cpp
+++ b/ndn-cxx/link.cpp
@@ -50,11 +50,11 @@
   setContentType(tlv::ContentType_Link);
 
   if (m_delegations.empty()) {
-    setContent(nullptr, 0);
-    return;
+    setContent(span<uint8_t>{});
   }
-
-  setContent(makeNestedBlock(tlv::Content, m_delegations.begin(), m_delegations.end()));
+  else {
+    setContent(makeNestedBlock(tlv::Content, m_delegations.begin(), m_delegations.end()));
+  }
 }
 
 void
diff --git a/ndn-cxx/meta-info.hpp b/ndn-cxx/meta-info.hpp
index 9503e44..a4155cd 100644
--- a/ndn-cxx/meta-info.hpp
+++ b/ndn-cxx/meta-info.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2022 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -35,26 +35,25 @@
 const time::milliseconds DEFAULT_FRESHNESS_PERIOD = time::milliseconds::zero();
 
 /**
- * A MetaInfo holds the meta info which is signed inside the data packet.
+ * @brief A MetaInfo holds the meta info which is signed inside the data packet.
  *
- * The class allows experimentation with application-defined meta information blocks,
- * which slightly violates NDN-TLV specification.  When using the application-defined
- * meta information blocks be aware that this may result in packet drop (NFD and
- * previous versions of ndn-cxx will gracefully accept such packet).
+ * The class allows experimentation with application-defined meta-information elements.
+ * When using these application-defined elements, be aware that it may result in dropped
+ * packets (NFD and previous versions of ndn-cxx will gracefully accept such packets).
  *
- * The following definition of MetaInfo block is assumed in this implementation (compared
- * to the NDN-TLV spec, definition extended to allow optional AppMetaInfo TLV blocks):
+ * The following definition of the MetaInfo element is assumed in this implementation (compared
+ * to the NDN-TLV spec, the definition is extended to allow optional AppMetaInfo elements):
  *
- *     MetaInfo ::= META-INFO-TYPE TLV-LENGTH
- *                    ContentType?
- *                    FreshnessPeriod?
- *                    FinalBlockId?
- *                    AppMetaInfo*
+ *     MetaInfo = META-INFO-TYPE TLV-LENGTH
+ *                  [ContentType]
+ *                  [FreshnessPeriod]
+ *                  [FinalBlockId]
+ *                  *AppMetaInfo
  *
- *     AppMetaInfo ::= any TLV block with type in the restricted application range [128, 252]
+ * Note that AppMetaInfo elements are application-defined and must have a TLV-TYPE inside
+ * the range reserved for application use, i.e., `[128, 252]`.
  *
- * Note that AppMetaInfo blocks are application-defined and must have TLV type from
- * the restricted application range [128, 252].
+ * @sa https://named-data.net/doc/NDN-packet-spec/0.3/data.html#metainfo
  */
 class MetaInfo
 {
@@ -133,8 +132,6 @@
   /**
    * @brief Get all app-defined MetaInfo items
    *
-   * @note Warning: Experimental API, which may change or disappear in the future
-   *
    * @note If MetaInfo is decoded from wire and setType, setFreshnessPeriod, or setFinalBlock
    *       is called before *AppMetaInfo, all app-defined blocks will be lost
    */
@@ -147,9 +144,7 @@
    * This method will replace all existing app-defined MetaInfo items, if they existed.
    *
    * @throw Error if some block in @p info has type not in the application range
-   *              (http://named-data.net/doc/ndn-tlv/types.html)
-   *
-   * @note Warning: Experimental API, which may change or disappear in the future
+   *              (https://named-data.net/doc/NDN-packet-spec/0.3/types.html)
    *
    * @note If MetaInfo is decoded from wire and setType, setFreshnessPeriod, or setFinalBlock
    *       is called before *AppMetaInfo, all app-defined blocks will be lost
@@ -161,9 +156,7 @@
    * @brief Add an app-defined MetaInfo item
    *
    * @throw Error if @p block has type not in the application range
-   *              (http://named-data.net/doc/ndn-tlv/types.html)
-   *
-   * @note Warning: Experimental API, which may change or disappear in the future
+   *              (https://named-data.net/doc/NDN-packet-spec/0.3/types.html)
    *
    * @note If MetaInfo is decoded from wire and setType, setFreshnessPeriod, or setFinalBlock
    *       is called before *AppMetaInfo, all app-defined blocks will be lost
@@ -176,8 +169,6 @@
    *
    * @return true if an item was deleted
    *
-   * @note Warning: Experimental API, which may change or disappear in the future
-   *
    * @note If MetaInfo is decoded from wire and setType, setFreshnessPeriod, or setFinalBlock
    *       is called before *AppMetaInfo, all app-defined blocks will be lost
    */
@@ -190,9 +181,7 @@
    * @return NULL if an item is not found, otherwise const pointer to the item
    *
    * @throw Error if @p tlvType is not in the application range
-   *              (http://named-data.net/doc/ndn-tlv/types.html)
-   *
-   * @note Warning: Experimental API, which may change or disappear in the future
+   *              (https://named-data.net/doc/NDN-packet-spec/0.3/types.html)
    *
    * @note If MetaInfo is decoded from wire and setType, setFreshnessPeriod, or setFinalBlock
    *       is called before *AppMetaInfo, all app-defined blocks will be lost
diff --git a/ndn-cxx/security/key-chain.cpp b/ndn-cxx/security/key-chain.cpp
index 1c649dc..0b55c91 100644
--- a/ndn-cxx/security/key-chain.cpp
+++ b/ndn-cxx/security/key-chain.cpp
@@ -576,7 +576,7 @@
   certificate.setFreshnessPeriod(1_h);
 
   // set content
-  certificate.setContent(key.getPublicKey().data(), key.getPublicKey().size());
+  certificate.setContent(key.getPublicKey());
 
   // set signature-info
   SignatureInfo signatureInfo;
diff --git a/ndn-cxx/security/transform/buffer-source.cpp b/ndn-cxx/security/transform/buffer-source.cpp
index 515964f..ea2b3d2 100644
--- a/ndn-cxx/security/transform/buffer-source.cpp
+++ b/ndn-cxx/security/transform/buffer-source.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2022 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -53,7 +53,7 @@
   for (auto buffer : m_bufs) {
     while (!buffer.empty()) {
       size_t nBytesWritten = m_next->write(buffer);
-      buffer = buffer.last(buffer.size() - nBytesWritten);
+      buffer = buffer.subspan(nBytesWritten);
     }
   }
 
diff --git a/ndn-cxx/security/transform/transform-base.cpp b/ndn-cxx/security/transform/transform-base.cpp
index aa6de28..731b22c 100644
--- a/ndn-cxx/security/transform/transform-base.cpp
+++ b/ndn-cxx/security/transform/transform-base.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2022 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -70,7 +70,7 @@
   if (isOutputBufferEmpty())
     return;
 
-  size_t nWritten = m_next->write(make_span(*m_oBuffer).last(m_oBuffer->size() - m_outputOffset));
+  size_t nWritten = m_next->write(make_span(*m_oBuffer).subspan(m_outputOffset));
   m_outputOffset += nWritten;
 }
 
diff --git a/tests/key-chain-fixture.cpp b/tests/key-chain-fixture.cpp
index 92518a3..73e27c4 100644
--- a/tests/key-chain-fixture.cpp
+++ b/tests/key-chain-fixture.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2022 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -56,7 +56,7 @@
   cert.setFreshnessPeriod(1_h);
 
   // set content
-  cert.setContent(key.getPublicKey().data(), key.getPublicKey().size());
+  cert.setContent(key.getPublicKey());
 
   // set signature info
   ndn::SignatureInfo info;
diff --git a/tests/unit/data.t.cpp b/tests/unit/data.t.cpp
index d6bb6bb..2ab660e 100644
--- a/tests/unit/data.t.cpp
+++ b/tests/unit/data.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2022 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -182,7 +182,7 @@
   Data d("/local/ndn/prefix");
   d.setContentType(tlv::ContentType_Blob);
   d.setFreshnessPeriod(10_s);
-  d.setContent(CONTENT1, sizeof(CONTENT1));
+  d.setContent(CONTENT1);
 
   SignatureInfo signatureInfo;
   signatureInfo.setSignatureType(tlv::SignatureSha256WithRsa);
@@ -397,7 +397,7 @@
   Data d(Name("/local/ndn/prefix"));
   d.setContentType(tlv::ContentType_Blob);
   d.setFreshnessPeriod(10_s);
-  d.setContent(CONTENT1, sizeof(CONTENT1));
+  d.setContent(CONTENT1);
   BOOST_CHECK_THROW(d.getFullName(), Data::Error); // FullName is unavailable without signing
 
   m_keyChain.sign(d);
@@ -527,16 +527,17 @@
   // Block overload, default constructed (invalid)
   BOOST_CHECK_THROW(d.setContent(Block{}), std::invalid_argument);
 
-  // raw buffer overload
-  d.setContent(nested, sizeof(nested));
+  // span overload
+  d.setContent(nested);
   BOOST_CHECK_EQUAL(d.hasContent(), true);
   BOOST_CHECK_EQUAL(d.getContent().type(), tlv::Content);
   BOOST_CHECK_EQUAL_COLLECTIONS(d.getContent().value_begin(), d.getContent().value_end(),
                                 nested, nested + sizeof(nested));
-  d.setContent(nullptr, 0);
+  d.setContent(span<uint8_t>{});
   BOOST_CHECK_EQUAL(d.hasContent(), true);
   BOOST_CHECK_EQUAL(d.getContent().type(), tlv::Content);
   BOOST_CHECK_EQUAL(d.getContent().value_size(), 0);
+  // raw buffer overload (deprecated)
   BOOST_CHECK_THROW(d.setContent(nullptr, 1), std::invalid_argument);
 
   // ConstBufferPtr overload
@@ -631,11 +632,11 @@
   BOOST_CHECK_EQUAL(a != b, false);
 
   static const uint8_t someData[] = "someData";
-  a.setContent(someData, sizeof(someData));
+  a.setContent(someData);
   BOOST_CHECK_EQUAL(a == b, false);
   BOOST_CHECK_EQUAL(a != b, true);
 
-  b.setContent(someData, sizeof(someData));
+  b.setContent(someData);
   BOOST_CHECK_EQUAL(a == b, true);
   BOOST_CHECK_EQUAL(a != b, false);
 
diff --git a/tests/unit/ims/in-memory-storage.t.cpp b/tests/unit/ims/in-memory-storage.t.cpp
index 594837b..54ceeb0 100644
--- a/tests/unit/ims/in-memory-storage.t.cpp
+++ b/tests/unit/ims/in-memory-storage.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2020 Regents of the University of California.
+ * Copyright (c) 2013-2022 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -62,17 +62,17 @@
 
   Name name("/a");
 
-  uint32_t content1 = 1;
-  shared_ptr<Data> data1 = makeData(name);
+  const uint8_t content1[] = {1, 2, 3, 4};
+  auto data1 = makeData(name);
   data1->setFreshnessPeriod(99999_ms);
-  data1->setContent(reinterpret_cast<const uint8_t*>(&content1), sizeof(content1));
+  data1->setContent(content1);
   signData(data1);
   ims.insert(*data1);
 
-  uint32_t content2 = 2;
-  shared_ptr<Data> data2 = makeData(name);
+  const uint8_t content2[] = {5, 6, 7, 8};
+  auto data2 = makeData(name);
   data2->setFreshnessPeriod(99999_ms);
-  data2->setContent(reinterpret_cast<const uint8_t*>(&content2), sizeof(content2));
+  data2->setContent(content2);
   signData(data2);
   ims.insert(*data2);
 
@@ -186,15 +186,15 @@
   T ims;
 
   Name name("/a");
-  uint32_t content1 = 1;
-  shared_ptr<Data> data1 = makeData(name);
-  data1->setContent(reinterpret_cast<const uint8_t*>(&content1), sizeof(content1));
+  const uint8_t content1[] = {1, 2, 3, 4};
+  auto data1 = makeData(name);
+  data1->setContent(content1);
   signData(data1);
   ims.insert(*data1);
 
-  uint32_t content2 = 2;
-  shared_ptr<Data> data2 = makeData(name);
-  data2->setContent(reinterpret_cast<const uint8_t*>(&content2), sizeof(content2));
+  const uint8_t content2[] = {5, 6, 7, 8};
+  auto data2 = makeData(name);
+  data2->setContent(content2);
   signData(data2);
 
   auto found = ims.find(data2->getFullName());
@@ -207,17 +207,17 @@
 
   Name name("/insertandremovebyname");
 
-  uint32_t content1 = 1;
-  shared_ptr<Data> data1 = makeData(name);
+  const uint8_t content1[] = {1, 2, 3, 4};
+  auto data1 = makeData(name);
   data1->setFreshnessPeriod(99999_ms);
-  data1->setContent(reinterpret_cast<const uint8_t*>(&content1), sizeof(content1));
+  data1->setContent(content1);
   signData(data1);
   ims.insert(*data1);
 
-  uint32_t content2 = 2;
-  shared_ptr<Data> data2 = makeData(name);
+  const uint8_t content2[] = {5, 6, 7, 8};
+  auto data2 = makeData(name);
   data2->setFreshnessPeriod(99999_ms);
-  data2->setContent(reinterpret_cast<const uint8_t*>(&content2), sizeof(content2));
+  data2->setContent(content2);
   signData(data2);
   ims.insert(*data2);
 
@@ -451,7 +451,7 @@
          const time::milliseconds& freshWindow = InMemoryStorage::INFINITE_WINDOW)
   {
     auto data = makeData(name);
-    data->setContent(reinterpret_cast<const uint8_t*>(&id), sizeof(id));
+    data->setContent(make_span(reinterpret_cast<const uint8_t*>(&id), sizeof(id)));
 
     if (modifyData != nullptr) {
       modifyData(*data);
diff --git a/tests/unit/interest.t.cpp b/tests/unit/interest.t.cpp
index 482eac8..d36e0a9 100644
--- a/tests/unit/interest.t.cpp
+++ b/tests/unit/interest.t.cpp
@@ -889,11 +889,12 @@
   BOOST_CHECK_EQUAL(i.getApplicationParameters(), "24038001C1"_block);
   BOOST_CHECK_THROW(i.setApplicationParameters(Block{}), std::invalid_argument);
 
-  // raw buffer+size overload
-  i.setApplicationParameters(PARAMETERS1, sizeof(PARAMETERS1));
+  // span overload
+  i.setApplicationParameters(PARAMETERS1);
   BOOST_CHECK_EQUAL(i.getApplicationParameters(), "2401C1"_block);
-  i.setApplicationParameters(nullptr, 0);
+  i.setApplicationParameters(span<uint8_t>{});
   BOOST_CHECK_EQUAL(i.getApplicationParameters(), "2400"_block);
+  // raw buffer+size overload (deprecated)
   BOOST_CHECK_THROW(i.setApplicationParameters(nullptr, 42), std::invalid_argument);
 
   // ConstBufferPtr overload
@@ -983,7 +984,7 @@
                     "/I/params-sha256=ff9100e04eaadcf30674d98026a051ba25f56b69bfa026dcccd72c6ea0f7315a");
   BOOST_CHECK_EQUAL(i.isParametersDigestValid(), true);
 
-  i.setApplicationParameters(nullptr, 0); // updates ParametersSha256DigestComponent
+  i.setApplicationParameters(span<uint8_t>{}); // updates ParametersSha256DigestComponent
   BOOST_CHECK_EQUAL(i.getName(),
                     "/I/params-sha256=33b67cb5385ceddad93d0ee960679041613bed34b8b4a5e6362fe7539ba2d3ce");
   BOOST_CHECK_EQUAL(i.hasApplicationParameters(), true);
@@ -1141,7 +1142,7 @@
   });
 
   // Test failure with missing InterestSignatureInfo
-  i3.setApplicationParameters(nullptr, 0);
+  i3.setApplicationParameters(span<uint8_t>{});
   BOOST_CHECK_EXCEPTION(i3.extractSignedRanges(), tlv::Error, [] (const auto& e) {
     return e.what() == "Interest missing InterestSignatureInfo"s;
   });
diff --git a/tests/unit/security/certificate.t.cpp b/tests/unit/security/certificate.t.cpp
index 1069584..7626e04 100644
--- a/tests/unit/security/certificate.t.cpp
+++ b/tests/unit/security/certificate.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2020 Regents of the University of California.
+ * Copyright (c) 2013-2022 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -163,7 +163,7 @@
   Certificate certificate;
   certificate.setName("/ndn/site1/KEY/ksk-1416425377094/0123/%FD%00%00%01I%C9%8B");
   certificate.setFreshnessPeriod(1_h);
-  certificate.setContent(PUBLIC_KEY, sizeof(PUBLIC_KEY));
+  certificate.setContent(PUBLIC_KEY);
   generateFakeSignature(certificate);
 
   BOOST_CHECK_EQUAL(certificate.getName(), "/ndn/site1/KEY/ksk-1416425377094/0123/%FD%00%00%01I%C9%8B");
@@ -185,7 +185,7 @@
   Certificate certificate;
   certificate.setName("/ndn/site1/KEY/ksk-1416425377094/0123/%FD%00%00%01I%C9%8B");
   certificate.setFreshnessPeriod(1_h);
-  certificate.setContent(PUBLIC_KEY, sizeof(PUBLIC_KEY));
+  certificate.setContent(PUBLIC_KEY);
   generateFakeSignature(certificate);
 
   BOOST_CHECK_EQUAL(certificate.isValid(), true);
@@ -237,14 +237,14 @@
 BOOST_FIXTURE_TEST_CASE(EmptyContent, InvalidCertFixture)
 {
   Data data(m_certBase);
-  data.setContent(nullptr, 0);
+  data.setContent(span<uint8_t>{});
   generateFakeSignature(data);
 
-  BOOST_CHECK_THROW((Certificate(data)), Certificate::Error);
-  BOOST_CHECK_THROW((Certificate(std::move(data))), Certificate::Error);
+  BOOST_CHECK_THROW(Certificate{data}, Certificate::Error);
+  BOOST_CHECK_THROW(Certificate{std::move(data)}, Certificate::Error);
 
   Certificate cert(m_certBase);
-  cert.setContent(nullptr, 0);
+  cert.setContent(span<uint8_t>{});
   generateFakeSignature(cert);
   BOOST_CHECK_THROW(cert.getPublicKey(), Certificate::Error);
 }
@@ -270,7 +270,7 @@
   Certificate certificate(Block(CERT, sizeof(CERT)));
   BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(certificate), expectedCertificateInfo);
 
-  // @todo Check output formats of other certificates
+  // TODO: Check output formats of other certificates
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestCertificate
diff --git a/tests/unit/util/segment-fetcher.t.cpp b/tests/unit/util/segment-fetcher.t.cpp
index 55247fe..cd74372 100644
--- a/tests/unit/util/segment-fetcher.t.cpp
+++ b/tests/unit/util/segment-fetcher.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2022 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -46,7 +46,7 @@
   {
     const uint8_t buffer[] = "Hello, world!";
     auto data = makeData(Name(baseName).appendSegment(segment));
-    data->setContent(buffer, sizeof(buffer));
+    data->setContent(buffer);
     data->setFreshnessPeriod(1_s);
     if (isFinal) {
       data->setFinalBlock(data->getName()[-1]);
@@ -559,7 +559,7 @@
   const uint8_t buffer[] = "Hello, world!";
   auto data = makeData("/hello/world/version0/no-segment");
   data->setFreshnessPeriod(1_s);
-  data->setContent(buffer, sizeof(buffer));
+  data->setContent(buffer);
 
   face.receive(*data);
   advanceClocks(10_ms);
diff --git a/tools/ndnsec/sign-req.cpp b/tools/ndnsec/sign-req.cpp
index 6151714..f4655af 100644
--- a/tools/ndnsec/sign-req.cpp
+++ b/tools/ndnsec/sign-req.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2021 Regents of the University of California.
+ * Copyright (c) 2013-2022 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -95,7 +95,7 @@
   certificate.setFreshnessPeriod(1_h);
 
   // set content
-  certificate.setContent(key.getPublicKey().data(), key.getPublicKey().size());
+  certificate.setContent(key.getPublicKey());
 
   // set signature-info
   SignatureInfo signatureInfo;
