diff --git a/tests/unit-tests/test-logic.cpp b/tests/unit-tests/test-logic.cpp
index 53a6f57..ed860af 100644
--- a/tests/unit-tests/test-logic.cpp
+++ b/tests/unit-tests/test-logic.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2012-2014 University of California, Los Angeles
+ * Copyright (c) 2012-2016 University of California, Los Angeles
  *
  * This file is part of ChronoSync, synchronization library for distributed realtime
  * applications for NDN.
@@ -27,7 +27,6 @@
 
 using std::vector;
 using ndn::util::DummyClientFace;
-using ndn::util::makeDummyClientFace;
 
 class Handler
 {
@@ -62,6 +61,7 @@
     logic.updateSeqNo(seqNo);
   }
 
+public:
   Logic logic;
   std::map<Name, SeqNo> map;
 };
@@ -77,9 +77,9 @@
     userPrefix[1] = Name("/user1");
     userPrefix[2] = Name("/user2");
 
-    faces[0] = makeDummyClientFace(ref(io), {true, true});
-    faces[1] = makeDummyClientFace(ref(io), {true, true});
-    faces[2] = makeDummyClientFace(ref(io), {true, true});
+    faces[0].reset(new DummyClientFace(io, {true, true}));
+    faces[1].reset(new DummyClientFace(io, {true, true}));
+    faces[2].reset(new DummyClientFace(io, {true, true}));
 
     for (int i = 0; i < 3; i++) {
       readInterestOffset[i] = 0;
@@ -104,19 +104,20 @@
       }
       readInterestOffset[sender]++;
     }
-    while (faces[sender]->sentDatas.size() > readDataOffset[sender]) {
+    while (faces[sender]->sentData.size() > readDataOffset[sender]) {
       for (int i = 0; i < 3; i++) {
         if (sender != i)
-          faces[i]->receive(faces[sender]->sentDatas[readDataOffset[sender]]);
+          faces[i]->receive(faces[sender]->sentData[readDataOffset[sender]]);
       }
       readDataOffset[sender]++;
     }
   }
 
+public:
   Name syncPrefix;
   Name userPrefix[3];
 
-  shared_ptr<DummyClientFace> faces[3];
+  std::unique_ptr<DummyClientFace> faces[3];
   shared_ptr<Handler> handler[3];
 
   size_t readInterestOffset[3];
@@ -134,8 +135,8 @@
 {
   Name syncPrefix("/ndn/broadcast/sync");
   Name userPrefix("/user");
-  shared_ptr<DummyClientFace> face = makeDummyClientFace(ref(io), {true, true});
-  BOOST_REQUIRE_NO_THROW(Logic(ref(*face), syncPrefix, userPrefix,
+  DummyClientFace face(io, {true, true});
+  BOOST_REQUIRE_NO_THROW(Logic(face, syncPrefix, userPrefix,
                                bind(onUpdate, _1)));
 }
 
diff --git a/tests/unit-tests/test-socket.cpp b/tests/unit-tests/test-socket.cpp
index 4e3f4da..9ba1294 100644
--- a/tests/unit-tests/test-socket.cpp
+++ b/tests/unit-tests/test-socket.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2012-2014 University of California, Los Angeles
+ * Copyright (c) 2012-2016 University of California, Los Angeles
  *
  * This file is part of ChronoSync, synchronization library for distributed realtime
  * applications for NDN.
@@ -29,7 +29,6 @@
 using std::vector;
 using std::map;
 using ndn::util::DummyClientFace;
-using ndn::util::makeDummyClientFace;
 
 
 /**
@@ -136,6 +135,7 @@
     return str;
   }
 
+public:
   map<ndn::Name, string> data;
   uint32_t sum;
   Socket socket;
@@ -152,9 +152,9 @@
     userPrefix[1] = Name("/user1");
     userPrefix[2] = Name("/user2");
 
-    faces[0] = makeDummyClientFace(ref(io), {true, true});
-    faces[1] = makeDummyClientFace(ref(io), {true, true});
-    faces[2] = makeDummyClientFace(ref(io), {true, true});
+    faces[0].reset(new DummyClientFace(io, {true, true}));
+    faces[1].reset(new DummyClientFace(io, {true, true}));
+    faces[2].reset(new DummyClientFace(io, {true, true}));
 
     for (int i = 0; i < 3; i++) {
       readInterestOffset[i] = 0;
@@ -179,10 +179,10 @@
       }
       readInterestOffset[sender]++;
     }
-    while (faces[sender]->sentDatas.size() > readDataOffset[sender]) {
+    while (faces[sender]->sentData.size() > readDataOffset[sender]) {
       for (int i = 0; i < 3; i++) {
         if (sender != i)
-          faces[i]->receive(faces[sender]->sentDatas[readDataOffset[sender]]);
+          faces[i]->receive(faces[sender]->sentData[readDataOffset[sender]]);
       }
       readDataOffset[sender]++;
     }
@@ -224,11 +224,12 @@
     app[idx]->setNum(dataName, buf, size);
   }
 
+public:
   Name syncPrefix;
   Name userPrefix[3];
   Name sessionName[3];
 
-  shared_ptr<DummyClientFace> faces[3];
+  std::unique_ptr<DummyClientFace> faces[3];
   shared_ptr<SocketTestApp> app[3];
 
   size_t readInterestOffset[3];
