diff --git a/src/update/manager-base.cpp b/src/update/manager-base.cpp
index 6ca1c4a..238a88f 100644
--- a/src/update/manager-base.cpp
+++ b/src/update/manager-base.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2020,  The University of Memphis,
+/*
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -17,9 +17,10 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
 
 #include "manager-base.hpp"
+#include "logger.hpp"
 
 namespace nlsr {
 namespace update {
diff --git a/src/update/manager-base.hpp b/src/update/manager-base.hpp
index f9fa17c..557a015 100644
--- a/src/update/manager-base.hpp
+++ b/src/update/manager-base.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  The University of Memphis,
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -27,7 +27,6 @@
 #include "lsdb.hpp"
 #include "nfd-rib-commands.hpp"
 #include "prefix-update-commands.hpp"
-#include "logger.hpp"
 
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/interest.hpp>
@@ -38,6 +37,7 @@
 
 #include <boost/noncopyable.hpp>
 #include <iostream>
+#include <optional>
 
 namespace nlsr {
 
@@ -95,7 +95,7 @@
   std::string m_module;
 };
 
-class CommandManagerBase: public ManagerBase
+class CommandManagerBase : public ManagerBase
 {
 public:
   CommandManagerBase(ndn::mgmt::Dispatcher& m_dispatcher,
@@ -103,7 +103,8 @@
                      Lsdb& lsdb,
                      const std::string& module);
 
-  virtual ~CommandManagerBase() {}
+  virtual
+  ~CommandManagerBase() = default;
 
   /*! \brief add desired name prefix to the advertised name prefix list
    *         or insert a prefix into the FIB if parameters is valid.
@@ -126,14 +127,20 @@
   /*! \brief save an advertised prefix to the nlsr configuration file
    *         returns bool from the overridden function while nullopt here
    */
-  virtual ndn::optional<bool>
-  afterAdvertise(const ndn::Name& prefix) { return ndn::nullopt; }
+  virtual std::optional<bool>
+  afterAdvertise(const ndn::Name& prefix)
+  {
+    return std::nullopt;
+  }
 
   /*! \brief save an advertised prefix to the nlsr configuration file
    *         returns bool from the overridden function while nullopt here
    */
-  virtual ndn::optional<bool>
-  afterWithdraw(const ndn::Name& prefix) { return ndn::nullopt; }
+  virtual std::optional<bool>
+  afterWithdraw(const ndn::Name& prefix)
+  {
+    return std::nullopt;
+  }
 
 protected:
   NamePrefixList& m_namePrefixList;
diff --git a/src/update/prefix-update-processor.cpp b/src/update/prefix-update-processor.cpp
index d8302d4..c36b408 100644
--- a/src/update/prefix-update-processor.cpp
+++ b/src/update/prefix-update-processor.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  The University of Memphis,
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -20,6 +20,7 @@
  */
 
 #include "prefix-update-processor.hpp"
+#include "logger.hpp"
 #include "lsdb.hpp"
 #include "nlsr.hpp"
 
@@ -41,12 +42,12 @@
 
 /** \brief obtain signer from SignerTag attached to Interest, if available
  */
-static ndn::optional<std::string>
+static std::optional<std::string>
 getSignerFromTag(const ndn::Interest& interest)
 {
   auto signerTag = interest.getTag<SignerTag>();
   if (signerTag == nullptr) {
-    return ndn::nullopt;
+    return std::nullopt;
   }
   else {
     return signerTag->get().toUri();
@@ -180,13 +181,13 @@
   return true;
 }
 
-ndn::optional<bool>
+std::optional<bool>
 PrefixUpdateProcessor::afterAdvertise(const ndn::Name& prefix)
 {
   return addOrDeletePrefix(prefix, true);
 }
 
-ndn::optional<bool>
+std::optional<bool>
 PrefixUpdateProcessor::afterWithdraw(const ndn::Name& prefix)
 {
   return addOrDeletePrefix(prefix, false);
diff --git a/src/update/prefix-update-processor.hpp b/src/update/prefix-update-processor.hpp
index 80f6564..1864d0f 100644
--- a/src/update/prefix-update-processor.hpp
+++ b/src/update/prefix-update-processor.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  The University of Memphis,
+ * Copyright (c) 2014-2022,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -32,7 +32,7 @@
 namespace nlsr {
 namespace update {
 
-typedef boost::property_tree::ptree ConfigSection;
+using ConfigSection = boost::property_tree::ptree;
 
 class PrefixUpdateProcessor : public CommandManagerBase
 {
@@ -62,11 +62,11 @@
   bool
   addOrDeletePrefix(const ndn::Name& prefix, bool addPrefix);
 
-  ndn::optional<bool>
-  afterAdvertise(const ndn::Name& prefix);
+  std::optional<bool>
+  afterAdvertise(const ndn::Name& prefix) override;
 
-  ndn::optional<bool>
-  afterWithdraw(const ndn::Name& prefix);
+  std::optional<bool>
+  afterWithdraw(const ndn::Name& prefix) override;
 
   /*! \brief Check if a prefix exists in the nlsr configuration file */
   bool
