diff --git a/apps/ndn-consumer-zipf-mandelbrot.cpp b/apps/ndn-consumer-zipf-mandelbrot.cpp
index c6358c0..8fd1591 100644
--- a/apps/ndn-consumer-zipf-mandelbrot.cpp
+++ b/apps/ndn-consumer-zipf-mandelbrot.cpp
@@ -21,8 +21,6 @@
 
 #include "ndn-consumer-zipf-mandelbrot.hpp"
 
-#include "utils/ndn-fw-hop-count-tag.hpp"
-
 #include <math.h>
 
 NS_LOG_COMPONENT_DEFINE("ndn.ConsumerZipfMandelbrot");
diff --git a/apps/ndn-consumer.cpp b/apps/ndn-consumer.cpp
index 3ed9355..a174fb3 100644
--- a/apps/ndn-consumer.cpp
+++ b/apps/ndn-consumer.cpp
@@ -32,6 +32,8 @@
 #include "utils/ndn-ns3-packet-tag.hpp"
 #include "utils/ndn-rtt-mean-deviation.hpp"
 
+#include <ndn-cxx/lp/tags.hpp>
+
 #include <boost/lexical_cast.hpp>
 #include <boost/ref.hpp>
 
@@ -223,14 +225,11 @@
   NS_LOG_INFO("< DATA for " << seq);
 
   int hopCount = 0;
-  auto ns3PacketTag = data->getTag<Ns3PacketTag>();
-  if (ns3PacketTag != nullptr) { // e.g., packet came from local node's cache
-    FwHopCountTag hopCountTag;
-    if (ns3PacketTag->getPacket()->PeekPacketTag(hopCountTag)) {
-      hopCount = hopCountTag.Get();
-      NS_LOG_DEBUG("Hop count: " << hopCount);
-    }
+  auto hopCountTag = data->getTag<lp::HopCountTag>();
+  if (hopCountTag != nullptr) { // e.g., packet came from local node's cache
+    hopCount = *hopCountTag;
   }
+  NS_LOG_DEBUG("Hop count: " << hopCount);
 
   SeqTimeoutsContainer::iterator entry = m_seqLastDelay.find(seq);
   if (entry != m_seqLastDelay.end()) {
diff --git a/apps/ndn-consumer.hpp b/apps/ndn-consumer.hpp
index 872c46a..829c6ed 100644
--- a/apps/ndn-consumer.hpp
+++ b/apps/ndn-consumer.hpp
@@ -30,7 +30,6 @@
 
 #include "ns3/ndnSIM/model/ndn-common.hpp"
 #include "ns3/ndnSIM/utils/ndn-rtt-estimator.hpp"
-#include "ns3/ndnSIM/utils/ndn-fw-hop-count-tag.hpp"
 
 #include <set>
 #include <map>
diff --git a/tests/unit-tests/utils/tracers/ndn-app-delay-tracer.t.cpp b/tests/unit-tests/utils/tracers/ndn-app-delay-tracer.t.cpp
index c5e5f13..66e90a6 100644
--- a/tests/unit-tests/utils/tracers/ndn-app-delay-tracer.t.cpp
+++ b/tests/unit-tests/utils/tracers/ndn-app-delay-tracer.t.cpp
@@ -74,7 +74,6 @@
 
 BOOST_FIXTURE_TEST_SUITE(UtilsTracersNdnAppDelayTracer, AppDelayTracerFixture)
 
-BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(InstallAll, 1);
 BOOST_AUTO_TEST_CASE(InstallAll)
 {
   AppDelayTracer::InstallAll(TEST_TRACE.string());
@@ -90,15 +89,14 @@
 
   BOOST_CHECK_EQUAL(buffer.str(),
     "Time	Node	AppId	SeqNo	Type	DelayS	DelayUS	RetxCount	HopCount\n"
-    "0.0417424	1	0	0	LastDelay	0.0417424	41742.4	1	2\n"
-    "0.0417424	1	0	0	FullDelay	0.0417424	41742.4	1	2\n"
+    "0.0417712	1	0	0	LastDelay	0.0417712	41771.2	1	2\n"
+    "0.0417712	1	0	0	FullDelay	0.0417712	41771.2	1	2\n"
     "2	2	0	0	LastDelay	0	0	1	0\n"
     "2	2	0	0	FullDelay	0	0	1	0\n"
-    "3.02087	2	0	1	LastDelay	0.0208712	20871.2	1	1\n"
-    "3.02087	2	0	1	FullDelay	0.0208712	20871.2	1	1\n");
+    "3.02089	2	0	1	LastDelay	0.0208856	20885.6	1	1\n"
+    "3.02089	2	0	1	FullDelay	0.0208856	20885.6	1	1\n");
 }
 
-BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(InstallNodeContainer, 1);
 BOOST_AUTO_TEST_CASE(InstallNodeContainer)
 {
   NodeContainer nodes;
@@ -117,11 +115,10 @@
 
   BOOST_CHECK_EQUAL(buffer.str(),
     "Time	Node	AppId	SeqNo	Type	DelayS	DelayUS	RetxCount	HopCount\n"
-    "0.0417424	1	0	0	LastDelay	0.0417424	41742.4	1	2\n"
-    "0.0417424	1	0	0	FullDelay	0.0417424	41742.4	1	2\n");
+    "0.0417712	1	0	0	LastDelay	0.0417712	41771.2	1	2\n"
+    "0.0417712	1	0	0	FullDelay	0.0417712	41771.2	1	2\n");
 }
 
-BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(InstallNode, 1);
 BOOST_AUTO_TEST_CASE(InstallNode)
 {
   AppDelayTracer::Install(getNode("2"), TEST_TRACE.string());
@@ -139,11 +136,10 @@
     "Time	Node	AppId	SeqNo	Type	DelayS	DelayUS	RetxCount	HopCount\n"
     "2	2	0	0	LastDelay	0	0	1	0\n"
     "2	2	0	0	FullDelay	0	0	1	0\n"
-    "3.02087	2	0	1	LastDelay	0.0208712	20871.2	1	1\n"
-    "3.02087	2	0	1	FullDelay	0.0208712	20871.2	1	1\n");
+    "3.02089	2	0	1	LastDelay	0.0208856	20885.6	1	1\n"
+    "3.02089	2	0	1	FullDelay	0.0208856	20885.6	1	1\n");
 }
 
-BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(InstallNodeDumpStream, 1);
 BOOST_AUTO_TEST_CASE(InstallNodeDumpStream)
 {
   auto output = make_shared<boost::test_tools::output_test_stream>();
@@ -157,8 +153,8 @@
   BOOST_CHECK(output->is_equal(
     "2	2	0	0	LastDelay	0	0	1	0\n"
     "2	2	0	0	FullDelay	0	0	1	0\n"
-    "3.02087	2	0	1	LastDelay	0.0208712	20871.2	1	1\n"
-    "3.02087	2	0	1	FullDelay	0.0208712	20871.2	1	1\n"));
+    "3.02089	2	0	1	LastDelay	0.0208856	20885.6	1	1\n"
+    "3.02089	2	0	1	FullDelay	0.0208856	20885.6	1	1\n"));
 }
 
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/utils/ndn-fw-hop-count-tag.cpp b/utils/ndn-fw-hop-count-tag.cpp
deleted file mode 100644
index cfa2126..0000000
--- a/utils/ndn-fw-hop-count-tag.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2011-2015  Regents of the University of California.
- *
- * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
- * contributors.
- *
- * ndnSIM is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * ndnSIM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * ndnSIM, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
-
-#include "ndn-fw-hop-count-tag.hpp"
-
-namespace ns3 {
-namespace ndn {
-
-TypeId
-FwHopCountTag::GetTypeId()
-{
-  static TypeId tid =
-    TypeId("ns3::ndn::FwHopCountTag").SetParent<Tag>().AddConstructor<FwHopCountTag>();
-  return tid;
-}
-
-TypeId
-FwHopCountTag::GetInstanceTypeId() const
-{
-  return FwHopCountTag::GetTypeId();
-}
-
-uint32_t
-FwHopCountTag::GetSerializedSize() const
-{
-  return sizeof(uint32_t);
-}
-
-void
-FwHopCountTag::Serialize(TagBuffer i) const
-{
-  i.WriteU32(m_hopCount);
-}
-
-void
-FwHopCountTag::Deserialize(TagBuffer i)
-{
-  m_hopCount = i.ReadU32();
-}
-
-void
-FwHopCountTag::Print(std::ostream& os) const
-{
-  os << m_hopCount;
-}
-
-} // namespace ndn
-} // namespace ns3
diff --git a/utils/ndn-fw-hop-count-tag.hpp b/utils/ndn-fw-hop-count-tag.hpp
deleted file mode 100644
index efbbdd0..0000000
--- a/utils/ndn-fw-hop-count-tag.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2011-2015  Regents of the University of California.
- *
- * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
- * contributors.
- *
- * ndnSIM is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * ndnSIM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * ndnSIM, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
-
-#ifndef NDN_FW_HOP_COUNT_TAG_H
-#define NDN_FW_HOP_COUNT_TAG_H
-
-#include "ns3/tag.h"
-
-namespace ns3 {
-namespace ndn {
-
-/**
- * @ingroup ndn-fw
- * @brief Packet tag that is used to track hop count for Interest-Data pairs
- */
-class FwHopCountTag : public Tag {
-public:
-  static TypeId
-  GetTypeId(void);
-
-  /**
-   * @brief Default constructor
-   */
-  FwHopCountTag()
-    : m_hopCount(0){};
-
-  /**
-   * @brief Destructor
-   */
-  ~FwHopCountTag()
-  {
-  }
-
-  /**
-   * @brief Increment hop count
-   */
-  void
-  Increment()
-  {
-    m_hopCount++;
-  }
-
-  /**
-   * @brief Get value of hop count
-   */
-  uint32_t
-  Get() const
-  {
-    return m_hopCount;
-  }
-
-  ////////////////////////////////////////////////////////
-  // from ObjectBase
-  ////////////////////////////////////////////////////////
-  virtual TypeId
-  GetInstanceTypeId() const;
-
-  ////////////////////////////////////////////////////////
-  // from Tag
-  ////////////////////////////////////////////////////////
-
-  virtual uint32_t
-  GetSerializedSize() const;
-
-  virtual void
-  Serialize(TagBuffer i) const;
-
-  virtual void
-  Deserialize(TagBuffer i);
-
-  virtual void
-  Print(std::ostream& os) const;
-
-private:
-  uint32_t m_hopCount;
-};
-
-} // namespace ndn
-} // namespace ns3
-
-#endif // NDN_FW_HOP_COUNT_TAG_H
