diff --git a/tests/test-faces.cpp b/tests/test-faces.cpp
index 498ca73..9fc5860 100644
--- a/tests/test-faces.cpp
+++ b/tests/test-faces.cpp
@@ -5,6 +5,7 @@
 
 #include <boost/test/unit_test.hpp>
 #include "face.hpp"
+#include "util/scheduler.hpp"
 
 using namespace std;
 namespace ndn {
@@ -16,6 +17,9 @@
   FacesFixture()
     : dataCount(0)
     , timeoutCount(0)
+    , regPrefixId(0)
+    , inInterestCount(0)
+    , regFailedCount(0)
   {
   }
   
@@ -32,17 +36,41 @@
   }
 
   void
-  onInterest()
+  onInterest(Face& face)
   {
+    ++inInterestCount;
+
+    face.unsetInterestFilter(regPrefixId);
   }
 
   void
   onRegFailed()
   {
+    ++regFailedCount;
+  }
+
+  void
+  expressInterest(Face& face, const Name& name)
+  {
+    Interest i(name);
+    i.setInterestLifetime(50);
+    face.expressInterest(i,
+                         bind(&FacesFixture::onData, this),
+                         bind(&FacesFixture::onTimeout, this));
+  }
+
+  void
+  terminate(Face& face)
+  {
+    face.shutdown();
   }
 
   uint32_t dataCount;
   uint32_t timeoutCount;
+
+  const RegisteredPrefixId* regPrefixId;
+  uint32_t inInterestCount;
+  uint32_t regFailedCount;
 };
 
 BOOST_FIXTURE_TEST_CASE (Unix, FacesFixture)
@@ -73,8 +101,8 @@
   Face face("localhost");
 
   face.expressInterest(Interest("/%C1.M.S.localhost/%C1.M.SRV/ndnd/KEY", 1000),
-                       ptr_lib::bind(&FacesFixture::onData, this),
-                       ptr_lib::bind(&FacesFixture::onTimeout, this));
+                       bind(&FacesFixture::onData, this),
+                       bind(&FacesFixture::onTimeout, this));
 
   BOOST_REQUIRE_NO_THROW(face.processEvents());
 
@@ -82,8 +110,8 @@
   BOOST_CHECK_EQUAL(timeoutCount, 0);
 
   face.expressInterest(Interest("/localhost/non-existing/data/should/not/exist/anywhere", 50),
-                       ptr_lib::bind(&FacesFixture::onData, this),
-                       ptr_lib::bind(&FacesFixture::onTimeout, this));
+                       bind(&FacesFixture::onData, this),
+                       bind(&FacesFixture::onTimeout, this));
 
   BOOST_REQUIRE_NO_THROW(face.processEvents());
 
@@ -91,6 +119,31 @@
   BOOST_CHECK_EQUAL(timeoutCount, 1);
 }
 
+
+BOOST_FIXTURE_TEST_CASE (SetFilter, FacesFixture)
+{
+  Face face;
+  Face face2(face.ioService());
+  Scheduler scheduler(*face.ioService());
+  scheduler.scheduleEvent(time::seconds(0.3),
+                          bind(&FacesFixture::terminate, this, func_lib::ref(face)));
+  
+  regPrefixId = face.setInterestFilter("/Hello/World",
+                                       bind(&FacesFixture::onInterest, this, func_lib::ref(face)),
+                                       bind(&FacesFixture::onRegFailed, this));
+
+  scheduler.scheduleEvent(time::seconds(0.2),
+                          bind(&FacesFixture::expressInterest, this,
+                               func_lib::ref(face2), Name("/Hello/World/!")));
+  
+  BOOST_REQUIRE_NO_THROW(face.processEvents());
+
+  BOOST_CHECK_EQUAL(regFailedCount, 0);  
+  BOOST_CHECK_EQUAL(inInterestCount, 1);  
+  BOOST_CHECK_EQUAL(timeoutCount, 1);
+  BOOST_CHECK_EQUAL(dataCount, 0);
+}
+
 BOOST_AUTO_TEST_SUITE_END()
 
 } // namespace ndn
