diff --git a/ndn-cxx/encoding/encoder.hpp b/ndn-cxx/encoding/encoder.hpp
index d5f6965..8415156 100644
--- a/ndn-cxx/encoding/encoder.hpp
+++ b/ndn-cxx/encoding/encoder.hpp
@@ -65,28 +65,28 @@
 
   /**
    * @brief Prepend @p number encoded as a VAR-NUMBER in NDN-TLV format
-   * @sa https://named-data.net/doc/NDN-packet-spec/current/tlv.html
+   * @sa https://named-data.net/doc/NDN-packet-spec/0.3/tlv.html
    */
   size_t
   prependVarNumber(uint64_t number);
 
   /**
    * @brief Append @p number encoded as a VAR-NUMBER in NDN-TLV format
-   * @sa https://named-data.net/doc/NDN-packet-spec/current/tlv.html
+   * @sa https://named-data.net/doc/NDN-packet-spec/0.3/tlv.html
    */
   size_t
   appendVarNumber(uint64_t number);
 
   /**
    * @brief Prepend @p integer encoded as a NonNegativeInteger in NDN-TLV format
-   * @sa https://named-data.net/doc/NDN-packet-spec/current/tlv.html
+   * @sa https://named-data.net/doc/NDN-packet-spec/0.3/tlv.html
    */
   size_t
   prependNonNegativeInteger(uint64_t integer);
 
   /**
    * @brief Append @p integer encoded as a NonNegativeInteger in NDN-TLV format
-   * @sa https://named-data.net/doc/NDN-packet-spec/current/tlv.html
+   * @sa https://named-data.net/doc/NDN-packet-spec/0.3/tlv.html
    */
   size_t
   appendNonNegativeInteger(uint64_t integer);
diff --git a/ndn-cxx/encoding/tlv.hpp b/ndn-cxx/encoding/tlv.hpp
index b8bae95..7ff7895 100644
--- a/ndn-cxx/encoding/tlv.hpp
+++ b/ndn-cxx/encoding/tlv.hpp
@@ -61,15 +61,24 @@
 /**
  * @brief TLV-TYPE numbers defined in NDN Packet Format v0.3.
  * @sa https://named-data.net/doc/NDN-packet-spec/0.3/types.html
+ * @sa https://redmine.named-data.net/projects/ndn-tlv/wiki/NameComponentType
  */
 enum : uint32_t {
   Invalid                         = 0,
   Interest                        = 5,
   Data                            = 6,
+
   Name                            = 7,
   GenericNameComponent            = 8,
   ImplicitSha256DigestComponent   = 1,
   ParametersSha256DigestComponent = 2,
+  KeywordNameComponent            = 32,
+  SegmentNameComponent            = 50,
+  ByteOffsetNameComponent         = 52,
+  VersionNameComponent            = 54,
+  TimestampNameComponent          = 56,
+  SequenceNumNameComponent        = 58,
+
   CanBePrefix                     = 33,
   MustBeFresh                     = 18,
   ForwardingHint                  = 30,
@@ -79,6 +88,7 @@
   ApplicationParameters           = 36,
   InterestSignatureInfo           = 44,
   InterestSignatureValue          = 46,
+
   MetaInfo                        = 20,
   Content                         = 21,
   SignatureInfo                   = 22,
@@ -86,14 +96,21 @@
   ContentType                     = 24,
   FreshnessPeriod                 = 25,
   FinalBlockId                    = 26,
+
   SignatureType                   = 27,
   KeyLocator                      = 28,
   KeyDigest                       = 29,
   SignatureNonce                  = 38,
   SignatureTime                   = 40,
   SignatureSeqNum                 = 42,
-  LinkDelegation                  = 31,
-  LinkPreference                  = 30,
+
+  ValidityPeriod                  = 253,
+  NotBefore                       = 254,
+  NotAfter                        = 255,
+  AdditionalDescription           = 258,
+  DescriptionEntry                = 512,
+  DescriptionKey                  = 513,
+  DescriptionValue                = 514,
 
   NameComponentMin = 1,
   NameComponentMax = 65535,
@@ -103,35 +120,8 @@
 };
 
 /**
- * @brief TLV-TYPE numbers defined in NDN Packet Format v0.2 but not in v0.3.
- * @sa https://named-data.net/doc/NDN-packet-spec/0.2.1/types.html
- */
-enum : uint32_t {
-  Selectors                 = 9,
-  MinSuffixComponents       = 13,
-  MaxSuffixComponents       = 14,
-  PublisherPublicKeyLocator = 15,
-  Exclude                   = 16,
-  ChildSelector             = 17,
-  Any                       = 19,
-};
-
-/**
- * @brief TLV-TYPE numbers for typed name components.
- * @sa https://redmine.named-data.net/projects/ndn-tlv/wiki/NameComponentType
- */
-enum : uint32_t {
-  KeywordNameComponent     = 32,
-  SegmentNameComponent     = 50,
-  ByteOffsetNameComponent  = 52,
-  VersionNameComponent     = 54,
-  TimestampNameComponent   = 56,
-  SequenceNumNameComponent = 58,
-};
-
-/**
  * @brief SignatureType values.
- * @sa https://named-data.net/doc/NDN-packet-spec/0.3/signature.html
+ * @sa https://named-data.net/doc/NDN-packet-spec/0.3/signature.html#signaturetype
  * @sa https://redmine.named-data.net/projects/ndn-tlv/wiki/SignatureType
  */
 enum SignatureTypeValue : uint16_t {
@@ -147,22 +137,8 @@
 operator<<(std::ostream& os, SignatureTypeValue st);
 
 /**
- * @brief TLV-TYPE numbers for SignatureInfo extensions.
- * @sa <a href="../specs/certificate.html">NDN Certificate Format</a>
- */
-enum : uint32_t {
-  ValidityPeriod = 253,
-  NotBefore = 254,
-  NotAfter = 255,
-
-  AdditionalDescription = 258,
-  DescriptionEntry = 512,
-  DescriptionKey = 513,
-  DescriptionValue = 514
-};
-
-/**
  * @brief ContentType values.
+ * @sa https://named-data.net/doc/NDN-packet-spec/0.3/data.html#contenttype
  * @sa https://redmine.named-data.net/projects/ndn-tlv/wiki/ContentType
  */
 enum ContentTypeValue : uint32_t {
diff --git a/ndn-cxx/interest.cpp b/ndn-cxx/interest.cpp
index 6034ff6..b6d8f3c 100644
--- a/ndn-cxx/interest.cpp
+++ b/ndn-cxx/interest.cpp
@@ -217,10 +217,11 @@
         if (lastElement >= 4) {
           NDN_THROW(Error("ForwardingHint element is out of order"));
         }
-        // ForwardingHint = FORWARDING-HINT-TYPE TLV-LENGTH 1*Name
-        // [previous format]
-        // ForwardingHint = FORWARDING-HINT-TYPE TLV-LENGTH 1*Delegation
-        // Delegation = DELEGATION-TYPE TLV-LENGTH Preference Name
+        // Current format:
+        //   ForwardingHint = FORWARDING-HINT-TYPE TLV-LENGTH 1*Name
+        // Previous format, partially supported for backward compatibility:
+        //   ForwardingHint = FORWARDING-HINT-TYPE TLV-LENGTH 1*Delegation
+        //   Delegation = DELEGATION-TYPE TLV-LENGTH Preference Name
         element->parse();
         for (const auto& del : element->elements()) {
           switch (del.type()) {
@@ -232,7 +233,8 @@
                 NDN_THROW_NESTED(Error("Invalid Name in ForwardingHint"));
               }
               break;
-            case tlv::LinkDelegation:
+            case 31: // Delegation
+              // old ForwardingHint format, try to parse the nested Name for compatibility
               try {
                 del.parse();
                 m_forwardingHint.emplace_back(del.get(tlv::Name));
diff --git a/ndn-cxx/meta-info.hpp b/ndn-cxx/meta-info.hpp
index 0003c35..39be414 100644
--- a/ndn-cxx/meta-info.hpp
+++ b/ndn-cxx/meta-info.hpp
@@ -45,7 +45,7 @@
  * packets (NFD and previous versions of ndn-cxx will gracefully accept such packets).
  *
  * 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):
+ * to the NDN packet spec, the definition is extended to allow optional AppMetaInfo elements):
  *
  *     MetaInfo = META-INFO-TYPE TLV-LENGTH
  *                  [ContentType]
diff --git a/ndn-cxx/name-component.hpp b/ndn-cxx/name-component.hpp
index b83d8e9..103a55d 100644
--- a/ndn-cxx/name-component.hpp
+++ b/ndn-cxx/name-component.hpp
@@ -22,7 +22,6 @@
 #ifndef NDN_CXX_NAME_COMPONENT_HPP
 #define NDN_CXX_NAME_COMPONENT_HPP
 
-#include "ndn-cxx/detail/common.hpp"
 #include "ndn-cxx/encoding/block.hpp"
 #include "ndn-cxx/encoding/block-helpers.hpp"
 #include "ndn-cxx/util/time.hpp"
@@ -30,8 +29,9 @@
 namespace ndn {
 namespace name {
 
-/** @brief Format used for the URI representation of a name.
- *  @sa http://named-data.net/doc/NDN-packet-spec/current/name.html#ndn-uri-scheme
+/**
+ * @brief Format used for the URI representation of a name.
+ * @sa https://named-data.net/doc/NDN-packet-spec/0.3/name.html#ndn-uri-scheme
  */
 enum class UriFormat {
   /// Always use `<type-number>=<percent-encoded-value>` format
@@ -46,8 +46,9 @@
   DEFAULT = ENV_OR_ALTERNATE,
 };
 
-/** @brief Identify a style of NDN Naming Conventions.
- *  @sa https://named-data.net/publications/techreports/ndn-tr-22-3-ndn-memo-naming-conventions/
+/**
+ * @brief Identify a style of NDN Naming Conventions.
+ * @sa https://named-data.net/publications/techreports/ndn-tr-22-3-ndn-memo-naming-conventions/
  */
 enum class Convention {
   MARKER = 1 << 0, ///< Component markers (revision 1)
@@ -55,8 +56,9 @@
   EITHER = MARKER | TYPED,
 };
 
-/** @brief Name component markers defined in Naming Conventions revision 1 (obsolete).
- *  @sa https://named-data.net/publications/techreports/ndn-tr-22-ndn-memo-naming-conventions/
+/**
+ * @brief Name component markers defined in Naming Conventions revision 1 (obsolete).
+ * @sa https://named-data.net/publications/techreports/ndn-tr-22-ndn-memo-naming-conventions/
  */
 enum : uint8_t {
   SEGMENT_MARKER = 0x00,
@@ -279,15 +281,15 @@
   fromEscapedString(const std::string& input);
 
   /**
-   * @brief Write *this to the output stream, escaping characters according to the NDN URI format.
-   * @sa https://named-data.net/doc/NDN-packet-spec/current/name.html#ndn-uri-scheme
+   * @brief Write `*this` to the output stream, escaping characters according to the NDN URI format.
+   * @sa https://named-data.net/doc/NDN-packet-spec/0.3/name.html#ndn-uri-scheme
    */
   void
   toUri(std::ostream& os, UriFormat format = UriFormat::DEFAULT) const;
 
   /**
-   * @brief Convert *this by escaping characters according to the NDN URI format.
-   * @sa https://named-data.net/doc/NDN-packet-spec/current/name.html#ndn-uri-scheme
+   * @brief Convert `*this` by escaping characters according to the NDN URI format.
+   * @sa https://named-data.net/doc/NDN-packet-spec/0.3/name.html#ndn-uri-scheme
    */
   std::string
   toUri(UriFormat format = UriFormat::DEFAULT) const;
@@ -295,7 +297,7 @@
 public: // naming conventions
   /**
    * @brief Check if the component is a NonNegativeInteger
-   * @sa https://named-data.net/doc/NDN-packet-spec/current/tlv.html#non-negative-integer-encoding
+   * @sa https://named-data.net/doc/NDN-packet-spec/0.3/tlv.html#non-negative-integer-encoding
    */
   bool
   isNumber() const noexcept;
@@ -345,7 +347,7 @@
 
   /**
    * @brief Interpret this name component as a NonNegativeInteger
-   * @sa https://named-data.net/doc/NDN-packet-spec/current/tlv.html#non-negative-integer-encoding
+   * @sa https://named-data.net/doc/NDN-packet-spec/0.3/tlv.html#non-negative-integer-encoding
    * @return The decoded non-negative integer.
    */
   uint64_t
@@ -408,7 +410,7 @@
   /**
    * @brief Create a component encoded as NonNegativeInteger
    *
-   * @sa https://named-data.net/doc/NDN-packet-spec/current/tlv.html#non-negative-integer-encoding
+   * @sa https://named-data.net/doc/NDN-packet-spec/0.3/tlv.html#non-negative-integer-encoding
    *
    * @param number The non-negative number
    * @param type TLV-TYPE
@@ -564,7 +566,7 @@
    * @retval zero this equals other
    * @retval positive this comes after other in canonical ordering
    *
-   * @sa https://named-data.net/doc/NDN-packet-spec/current/name.html#canonical-order
+   * @sa https://named-data.net/doc/NDN-packet-spec/0.3/name.html#canonical-order
    */
   int
   compare(const Component& other) const;
diff --git a/ndn-cxx/security/validation-policy-config.hpp b/ndn-cxx/security/validation-policy-config.hpp
index 8008397..bc4b9f5 100644
--- a/ndn-cxx/security/validation-policy-config.hpp
+++ b/ndn-cxx/security/validation-policy-config.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,10 +33,11 @@
 /**
  * @brief A validator that can be set up via a configuration file.
  *
- * @note For command Interest validation, this policy must be combined with
- *       @p ValidationPolicyCommandInterest, in order to guard against replay attacks.
+ * @note For %Command %Interest validation, this policy must be combined with
+ *       ValidationPolicyCommandInterest, in order to guard against replay attacks.
  * @note This policy does not support inner policies (a sole policy or a terminal inner policy)
- * @sa https://named-data.net/doc/ndn-cxx/current/tutorials/security-validator-config.html
+ *
+ * @sa <a href="../tutorials/security-validator-config.html">Validator Configuration File Format</a>
  */
 class ValidationPolicyConfig : public ValidationPolicy
 {
