diff --git a/daemon/fw/asf-measurements.hpp b/daemon/fw/asf-measurements.hpp
index ba858df..ee5885d 100644
--- a/daemon/fw/asf-measurements.hpp
+++ b/daemon/fw/asf-measurements.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2017,  Regents of the University of California,
+/*
+ * Copyright (c) 2014-2018,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -166,6 +166,18 @@
     return getSrtt() != RttStats::RTT_NO_MEASUREMENT;
   }
 
+  size_t
+  getNSilentTimeouts() const
+  {
+    return m_nSilentTimeouts;
+  }
+
+  void
+  setNSilentTimeouts(size_t nSilentTimeouts)
+  {
+    m_nSilentTimeouts = nSilentTimeouts;
+  }
+
 private:
   void
   cancelTimeoutEvent();
@@ -183,9 +195,10 @@
   // RTO associated with Interest
   scheduler::EventId m_timeoutEventId;
   bool m_isTimeoutScheduled;
+  size_t m_nSilentTimeouts;
 };
 
-typedef std::unordered_map<face::FaceId, FaceInfo> FaceInfoTable;
+typedef std::unordered_map<FaceId, FaceInfo> FaceInfoTable;
 
 ////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////
@@ -204,19 +217,19 @@
   }
 
   FaceInfo&
-  getOrCreateFaceInfo(const fib::Entry& fibEntry, const Face& face);
+  getOrCreateFaceInfo(const fib::Entry& fibEntry, FaceId faceId);
 
   FaceInfo*
-  getFaceInfo(const fib::Entry& fibEntry, const Face& face);
+  getFaceInfo(const fib::Entry& fibEntry, FaceId faceId);
 
   void
-  expireFaceInfo(nfd::face::FaceId faceId);
+  expireFaceInfo(FaceId faceId);
 
   void
-  extendFaceInfoLifetime(FaceInfo& info, const Face& face);
+  extendFaceInfoLifetime(FaceInfo& info, FaceId faceId);
 
   FaceInfo*
-  get(nfd::face::FaceId faceId)
+  get(FaceId faceId)
   {
     if (m_fit.find(faceId) != m_fit.end()) {
       return &m_fit.at(faceId);
@@ -227,7 +240,7 @@
   }
 
   FaceInfoTable::iterator
-  find(nfd::face::FaceId faceId)
+  find(FaceId faceId)
   {
     return m_fit.find(faceId);
   }
@@ -239,7 +252,7 @@
   }
 
   const FaceInfoTable::iterator
-  insert(nfd::face::FaceId faceId)
+  insert(FaceId faceId)
   {
     const auto& pair = m_fit.insert(std::make_pair(faceId, FaceInfo()));
     return pair.first;
@@ -288,10 +301,10 @@
   AsfMeasurements(MeasurementsAccessor& measurements);
 
   FaceInfo*
-  getFaceInfo(const fib::Entry& fibEntry, const Interest& interest, const Face& face);
+  getFaceInfo(const fib::Entry& fibEntry, const Interest& interest, FaceId faceId);
 
   FaceInfo&
-  getOrCreateFaceInfo(const fib::Entry& fibEntry, const Interest& interest, const Face& face);
+  getOrCreateFaceInfo(const fib::Entry& fibEntry, const Interest& interest, FaceId faceId);
 
   NamespaceInfo*
   getNamespaceInfo(const Name& prefix);
