diff --git a/ndn-cxx/face.cpp b/ndn-cxx/face.cpp
index 3da96b7..db4d196 100644
--- a/ndn-cxx/face.cpp
+++ b/ndn-cxx/face.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).
  *
@@ -24,6 +24,7 @@
 #include "ndn-cxx/impl/face-impl.hpp"
 #include "ndn-cxx/net/face-uri.hpp"
 #include "ndn-cxx/security/signing-helpers.hpp"
+#include "ndn-cxx/util/config-file.hpp"
 #include "ndn-cxx/util/scope.hpp"
 #include "ndn-cxx/util/time.hpp"
 
diff --git a/ndn-cxx/impl/face-impl.hpp b/ndn-cxx/impl/face-impl.hpp
index 70e6028..b5065d1 100644
--- a/ndn-cxx/impl/face-impl.hpp
+++ b/ndn-cxx/impl/face-impl.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).
  *
@@ -33,7 +33,6 @@
 #include "ndn-cxx/mgmt/nfd/controller.hpp"
 #include "ndn-cxx/transport/tcp-transport.hpp"
 #include "ndn-cxx/transport/unix-transport.hpp"
-#include "ndn-cxx/util/config-file.hpp"
 #include "ndn-cxx/util/logger.hpp"
 #include "ndn-cxx/util/scheduler.hpp"
 #include "ndn-cxx/util/signal.hpp"
diff --git a/ndn-cxx/transport/detail/stream-transport-impl.hpp b/ndn-cxx/transport/detail/stream-transport-impl.hpp
index 4cd1ff1..68646d6 100644
--- a/ndn-cxx/transport/detail/stream-transport-impl.hpp
+++ b/ndn-cxx/transport/detail/stream-transport-impl.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).
  *
@@ -28,6 +28,7 @@
 #include <boost/asio/write.hpp>
 
 #include <list>
+#include <queue>
 
 namespace ndn {
 namespace detail {
@@ -42,8 +43,7 @@
 {
 public:
   using Impl = StreamTransportImpl<BaseTransport, Protocol>;
-  using BlockSequence = std::list<Block>;
-  using TransmissionQueue = std::list<BlockSequence>;
+  using TransmissionQueue = std::queue<Block, std::list<Block>>;
 
   StreamTransportImpl(BaseTransport& transport, boost::asio::io_service& ioService)
     : m_transport(transport)
@@ -85,7 +85,7 @@
 
     m_transport.m_isConnected = false;
     m_transport.m_isReceiving = false;
-    m_transmissionQueue.clear();
+    TransmissionQueue{}.swap(m_transmissionQueue); // clear the queue
   }
 
   void
@@ -114,20 +114,15 @@
   }
 
   void
-  send(const Block& wire)
+  send(const Block& block)
   {
-    BlockSequence sequence;
-    sequence.push_back(wire);
-    send(std::move(sequence));
-  }
+    m_transmissionQueue.push(block);
 
-  void
-  send(const Block& header, const Block& payload)
-  {
-    BlockSequence sequence;
-    sequence.push_back(header);
-    sequence.push_back(payload);
-    send(std::move(sequence));
+    if (m_transport.m_isConnected && m_transmissionQueue.size() == 1) {
+      asyncWrite();
+    }
+    // if not connected or there's another transmission in progress (m_transmissionQueue.size() > 1),
+    // the next write will be scheduled either in connectHandler or in asyncWriteHandler
   }
 
 protected:
@@ -162,26 +157,12 @@
   }
 
   void
-  send(BlockSequence&& sequence)
-  {
-    m_transmissionQueue.emplace_back(sequence);
-
-    if (m_transport.m_isConnected && m_transmissionQueue.size() == 1) {
-      asyncWrite();
-    }
-
-    // if not connected or there is transmission in progress (m_transmissionQueue.size() > 1),
-    // next write will be scheduled either in connectHandler or in asyncWriteHandler
-  }
-
-  void
   asyncWrite()
   {
     BOOST_ASSERT(!m_transmissionQueue.empty());
-    boost::asio::async_write(m_socket, m_transmissionQueue.front(),
+    boost::asio::async_write(m_socket, boost::asio::buffer(m_transmissionQueue.front()),
       // capture a copy of the shared_ptr to "this" to prevent deallocation
-      [this, self = this->shared_from_this(),
-       queueItem = m_transmissionQueue.begin()] (const auto& error, size_t) {
+      [this, self = this->shared_from_this()] (const auto& error, size_t) {
         if (error) {
           if (error == boost::system::errc::operation_canceled) {
             // async receive has been explicitly cancelled (e.g., socket close)
@@ -195,7 +176,8 @@
           return; // queue has been already cleared
         }
 
-        m_transmissionQueue.erase(queueItem);
+        BOOST_ASSERT(!m_transmissionQueue.empty());
+        m_transmissionQueue.pop();
 
         if (!m_transmissionQueue.empty()) {
           asyncWrite();
@@ -265,7 +247,6 @@
   typename Protocol::socket m_socket;
   uint8_t m_inputBuffer[MAX_NDN_PACKET_SIZE];
   size_t m_inputBufferSize = 0;
-
   TransmissionQueue m_transmissionQueue;
   boost::asio::steady_timer m_connectTimer;
   bool m_isConnecting = false;
diff --git a/ndn-cxx/transport/tcp-transport.cpp b/ndn-cxx/transport/tcp-transport.cpp
index 512f5e1..0c5e516 100644
--- a/ndn-cxx/transport/tcp-transport.cpp
+++ b/ndn-cxx/transport/tcp-transport.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2019 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).
  *
@@ -99,13 +99,6 @@
 }
 
 void
-TcpTransport::send(const Block& header, const Block& payload)
-{
-  BOOST_ASSERT(m_impl != nullptr);
-  m_impl->send(header, payload);
-}
-
-void
 TcpTransport::close()
 {
   BOOST_ASSERT(m_impl != nullptr);
diff --git a/ndn-cxx/transport/tcp-transport.hpp b/ndn-cxx/transport/tcp-transport.hpp
index 7cf2a3e..95c28ea 100644
--- a/ndn-cxx/transport/tcp-transport.hpp
+++ b/ndn-cxx/transport/tcp-transport.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).
  *
@@ -23,7 +23,6 @@
 #define NDN_CXX_TRANSPORT_TCP_TRANSPORT_HPP
 
 #include "ndn-cxx/transport/transport.hpp"
-#include "ndn-cxx/util/config-file.hpp"
 
 #include <boost/asio/ip/tcp.hpp>
 
@@ -64,9 +63,6 @@
   void
   send(const Block& wire) override;
 
-  void
-  send(const Block& header, const Block& payload) override;
-
   /** \brief Create transport with parameters defined in URI
    *  \throw Transport::Error incorrect URI or unsupported protocol is specified
    */
diff --git a/ndn-cxx/transport/transport.hpp b/ndn-cxx/transport/transport.hpp
index 71e8f99..6fd4374 100644
--- a/ndn-cxx/transport/transport.hpp
+++ b/ndn-cxx/transport/transport.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).
  *
@@ -49,50 +49,47 @@
   virtual
   ~Transport() = default;
 
-  /** \brief Asynchronously open the connection.
-   *  \param ioService io_service to create socket on
-   *  \param receiveCallback callback function when a TLV block is received; must not be empty
-   *  \throw boost::system::system_error connection cannot be established
+  /**
+   * \brief Asynchronously open the connection.
+   * \param ioService io_service to create socket on
+   * \param receiveCallback callback function when a TLV block is received; must not be empty
+   * \throw boost::system::system_error connection cannot be established
    */
   virtual void
   connect(boost::asio::io_service& ioService, ReceiveCallback receiveCallback);
 
-  /** \brief Close the connection.
+  /**
+   * \brief Close the connection.
    */
   virtual void
   close() = 0;
 
-  /** \brief send a TLV block through the transport
+  /**
+   * \brief Send a TLV block through the transport.
    */
   virtual void
-  send(const Block& wire) = 0;
+  send(const Block& block) = 0;
 
-  /** \brief send two memory blocks through the transport
-   *
-   *  Scatter/gather API is utilized to send two non-consecutive memory blocks together
-   *  (as part of the same message in datagram-oriented transports).
-   */
-  virtual void
-  send(const Block& header, const Block& payload) = 0;
-
-  /** \brief pause the transport
-   *  \post the receive callback will not be invoked
-   *  \note This operation has no effect if transport has been paused,
-   *        or when connection is being established.
+  /**
+   * \brief Pause the transport, canceling all pending operations.
+   * \post the receive callback will not be invoked
+   * \note This operation has no effect if the transport has been paused,
+   *       or when the connection is being established.
    */
   virtual void
   pause() = 0;
 
-  /** \brief resume the transport
-   *  \post the receive callback will be invoked
-   *  \note This operation has no effect if transport is not paused,
-   *        or when connection is being established.
+  /**
+   * \brief Resume the transport.
+   * \post the receive callback will be invoked
+   * \note This operation has no effect if the transport is not paused,
+   *       or when the connection is being established.
    */
   virtual void
   resume() = 0;
 
-  /** \retval true connection has been established
-   *  \retval false connection is not yet established or has been closed
+  /**
+   * \brief Return whether the transport is connected.
    */
   bool
   isConnected() const noexcept
@@ -100,8 +97,9 @@
     return m_isConnected;
   }
 
-  /** \retval true incoming packets are expected, the receive callback will be invoked
-   *  \retval false incoming packets are not expected, the receive callback will not be invoked
+  /**
+   * \retval true incoming packets are expected, the receive callback will be invoked
+   * \retval false incoming packets are not expected, the receive callback will not be invoked
    */
   bool
   isReceiving() const noexcept
diff --git a/ndn-cxx/transport/unix-transport.cpp b/ndn-cxx/transport/unix-transport.cpp
index f1f1526..b8404eb 100644
--- a/ndn-cxx/transport/unix-transport.cpp
+++ b/ndn-cxx/transport/unix-transport.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).
  *
@@ -97,13 +97,6 @@
 }
 
 void
-UnixTransport::send(const Block& header, const Block& payload)
-{
-  BOOST_ASSERT(m_impl != nullptr);
-  m_impl->send(header, payload);
-}
-
-void
 UnixTransport::close()
 {
   BOOST_ASSERT(m_impl != nullptr);
diff --git a/ndn-cxx/transport/unix-transport.hpp b/ndn-cxx/transport/unix-transport.hpp
index da19b4c..2d1ef05 100644
--- a/ndn-cxx/transport/unix-transport.hpp
+++ b/ndn-cxx/transport/unix-transport.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).
  *
@@ -23,7 +23,6 @@
 #define NDN_CXX_TRANSPORT_UNIX_TRANSPORT_HPP
 
 #include "ndn-cxx/transport/transport.hpp"
-#include "ndn-cxx/util/config-file.hpp"
 
 #include <boost/asio/local/stream_protocol.hpp>
 
@@ -61,9 +60,6 @@
   void
   send(const Block& wire) override;
 
-  void
-  send(const Block& header, const Block& payload) override;
-
   /** \brief Create transport with parameters defined in URI
    *  \throw Transport::Error incorrect URI or unsupported protocol is specified
    */
diff --git a/ndn-cxx/util/dummy-client-face.cpp b/ndn-cxx/util/dummy-client-face.cpp
index 9f2cb9e..017bb76 100644
--- a/ndn-cxx/util/dummy-client-face.cpp
+++ b/ndn-cxx/util/dummy-client-face.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2019 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).
  *
@@ -32,7 +32,7 @@
 namespace ndn {
 namespace util {
 
-class DummyClientFace::Transport : public ndn::Transport
+class DummyClientFace::Transport final : public ndn::Transport
 {
 public:
   void
@@ -45,42 +45,26 @@
   }
 
   void
-  close() override
+  send(const Block& block) final
+  {
+    onSendBlock(block);
+  }
+
+  void
+  close() final
   {
   }
 
   void
-  pause() override
+  pause() final
   {
   }
 
   void
-  resume() override
+  resume() final
   {
   }
 
-  void
-  send(const Block& wire) override
-  {
-    onSendBlock(wire);
-  }
-
-  void
-  send(const Block& header, const Block& payload) override
-  {
-    EncodingBuffer encoder(header.size() + payload.size(), header.size() + payload.size());
-    encoder.appendByteArray(header.wire(), header.size());
-    encoder.appendByteArray(payload.wire(), payload.size());
-
-    this->send(encoder.block());
-  }
-
-  boost::asio::io_service&
-  getIoService()
-  {
-    return *m_ioService;
-  }
-
 public:
   Signal<Transport, Block> onSendBlock;
 };
diff --git a/ndn-cxx/util/dummy-client-face.hpp b/ndn-cxx/util/dummy-client-face.hpp
index 66f4e21..599d934 100644
--- a/ndn-cxx/util/dummy-client-face.hpp
+++ b/ndn-cxx/util/dummy-client-face.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).
  *
@@ -29,7 +29,7 @@
 namespace ndn {
 namespace util {
 
-/** \brief a client-side face for unit testing
+/** \brief A client-side face for unit testing.
  */
 class DummyClientFace : public ndn::Face
 {
@@ -98,7 +98,7 @@
   DummyClientFace(boost::asio::io_service& ioService, KeyChain& keyChain,
                   const Options& options = Options());
 
-  ~DummyClientFace();
+  ~DummyClientFace() override;
 
   /** \brief cause the Face to receive an interest
    */
diff --git a/tests/unit/face.t.cpp b/tests/unit/face.t.cpp
index eaab9b6..5fdfd1c 100644
--- a/tests/unit/face.t.cpp
+++ b/tests/unit/face.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).
  *
@@ -23,6 +23,7 @@
 #include "ndn-cxx/lp/tags.hpp"
 #include "ndn-cxx/transport/tcp-transport.hpp"
 #include "ndn-cxx/transport/unix-transport.hpp"
+#include "ndn-cxx/util/config-file.hpp"
 #include "ndn-cxx/util/dummy-client-face.hpp"
 #include "ndn-cxx/util/scheduler.hpp"
 
