diff --git a/src/encoding/tlv.hpp b/src/encoding/tlv.hpp
index da7b8ea..78564d8 100644
--- a/src/encoding/tlv.hpp
+++ b/src/encoding/tlv.hpp
@@ -65,7 +65,7 @@
   NameComponent = 8,
   Selectors     = 9,
   Nonce         = 10,
-  Scope         = 11, // deprecated
+  // <Unassigned> = 11,
   InterestLifetime          = 12,
   MinSuffixComponents       = 13,
   MaxSuffixComponents       = 14,
@@ -95,6 +95,7 @@
 enum SignatureTypeValue {
   DigestSha256 = 0,
   SignatureSha256WithRsa = 1,
+  // <Unassigned> = 2,
   SignatureSha256WithEcdsa = 3
 };
 
diff --git a/src/interest.cpp b/src/interest.cpp
index 017711a..a7ba973 100644
--- a/src/interest.cpp
+++ b/src/interest.cpp
@@ -34,15 +34,13 @@
               "Interest::Error must inherit from tlv::Error");
 
 Interest::Interest()
-  : m_scope(-1)
-  , m_interestLifetime(time::milliseconds::min())
+  : m_interestLifetime(time::milliseconds::min())
   , m_selectedDelegationIndex(INVALID_SELECTED_DELEGATION_INDEX)
 {
 }
 
 Interest::Interest(const Name& name)
   : m_name(name)
-  , m_scope(-1)
   , m_interestLifetime(time::milliseconds::min())
   , m_selectedDelegationIndex(INVALID_SELECTED_DELEGATION_INDEX)
 {
@@ -50,28 +48,11 @@
 
 Interest::Interest(const Name& name, const time::milliseconds& interestLifetime)
   : m_name(name)
-  , m_scope(-1)
   , m_interestLifetime(interestLifetime)
   , m_selectedDelegationIndex(INVALID_SELECTED_DELEGATION_INDEX)
 {
 }
 
-Interest::Interest(const Name& name,
-                   const Selectors& selectors,
-                   int scope,
-                   const time::milliseconds& interestLifetime,
-                   uint32_t nonce)
-  : m_name(name)
-  , m_selectors(selectors)
-  , m_scope(scope)
-  , m_interestLifetime(interestLifetime)
-  , m_selectedDelegationIndex(INVALID_SELECTED_DELEGATION_INDEX)
-{
-  if (nonce > 0) {
-    setNonce(nonce);
-  }
-}
-
 Interest::Interest(const Block& wire)
 {
   wireDecode(wire);
@@ -241,7 +222,6 @@
   //                Name
   //                Selectors?
   //                Nonce
-  //                Scope?
   //                InterestLifetime?
   //                Link?
   //                SelectedDelegation?
@@ -269,12 +249,6 @@
                                                     getInterestLifetime().count());
     }
 
-  // Scope
-  if (getScope() >= 0)
-    {
-      totalLength += prependNonNegativeIntegerBlock(block, tlv::Scope, getScope());
-    }
-
   // Nonce
   getNonce(); // to ensure that Nonce is properly set
   totalLength += block.prependBlock(m_nonce);
@@ -327,7 +301,6 @@
   //                Name
   //                Selectors?
   //                Nonce
-  //                Scope?
   //                InterestLifetime?
   //                Link?
   //                SelectedDelegation?
@@ -350,15 +323,6 @@
   // Nonce
   m_nonce = m_wire.get(tlv::Nonce);
 
-  // Scope
-  val = m_wire.find(tlv::Scope);
-  if (val != m_wire.elements_end())
-    {
-      m_scope = readNonNegativeInteger(*val);
-    }
-  else
-    m_scope = -1;
-
   // InterestLifetime
   val = m_wire.find(tlv::InterestLifetime);
   if (val != m_wire.elements_end())
@@ -502,10 +466,6 @@
     os << delim << "ndn.MustBeFresh=" << interest.getMustBeFresh();
     delim = '&';
   }
-  if (interest.getScope() >= 0) {
-    os << delim << "ndn.Scope=" << interest.getScope();
-    delim = '&';
-  }
   if (interest.getInterestLifetime() >= time::milliseconds::zero()
       && interest.getInterestLifetime() != DEFAULT_INTEREST_LIFETIME) {
     os << delim << "ndn.InterestLifetime=" << interest.getInterestLifetime().count();
diff --git a/src/interest.hpp b/src/interest.hpp
index 1e064fb..41e3848 100644
--- a/src/interest.hpp
+++ b/src/interest.hpp
@@ -77,16 +77,6 @@
    */
   Interest(const Name& name, const time::milliseconds& interestLifetime);
 
-  /** @brief Create a new Interest for the given name, selectors, and guiders
-   *  @warning In certain contexts that use Interest::shared_from_this(), Interest must be created
-   *           using `make_shared`. Otherwise, .shared_from_this() will throw an exception.
-   */
-  Interest(const Name& name,
-           const Selectors& selectors,
-           int scope,
-           const time::milliseconds& interestLifetime,
-           uint32_t nonce = 0);
-
   /** @brief Create from wire encoding
    *  @warning In certain contexts that use Interest::shared_from_this(), Interest must be created
    *           using `make_shared`. Otherwise, .shared_from_this() will throw an exception.
@@ -236,20 +226,6 @@
     return *this;
   }
 
-  int
-  getScope() const
-  {
-    return m_scope;
-  }
-
-  Interest&
-  setScope(int scope)
-  {
-    m_scope = scope;
-    m_wire.reset();
-    return *this;
-  }
-
   const time::milliseconds&
   getInterestLifetime() const
   {
@@ -463,7 +439,6 @@
   Name m_name;
   Selectors m_selectors;
   mutable Block m_nonce;
-  int m_scope;
   time::milliseconds m_interestLifetime;
 
   mutable Block m_link;
diff --git a/tests/unit-tests/interest.t.cpp b/tests/unit-tests/interest.t.cpp
index 42be675..106fbf0 100644
--- a/tests/unit-tests/interest.t.cpp
+++ b/tests/unit-tests/interest.t.cpp
@@ -35,7 +35,7 @@
 BOOST_AUTO_TEST_SUITE(TestInterest)
 
 const uint8_t Interest1[] = {
-  0x05,  0x5c, // NDN Interest
+  0x05,  0x59, // NDN Interest
       0x07,  0x14, // Name
           0x08,  0x5, // NameComponent
               0x6c,  0x6f,  0x63,  0x61,  0x6c,
@@ -66,14 +66,12 @@
               0x1,
       0x0a,  0x4, // Nonce
           0x1, 0x0, 0x0, 0x00,
-      0x0b,  0x1, // Scope
-          0x1,
       0x0c,       // InterestLifetime
           0x2,  0x3,  0xe8
 };
 
 const uint8_t Interest2[] = {
-  0x05,  0x5c, // NDN Interest
+  0x05,  0x59, // NDN Interest
       0x07,  0x14, // Name
           0x08,  0x5, // NameComponent
               0x6c,  0x6f,  0x63,  0x61,  0x6c,
@@ -104,8 +102,6 @@
               0x1,
       0x0a,  0x4, // Nonce
           0x2, 0x0, 0x0, 0x00,
-      0x0b,  0x1, // Scope
-          0x1,
       0x0c,       // InterestLifetime
           0x2,  0x3,  0xe8
 };
@@ -515,7 +511,6 @@
   //                Name
   //                Selectors?
   //                Nonce
-  //                Scope?
   //                InterestLifetime?
   //                Link?
   //                SelectedDelegation?
@@ -561,15 +556,6 @@
   BOOST_CHECK_EQUAL(a == b, true);
   BOOST_CHECK_EQUAL(a != b, false);
 
-  // check comparison on Nonce
-  a.setScope(1);
-  BOOST_CHECK_EQUAL(a == b, false);
-  BOOST_CHECK_EQUAL(a != b, true);
-
-  b.setScope(1);
-  BOOST_CHECK_EQUAL(a == b, true);
-  BOOST_CHECK_EQUAL(a != b, false);
-
   // check comparison on InterestLifetime
   a.setInterestLifetime(time::seconds(10));
   BOOST_CHECK_EQUAL(a == b, false);
@@ -745,7 +731,6 @@
   a.setName("/Test/Encode/Decode/With/Link");
   a.setChildSelector(1);
   a.setNonce(100);
-  a.setScope(1);
   a.setInterestLifetime(time::seconds(10));
   a.setLink(wire);
 
@@ -861,7 +846,6 @@
   a.setName("/Test/Encode/Decode/With/Link");
   a.setChildSelector(1);
   a.setNonce(100);
-  a.setScope(1);
   a.setInterestLifetime(time::seconds(10));
   a.setLink(wire);
   BOOST_REQUIRE_THROW(a.setSelectedDelegation(3), Interest::Error);
@@ -878,7 +862,6 @@
   a.setName("/Test/Encode/Decode/With/Link");
   a.setChildSelector(1);
   a.setNonce(100);
-  a.setScope(1);
   a.setInterestLifetime(time::seconds(10));
   a.setLink(wire);
   BOOST_REQUIRE_THROW(a.setSelectedDelegation(4), Interest::Error);
@@ -892,7 +875,6 @@
   BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
 
   BOOST_CHECK_EQUAL(i.getName().toUri(), "/local/ndn/prefix");
-  BOOST_CHECK_EQUAL(i.getScope(), 1);
   BOOST_CHECK_EQUAL(i.getInterestLifetime(), time::milliseconds(1000));
   BOOST_CHECK_EQUAL(i.getMinSuffixComponents(), 1);
   BOOST_CHECK_EQUAL(i.getMaxSuffixComponents(), 1);
@@ -916,7 +898,6 @@
   BOOST_REQUIRE_NO_THROW(i.wireDecode(interestBlock));
 
   BOOST_CHECK_EQUAL(i.getName().toUri(), "/local/ndn/prefix");
-  BOOST_CHECK_EQUAL(i.getScope(), 1);
   BOOST_CHECK_EQUAL(i.getInterestLifetime(), time::milliseconds(1000));
   BOOST_CHECK_EQUAL(i.getMinSuffixComponents(), 1);
   BOOST_CHECK_EQUAL(i.getMaxSuffixComponents(), 1);
@@ -929,7 +910,6 @@
 BOOST_AUTO_TEST_CASE(Encode)
 {
   ndn::Interest i(ndn::Name("/local/ndn/prefix"));
-  i.setScope(1);
   i.setInterestLifetime(time::milliseconds(1000));
   i.setMinSuffixComponents(1);
   i.setMaxSuffixComponents(1);
@@ -965,7 +945,7 @@
   BOOST_CHECK_EQUAL(strStream.str(),
                     "/local/ndn/prefix?"
                     "ndn.MinSuffixComponents=1&ndn.MaxSuffixComponents=1&"
-                    "ndn.ChildSelector=1&ndn.Scope=1&"
+                    "ndn.ChildSelector=1&"
                     "ndn.InterestLifetime=1000&"
                     "ndn.Nonce=2&ndn.Exclude=alex,xxxx,*,yyyy");
 
diff --git a/tools/ndncatchunks3.cpp b/tools/ndncatchunks3.cpp
index d84758a..25c466b 100644
--- a/tools/ndncatchunks3.cpp
+++ b/tools/ndncatchunks3.cpp
@@ -30,14 +30,13 @@
 public:
   Consumer(const std::string& dataName,
            size_t pipeSize, size_t nTotalSegments,
-           int scope = -1, bool mustBeFresh = true)
+           bool mustBeFresh = true)
     : m_dataName(dataName)
     , m_pipeSize(pipeSize)
     , m_nTotalSegments(nTotalSegments)
     , m_nextSegment(0)
     , m_totalSize(0)
     , m_isOutputEnabled(false)
-    , m_scope(scope)
     , m_mustBeFresh(mustBeFresh)
   {
   }
@@ -66,7 +65,6 @@
   size_t m_totalSize;
   bool m_isOutputEnabled;  // set to false by default
 
-  int m_scope;
   bool m_mustBeFresh;
 };
 
@@ -79,8 +77,6 @@
         {
           Interest interest(Name(m_dataName).appendSegment(m_nextSegment++));
           interest.setInterestLifetime(time::milliseconds(4000));
-          if (m_scope >= 0)
-            interest.setScope(m_scope);
           interest.setMustBeFresh(m_mustBeFresh);
 
           m_face.expressInterest(interest,
@@ -119,8 +115,6 @@
     {
       // Send interest for next segment
       Interest interest(Name(m_dataName).appendSegment(m_nextSegment++));
-      if (m_scope >= 0)
-        interest.setScope(m_scope);
       interest.setInterestLifetime(time::milliseconds(4000));
       interest.setMustBeFresh(m_mustBeFresh);
 
diff --git a/tools/tlvdump.cpp b/tools/tlvdump.cpp
index 90aa71c..cd5080c 100644
--- a/tools/tlvdump.cpp
+++ b/tools/tlvdump.cpp
@@ -38,7 +38,6 @@
   {tlv::ImplicitSha256DigestComponent, "ImplicitSha256DigestComponent"},
   {tlv::Selectors                    , "Selectors"},
   {tlv::Nonce                        , "Nonce"},
-  {tlv::Scope                        , "Scope"},
   {tlv::InterestLifetime             , "InterestLifetime"},
   {tlv::MinSuffixComponents          , "MinSuffixComponents"},
   {tlv::MaxSuffixComponents          , "MaxSuffixComponents"},
