diff --git a/.mailmap b/.mailmap
index 129698a..c36e401 100644
--- a/.mailmap
+++ b/.mailmap
@@ -1,16 +1,18 @@
 A K M Mahmudul Hoque <akmhoque@gmail.com>
+<aa@cs.fiu.edu> <alexander.afanasyev@ucla.edu>
 <agawande@memphis.edu> <ashu2493@gmail.com>
-Nick Gordon <nmgordon@memphis.edu>
+Alexander Lane <awlane@memphis.edu>
+<davidepesa@gmail.com> <davide.pesavento@lip6.fr>
+<enewberry@email.arizona.edu> <enewberry@cs.arizona.edu>
 Laqin Fan <lfan1@memphis.edu>
+Md Ashiqur Rahman <marahman@email.arizona.edu>
+Muktadir R Chowdhury <mrchwdhr@memphis.edu>
+Muktadir R Chowdhury <mrchwdhr@memphis.edu> <muktadir.rahman.c@gmail.com>
+Nick Gordon <nmgordon@memphis.edu>
+Saurab Dulal <sdulal@memphis.edu>
 Syed Obaid Amin <soamin@memphis.edu>
 Syed Obaid Amin <soamin@memphis.edu> <obaidasyed@gmail.com>
 Syed Obaid Amin <soamin@memphis.edu> <obaid@Obaids-MacBook.local>
 Syed Obaid Amin <soamin@memphis.edu> <obaid@obaids-macbook.memphis.edu>
 Syed Obaid Amin <soamin@memphis.edu> <soamin@mira.cs.memphis.edu>
 Syed Obaid Amin <soamin@memphis.edu> <soamin@wd222yx4.memphis.edu>
-Muktadir R Chowdhury <mrchwdhr@memphis.edu>
-Muktadir R Chowdhury <mrchwdhr@memphis.edu> <muktadir.rahman.c@gmail.com>
-<aa@cs.fiu.edu> <alexander.afanasyev@ucla.edu>
-<davidepesa@gmail.com> <davide.pesavento@lip6.fr>
-<enewberry@email.arizona.edu> <enewberry@cs.arizona.edu>
-Md Ashiqur Rahman <marahman@email.arizona.edu>
diff --git a/src/hello-protocol.cpp b/src/hello-protocol.cpp
index 49722fe..78f37b1 100644
--- a/src/hello-protocol.cpp
+++ b/src/hello-protocol.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2023,  The University of Memphis,
+ * Copyright (c) 2014-2024,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -124,20 +124,21 @@
     return;
   }
 
-  ndn::Name neighbor;
-  neighbor.wireDecode(interestName.get(-1).blockFromValue());
+  ndn::Name neighbor(interestName.get(-1).blockFromValue());
   NLSR_LOG_DEBUG("Neighbor: " << neighbor);
   if (m_adjacencyList.isNeighbor(neighbor)) {
     auto data = std::make_shared<ndn::Data>();
     data->setName(ndn::Name(interest.getName()).appendVersion());
-    data->setFreshnessPeriod(10_s);
+    // A Hello reply being cached longer than is needed to fufill an Interest
+    // can cause counterintuitive behavior. Consequently, we use the default
+    // minimum of 0 ms.
+    data->setFreshnessPeriod(0_ms);
     data->setContent(ndn::make_span(reinterpret_cast<const uint8_t*>(INFO_COMPONENT.data()),
                                     INFO_COMPONENT.size()));
 
     m_keyChain.sign(*data, m_signingInfo);
 
     NLSR_LOG_DEBUG("Sending out data for name: " << interest.getName());
-
     m_face.put(*data);
     // increment SENT_HELLO_DATA
     hpIncrementSignal(Statistics::PacketType::SENT_HELLO_DATA);
@@ -146,7 +147,7 @@
     // If this neighbor was previously inactive, send our own hello interest, too
     if (adjacent->getStatus() == Adjacent::STATUS_INACTIVE) {
       // We can only do that if the neighbor currently has a face.
-      if(adjacent->getFaceId() != 0){
+      if (adjacent->getFaceId() != 0) {
         // interest name: /<neighbor>/NLSR/INFO/<router>
         ndn::Name interestName(neighbor);
         interestName.append(NLSR_COMPONENT);
