diff --git a/tests/dummy-forwarder.cpp b/tests/dummy-forwarder.cpp
index ff34fb2..5d53ff1 100644
--- a/tests/dummy-forwarder.cpp
+++ b/tests/dummy-forwarder.cpp
@@ -34,32 +34,39 @@
 Face&
 DummyForwarder::addFace()
 {
-  auto face = std::make_shared<util::DummyClientFace>(m_io, m_keyChain, util::
-                                                      DummyClientFace::Options{true, true});
-  face->onSendInterest.connect([this, face] (const Interest& interest) {
-      for (auto& otherFace : m_faces) {
-        if (&*face == &*otherFace) {
-          continue;
+  auto face = std::make_shared<util::DummyClientFace>(m_io, m_keyChain,
+                                                      util::DummyClientFace::Options{true, true});
+  std::weak_ptr<Face> weakFace(face);
+  face->onSendInterest.connect([this, weakFace] (const Interest& interest) {
+      if (auto face = weakFace.lock()) {
+        for (auto& otherFace : m_faces) {
+          if (&*face == &*otherFace) {
+            continue;
+          }
+          otherFace->receive(interest);
         }
-        otherFace->receive(interest);
       }
     });
 
-  face->onSendData.connect([this, face] (const Data& data) {
-      for (auto& otherFace : m_faces) {
-        if (&*face == &*otherFace) {
-          continue;
+  face->onSendData.connect([this, weakFace] (const Data& data) {
+      if (auto face = weakFace.lock()) {
+        for (auto& otherFace : m_faces) {
+          if (&*face == &*otherFace) {
+            continue;
+          }
+          otherFace->receive(data);
         }
-        otherFace->receive(data);
       }
     });
 
-  face->onSendNack.connect([this, face] (const lp::Nack& nack) {
-      for (auto& otherFace : m_faces) {
-        if (&*face == &*otherFace) {
-          continue;
+  face->onSendNack.connect([this, weakFace] (const lp::Nack& nack) {
+      if (auto face = weakFace.lock()) {
+        for (auto& otherFace : m_faces) {
+          if (&*face == &*otherFace) {
+            continue;
+          }
+          otherFace->receive(nack);
         }
-        otherFace->receive(nack);
       }
     });
 
