diff --git a/tests/unit-tests/face.t.cpp b/tests/unit-tests/face.t.cpp
index b0f78f9..bf87de6 100644
--- a/tests/unit-tests/face.t.cpp
+++ b/tests/unit-tests/face.t.cpp
@@ -41,7 +41,7 @@
 public:
   explicit
   FaceFixture(bool enableRegistrationReply = true)
-    : face(io, m_keyChain, { true, enableRegistrationReply })
+    : face(io, m_keyChain, {true, enableRegistrationReply})
   {
   }
 
@@ -74,12 +74,12 @@
                        bind([] { BOOST_FAIL("Unexpected Nack"); }),
                        bind([] { BOOST_FAIL("Unexpected timeout"); }));
 
-  advanceClocks(time::milliseconds(1), 40);
+  advanceClocks(time::milliseconds(40));
 
   face.receive(*makeData("/Bye/World/a"));
   face.receive(*makeData("/Hello/World/a"));
 
-  advanceClocks(time::milliseconds(1), 100);
+  advanceClocks(time::milliseconds(50), 2);
 
   BOOST_CHECK_EQUAL(nData, 1);
   BOOST_CHECK_EQUAL(face.sentInterests.size(), 1);
@@ -90,7 +90,7 @@
                        bind([]{}),
                        bind([]{}),
                        bind([&nTimeouts] { ++nTimeouts; }));
-  advanceClocks(time::milliseconds(10), 100);
+  advanceClocks(time::milliseconds(200), 5);
   BOOST_CHECK_EQUAL(nTimeouts, 1);
 }
 
@@ -108,7 +108,6 @@
   } while (false));
 }
 
-// test case for deprecated expressInterest implementation
 BOOST_AUTO_TEST_CASE(DeprecatedExpressInterestData)
 {
   size_t nData = 0;
@@ -119,12 +118,12 @@
                        },
                        bind([] { BOOST_FAIL("Unexpected timeout"); }));
 
-  advanceClocks(time::milliseconds(1), 40);
+  advanceClocks(time::milliseconds(40));
 
   face.receive(*makeData("/Bye/World/a"));
   face.receive(*makeData("/Hello/World/a"));
 
-  advanceClocks(time::milliseconds(1), 100);
+  advanceClocks(time::milliseconds(50), 2);
 
   BOOST_CHECK_EQUAL(nData, 1);
   BOOST_CHECK_EQUAL(face.sentInterests.size(), 1);
@@ -136,21 +135,14 @@
                          ++nData;
                        },
                        bind([] { BOOST_FAIL("Unexpected timeout"); }));
-  advanceClocks(time::milliseconds(1), 40);
+  advanceClocks(time::milliseconds(40));
   face.receive(*makeData("/Hello/World/a/1/xxxxx"));
 
-  advanceClocks(time::milliseconds(1), 100);
+  advanceClocks(time::milliseconds(50), 2);
 
   BOOST_CHECK_EQUAL(nData, 2);
   BOOST_CHECK_EQUAL(face.sentInterests.size(), 2);
   BOOST_CHECK_EQUAL(face.sentData.size(), 0);
-
-  size_t nTimeouts = 0;
-  face.expressInterest(Interest("/Hello/World/a/2", time::milliseconds(50)),
-                       bind([]{}),
-                       bind([&nTimeouts] { ++nTimeouts; }));
-  advanceClocks(time::milliseconds(10), 100);
-  BOOST_CHECK_EQUAL(nTimeouts, 1);
 }
 
 BOOST_AUTO_TEST_CASE(ExpressInterestTimeout)
@@ -164,7 +156,7 @@
                          ++nTimeouts;
                        });
 
-  advanceClocks(time::milliseconds(10), 100);
+  advanceClocks(time::milliseconds(200), 5);
 
   BOOST_CHECK_EQUAL(nTimeouts, 1);
   BOOST_CHECK_EQUAL(face.sentInterests.size(), 1);
@@ -185,7 +177,6 @@
   } while (false));
 }
 
-// test case for deprecated expressInterest implementation
 BOOST_AUTO_TEST_CASE(DeprecatedExpressInterestTimeout)
 {
   size_t nTimeouts = 0;
@@ -193,7 +184,7 @@
                        bind([] { BOOST_FAIL("Unexpected data"); }),
                        bind([&nTimeouts] { ++nTimeouts; }));
 
-  advanceClocks(time::milliseconds(10), 100);
+  advanceClocks(time::milliseconds(200), 5);
 
   BOOST_CHECK_EQUAL(nTimeouts, 1);
   BOOST_CHECK_EQUAL(face.sentInterests.size(), 1);
@@ -216,16 +207,11 @@
                        },
                        bind([] { BOOST_FAIL("Unexpected timeout"); }));
 
-  advanceClocks(time::milliseconds(1), 40);
+  advanceClocks(time::milliseconds(40));
 
-  lp::Nack nack(face.sentInterests[0]);
-  nack.setReason(lp::NackReason::DUPLICATE);
+  face.receive(makeNack(face.sentInterests.at(0), lp::NackReason::DUPLICATE));
 
-  BOOST_CHECK_EQUAL(face.sentNacks.size(), 0);
-
-  face.receive(nack);
-
-  advanceClocks(time::milliseconds(1), 100);
+  advanceClocks(time::milliseconds(50), 2);
 
   BOOST_CHECK_EQUAL(nNacks, 1);
   BOOST_CHECK_EQUAL(face.sentInterests.size(), 1);
@@ -245,6 +231,22 @@
   } while (false));
 }
 
+BOOST_AUTO_TEST_CASE(DeprecatedExpressInterestNack)
+{
+  size_t nTimeouts = 0;
+  face.expressInterest(Interest("/Hello/World", time::milliseconds(50)),
+                       bind([] { BOOST_FAIL("Unexpected data"); }),
+                       bind([&nTimeouts] { ++nTimeouts; }));
+  advanceClocks(time::milliseconds(1));
+
+  face.receive(makeNack(face.sentInterests.at(0), lp::NackReason::CONGESTION));
+  advanceClocks(time::milliseconds(1));
+
+  BOOST_CHECK_EQUAL(nTimeouts, 1);
+  BOOST_CHECK_EQUAL(face.sentInterests.size(), 1);
+  BOOST_CHECK_EQUAL(face.sentData.size(), 0);
+}
+
 BOOST_AUTO_TEST_CASE(RemovePendingInterest)
 {
   const PendingInterestId* interestId =
@@ -258,7 +260,7 @@
   advanceClocks(time::milliseconds(10));
 
   face.receive(*makeData("/Hello/World/%21"));
-  advanceClocks(time::milliseconds(10), 100);
+  advanceClocks(time::milliseconds(200), 5);
 }
 
 BOOST_AUTO_TEST_CASE(RemoveAllPendingInterests)
@@ -282,7 +284,7 @@
 
   face.receive(*makeData("/Hello/World/0"));
   face.receive(*makeData("/Hello/World/1"));
-  advanceClocks(time::milliseconds(10), 100);
+  advanceClocks(time::milliseconds(200), 5);
 }
 
 BOOST_AUTO_TEST_CASE(DestructionWithoutCancellingPendingInterests) // Bug #2518
@@ -291,10 +293,10 @@
     DummyClientFace face2(io, m_keyChain);
     face2.expressInterest(Interest("/Hello/World", time::milliseconds(50)),
                           bind([]{}), bind([]{}));
-    advanceClocks(time::milliseconds(10), 10);
+    advanceClocks(time::milliseconds(50), 2);
   }
 
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(50), 2);
   // should not segfault
 }
 
@@ -304,13 +306,9 @@
 
 BOOST_AUTO_TEST_CASE(PutNack)
 {
-  lp::Nack nack(Interest("/Hello/World", time::milliseconds(50)));
-  nack.setReason(lp::NackReason::NO_ROUTE);
-
   BOOST_CHECK_EQUAL(face.sentNacks.size(), 0);
 
-  face.put(nack);
-
+  face.put(makeNack(Interest("/Hello/World", time::milliseconds(50)), lp::NackReason::NO_ROUTE));
   advanceClocks(time::milliseconds(10));
 
   BOOST_CHECK_EQUAL(face.sentNacks.size(), 1);
@@ -325,12 +323,12 @@
                            bind([&nInterests] { ++nInterests; }),
                            bind([&nRegs] { ++nRegs; }),
                            bind([] {  BOOST_FAIL("Unexpected setInterestFilter failure"); }));
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
   BOOST_CHECK_EQUAL(nRegs, 1);
   BOOST_CHECK_EQUAL(nInterests, 0);
 
   face.receive(Interest("/Hello/World/%21"));
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 
   BOOST_CHECK_EQUAL(nRegs, 1);
   BOOST_CHECK_EQUAL(nInterests, 1);
@@ -340,21 +338,21 @@
   BOOST_CHECK_EQUAL(nInterests, 1);
 
   face.receive(Interest("/Hello/World/%21/2"));
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
   BOOST_CHECK_EQUAL(nInterests, 2);
 
   // removing filter
   face.unsetInterestFilter(regPrefixId);
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 
   face.receive(Interest("/Hello/World/%21/3"));
   BOOST_CHECK_EQUAL(nInterests, 2);
 
   face.unsetInterestFilter(static_cast<const RegisteredPrefixId*>(nullptr));
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 
   face.unsetInterestFilter(static_cast<const InterestFilterId*>(nullptr));
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 }
 
 BOOST_AUTO_TEST_CASE(SetInterestFilterEmptyInterestCallback)
@@ -375,11 +373,11 @@
     face.setInterestFilter("/Hello/World",
                            bind([&nInterests] { ++nInterests; }),
                            bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
   BOOST_CHECK_EQUAL(nInterests, 0);
 
   face.receive(Interest("/Hello/World/%21"));
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 
   BOOST_CHECK_EQUAL(nInterests, 1);
 
@@ -388,21 +386,21 @@
   BOOST_CHECK_EQUAL(nInterests, 1);
 
   face.receive(Interest("/Hello/World/%21/2"));
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
   BOOST_CHECK_EQUAL(nInterests, 2);
 
   // removing filter
   face.unsetInterestFilter(regPrefixId);
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 
   face.receive(Interest("/Hello/World/%21/3"));
   BOOST_CHECK_EQUAL(nInterests, 2);
 
   face.unsetInterestFilter(static_cast<const RegisteredPrefixId*>(nullptr));
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 
   face.unsetInterestFilter(static_cast<const InterestFilterId*>(nullptr));
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 }
 
 BOOST_FIXTURE_TEST_CASE(SetInterestFilterFail, FacesNoRegistrationReplyFixture)
@@ -414,10 +412,10 @@
                          bind([] { BOOST_FAIL("Unexpected success of setInterestFilter"); }),
                          bind([&nRegFailed] { ++nRegFailed; }));
 
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
   BOOST_CHECK_EQUAL(nRegFailed, 0);
 
-  advanceClocks(time::milliseconds(1000), 10);
+  advanceClocks(time::milliseconds(2000), 5);
   BOOST_CHECK_EQUAL(nRegFailed, 1);
 }
 
@@ -429,10 +427,10 @@
                          bind([] { BOOST_FAIL("Unexpected Interest"); }),
                          bind([&nRegFailed] { ++nRegFailed; }));
 
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
   BOOST_CHECK_EQUAL(nRegFailed, 0);
 
-  advanceClocks(time::milliseconds(1000), 10);
+  advanceClocks(time::milliseconds(2000), 5);
   BOOST_CHECK_EQUAL(nRegFailed, 1);
 }
 
@@ -444,7 +442,7 @@
                         bind([&nRegSuccesses] { ++nRegSuccesses; }),
                         bind([] { BOOST_FAIL("Unexpected registerPrefix failure"); }));
 
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
   BOOST_CHECK_EQUAL(nRegSuccesses, 1);
 
   size_t nUnregSuccesses = 0;
@@ -452,7 +450,7 @@
                         bind([&nUnregSuccesses] { ++nUnregSuccesses; }),
                         bind([] { BOOST_FAIL("Unexpected unregisterPrefix failure"); }));
 
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
   BOOST_CHECK_EQUAL(nUnregSuccesses, 1);
 }
 
@@ -463,7 +461,7 @@
                       bind([] { BOOST_FAIL("Unexpected registerPrefix success"); }),
                       bind([&nRegFailures] { ++nRegFailures; }));
 
-  advanceClocks(time::milliseconds(1000), 100);
+  advanceClocks(time::milliseconds(5000), 20);
   BOOST_CHECK_EQUAL(nRegFailures, 1);
 }
 
@@ -487,10 +485,10 @@
                          nullptr,
                          bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
 
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 
   face.receive(Interest("/Hello/World/%21"));
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 
   BOOST_CHECK_EQUAL(nInInterests1, 1);
   BOOST_CHECK_EQUAL(nInInterests2, 1);
@@ -506,7 +504,7 @@
                          nullptr,
                          bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
 
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 
   BOOST_REQUIRE_THROW(face.receive(Interest("/Hello/World/XXX/b/c")), InterestFilter::Error);
 }
@@ -519,7 +517,7 @@
                          nullptr,
                          bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
 
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
 
   face.receive(Interest("/Hello/World/a"));     // shouldn't match
   BOOST_CHECK_EQUAL(nInInterests, 0);
@@ -545,7 +543,7 @@
                       bind([&nRegSuccesses] { ++nRegSuccesses; }),
                       bind([] { BOOST_FAIL("Unexpected setInterestFilter failure"); }));
 
-  advanceClocks(time::milliseconds(10), 10);
+  advanceClocks(time::milliseconds(25), 4);
   BOOST_CHECK_EQUAL(nRegSuccesses, 1);
 
   face.receive(Interest("/Hello/World/a")); // shouldn't match
