diff --git a/tests/tools/nfdc/face-module.t.cpp b/tests/tools/nfdc/face-module.t.cpp
index 8d465e2..308196d 100644
--- a/tests/tools/nfdc/face-module.t.cpp
+++ b/tests/tools/nfdc/face-module.t.cpp
@@ -52,10 +52,9 @@
 BOOST_AUTO_TEST_CASE(Normal)
 {
   this->processInterest = [this] (const Interest& interest) {
-    Name datasetName("/localhost/nfd/faces/query");
-    FaceQueryFilter filter;
-    filter.setFaceId(256);
-    datasetName.append(filter.wireEncode());
+    BOOST_CHECK_EQUAL(interest.getName().size(), 5);
+    FaceQueryFilter filter(interest.getName().at(4).blockFromValue());
+    BOOST_CHECK_EQUAL(filter, FaceQueryFilter().setFaceId(256));
 
     FaceStatus payload;
     payload.setFaceId(256)
@@ -73,7 +72,7 @@
            .setNInBytes(13307258)
            .setNOutBytes(6231946);
 
-    this->sendDataset(datasetName, payload);
+    this->sendDataset(interest.getName(), payload);
   };
 
   this->execute("face show 256");
@@ -91,7 +90,7 @@
   this->execute("face show 256");
   BOOST_CHECK_EQUAL(exitCode, 3);
   BOOST_CHECK(out.is_empty());
-  BOOST_CHECK(err.is_equal("Face 256 not found.\n"));
+  BOOST_CHECK(err.is_equal("Face not found\n"));
 }
 
 BOOST_AUTO_TEST_CASE(Error)
@@ -101,7 +100,7 @@
   this->execute("face show 256");
   BOOST_CHECK_EQUAL(exitCode, 1);
   BOOST_CHECK(out.is_empty());
-  BOOST_CHECK(err.is_equal("Error 10060 when fetching face information: Timeout\n"));
+  BOOST_CHECK(err.is_equal("Error 10060 when querying face: Timeout\n"));
 }
 
 BOOST_AUTO_TEST_SUITE_END() // ShowCommand
@@ -150,8 +149,7 @@
     if (Name("/localhost/nfd/faces/query").isPrefixOf(interest.getName())) {
       BOOST_CHECK_EQUAL(interest.getName().size(), 5);
       FaceQueryFilter filter(interest.getName().at(4).blockFromValue());
-      // BOOST_CHECK_EQUAL(filter, FaceQueryFilter().setFaceId(10156));
-      BOOST_CHECK_EQUAL(filter.getFaceId(), 10156);
+      BOOST_CHECK_EQUAL(filter, FaceQueryFilter().setFaceId(10156));
 
       FaceStatus faceStatus;
       faceStatus.setFaceId(10156)
@@ -184,8 +182,7 @@
     if (Name("/localhost/nfd/faces/query").isPrefixOf(interest.getName())) {
       BOOST_CHECK_EQUAL(interest.getName().size(), 5);
       FaceQueryFilter filter(interest.getName().at(4).blockFromValue());
-      // BOOST_CHECK_EQUAL(filter, FaceQueryFilter().setRemoteUri("tcp4://32.121.182.82:6363"));
-      BOOST_CHECK_EQUAL(filter.getRemoteUri(), "tcp4://32.121.182.82:6363");
+      BOOST_CHECK_EQUAL(filter, FaceQueryFilter().setRemoteUri("tcp4://32.121.182.82:6363"));
 
       FaceStatus faceStatus;
       faceStatus.setFaceId(2249)
diff --git a/tools/nfdc/face-module.cpp b/tools/nfdc/face-module.cpp
index 4dc732e..e96de3e 100644
--- a/tools/nfdc/face-module.cpp
+++ b/tools/nfdc/face-module.cpp
@@ -59,22 +59,22 @@
 {
   uint64_t faceId = ctx.args.get<uint64_t>("id");
 
-  ndn::nfd::FaceQueryFilter filter;
-  filter.setFaceId(faceId);
-  ctx.controller.fetch<ndn::nfd::FaceQueryDataset>(
-    filter,
-    [faceId, &ctx] (const std::vector<FaceStatus>& result) {
-      if (result.size() != 1) {
-        ctx.exitCode = 3;
-        ctx.err << "Face " << faceId << " not found.\n";
-        return;
-      }
-      formatItemText(ctx.out, result.front(), true);
-    },
-    ctx.makeDatasetFailureHandler("face information"),
-    ctx.makeCommandOptions());
+  FindFace findFace(ctx);
+  FindFace::Code res = findFace.execute(faceId);
 
-  ctx.face.processEvents();
+  ctx.exitCode = static_cast<int>(res);
+  switch (res) {
+    case FindFace::Code::OK:
+      formatItemText(ctx.out, findFace.getFaceStatus(), true);
+      break;
+    case FindFace::Code::ERROR:
+    case FindFace::Code::NOT_FOUND:
+      ctx.err << findFace.getErrorReason() << '\n';
+      break;
+    default:
+      BOOST_ASSERT_MSG(false, "unexpected FindFace result");
+      break;
+  }
 }
 
 void
