diff --git a/src/mgmt/nfd/forwarder-status.cpp b/src/mgmt/nfd/forwarder-status.cpp
index 27f506e..1661aa7 100644
--- a/src/mgmt/nfd/forwarder-status.cpp
+++ b/src/mgmt/nfd/forwarder-status.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2017 Regents of the University of California.
+ * Copyright (c) 2013-2018 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -131,7 +131,7 @@
   }
 
   if (val != m_wire.elements_end() && val->type() == tlv::nfd::NNameTreeEntries) {
-    m_nNameTreeEntries = readNonNegativeIntegerAs<size_t>(*val);
+    m_nNameTreeEntries = readNonNegativeInteger(*val);
     ++val;
   }
   else {
@@ -139,7 +139,7 @@
   }
 
   if (val != m_wire.elements_end() && val->type() == tlv::nfd::NFibEntries) {
-    m_nFibEntries = readNonNegativeIntegerAs<size_t>(*val);
+    m_nFibEntries = readNonNegativeInteger(*val);
     ++val;
   }
   else {
@@ -147,7 +147,7 @@
   }
 
   if (val != m_wire.elements_end() && val->type() == tlv::nfd::NPitEntries) {
-    m_nPitEntries = readNonNegativeIntegerAs<size_t>(*val);
+    m_nPitEntries = readNonNegativeInteger(*val);
     ++val;
   }
   else {
@@ -155,7 +155,7 @@
   }
 
   if (val != m_wire.elements_end() && val->type() == tlv::nfd::NMeasurementsEntries) {
-    m_nMeasurementsEntries = readNonNegativeIntegerAs<size_t>(*val);
+    m_nMeasurementsEntries = readNonNegativeInteger(*val);
     ++val;
   }
   else {
@@ -163,7 +163,7 @@
   }
 
   if (val != m_wire.elements_end() && val->type() == tlv::nfd::NCsEntries) {
-    m_nCsEntries = readNonNegativeIntegerAs<size_t>(*val);
+    m_nCsEntries = readNonNegativeInteger(*val);
     ++val;
   }
   else {
@@ -244,7 +244,7 @@
 }
 
 ForwarderStatus&
-ForwarderStatus::setNNameTreeEntries(size_t nNameTreeEntries)
+ForwarderStatus::setNNameTreeEntries(uint64_t nNameTreeEntries)
 {
   m_wire.reset();
   m_nNameTreeEntries = nNameTreeEntries;
@@ -252,7 +252,7 @@
 }
 
 ForwarderStatus&
-ForwarderStatus::setNFibEntries(size_t nFibEntries)
+ForwarderStatus::setNFibEntries(uint64_t nFibEntries)
 {
   m_wire.reset();
   m_nFibEntries = nFibEntries;
@@ -260,7 +260,7 @@
 }
 
 ForwarderStatus&
-ForwarderStatus::setNPitEntries(size_t nPitEntries)
+ForwarderStatus::setNPitEntries(uint64_t nPitEntries)
 {
   m_wire.reset();
   m_nPitEntries = nPitEntries;
@@ -268,7 +268,7 @@
 }
 
 ForwarderStatus&
-ForwarderStatus::setNMeasurementsEntries(size_t nMeasurementsEntries)
+ForwarderStatus::setNMeasurementsEntries(uint64_t nMeasurementsEntries)
 {
   m_wire.reset();
   m_nMeasurementsEntries = nMeasurementsEntries;
@@ -276,7 +276,7 @@
 }
 
 ForwarderStatus&
-ForwarderStatus::setNCsEntries(size_t nCsEntries)
+ForwarderStatus::setNCsEntries(uint64_t nCsEntries)
 {
   m_wire.reset();
   m_nCsEntries = nCsEntries;
diff --git a/src/mgmt/nfd/forwarder-status.hpp b/src/mgmt/nfd/forwarder-status.hpp
index d493048..33dd40a 100644
--- a/src/mgmt/nfd/forwarder-status.hpp
+++ b/src/mgmt/nfd/forwarder-status.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2017 Regents of the University of California.
+ * Copyright (c) 2013-2018 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -101,50 +101,50 @@
   ForwarderStatus&
   setCurrentTimestamp(const time::system_clock::TimePoint& currentTimestamp);
 
-  size_t
+  uint64_t
   getNNameTreeEntries() const
   {
     return m_nNameTreeEntries;
   }
 
   ForwarderStatus&
-  setNNameTreeEntries(size_t nNameTreeEntries);
+  setNNameTreeEntries(uint64_t nNameTreeEntries);
 
-  size_t
+  uint64_t
   getNFibEntries() const
   {
     return m_nFibEntries;
   }
 
   ForwarderStatus&
-  setNFibEntries(size_t nFibEntries);
+  setNFibEntries(uint64_t nFibEntries);
 
-  size_t
+  uint64_t
   getNPitEntries() const
   {
     return m_nPitEntries;
   }
 
   ForwarderStatus&
-  setNPitEntries(size_t nPitEntries);
+  setNPitEntries(uint64_t nPitEntries);
 
-  size_t
+  uint64_t
   getNMeasurementsEntries() const
   {
     return m_nMeasurementsEntries;
   }
 
   ForwarderStatus&
-  setNMeasurementsEntries(size_t nMeasurementsEntries);
+  setNMeasurementsEntries(uint64_t nMeasurementsEntries);
 
-  size_t
+  uint64_t
   getNCsEntries() const
   {
     return m_nCsEntries;
   }
 
   ForwarderStatus&
-  setNCsEntries(size_t nCsEntries);
+  setNCsEntries(uint64_t nCsEntries);
 
   uint64_t
   getNInInterests() const
@@ -204,11 +204,11 @@
   std::string m_nfdVersion;
   time::system_clock::TimePoint m_startTimestamp;
   time::system_clock::TimePoint m_currentTimestamp;
-  size_t m_nNameTreeEntries;
-  size_t m_nFibEntries;
-  size_t m_nPitEntries;
-  size_t m_nMeasurementsEntries;
-  size_t m_nCsEntries;
+  uint64_t m_nNameTreeEntries;
+  uint64_t m_nFibEntries;
+  uint64_t m_nPitEntries;
+  uint64_t m_nMeasurementsEntries;
+  uint64_t m_nCsEntries;
   uint64_t m_nInInterests;
   uint64_t m_nInData;
   uint64_t m_nInNacks;
