diff --git a/tests/unit/clients/response.cpp b/tests/unit/clients/response.cpp
index 76798db..7332c35 100644
--- a/tests/unit/clients/response.cpp
+++ b/tests/unit/clients/response.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014, Regents of the University of California.
+ * Copyright (c) 2014-2016, Regents of the University of California.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -50,7 +50,7 @@
   BOOST_CHECK_EQUAL(r.getQueryType(), qType);
 
   const std::string DATA1("some fake content");
-  r.setAppContent(dataBlock(ndn::tlv::Content, DATA1.c_str(), DATA1.size()));
+  r.setAppContent(makeBinaryBlock(ndn::tlv::Content, DATA1.c_str(), DATA1.size()));
 
   //const Block& block = r.wireEncode();
   shared_ptr<Data> data = r.toData();
@@ -66,10 +66,10 @@
   r4.setNdnsType(NDNS_RESP);
 
   std::string str = "Just try it";
-  Block s = dataBlock(ndns::tlv::RrData, str.c_str(), str.size());
+  Block s = makeBinaryBlock(ndns::tlv::RrData, str.c_str(), str.size());
   r4.addRr(s);
   str = "Go to Hell";
-  // Block s2 = dataBlock(ndns::tlv::RrData, str.c_str(), str.size());
+  // Block s2 = makeBinaryBlock(ndns::tlv::RrData, str.c_str(), str.size());
   r4.addRr(str);
 
   BOOST_CHECK_NE(r2, r4);
diff --git a/tests/unit/daemon/db-mgr.cpp b/tests/unit/daemon/db-mgr.cpp
index be728d6..4b628b3 100644
--- a/tests/unit/daemon/db-mgr.cpp
+++ b/tests/unit/daemon/db-mgr.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014, Regents of the University of California.
+ * Copyright (c) 2014-2016, Regents of the University of California.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -97,7 +97,7 @@
   rrset1.setTtl(time::seconds(4600));
 
   static const std::string DATA1 = "SOME DATA";
-  rrset1.setData(dataBlock(ndn::tlv::Content, DATA1.c_str(), DATA1.size()));
+  rrset1.setData(makeBinaryBlock(ndn::tlv::Content, DATA1.c_str(), DATA1.size()));
 
   BOOST_CHECK_EQUAL(rrset1.getId(), 0);
   BOOST_CHECK_NO_THROW(session.insert(rrset1));
@@ -125,7 +125,7 @@
 
   rrset1.setVersion(name::Component::fromVersion(890));
   static const std::string DATA2 = "ANOTHER DATA";
-  rrset1.setData(dataBlock(ndn::tlv::Content, DATA2.c_str(), DATA2.size()));
+  rrset1.setData(makeBinaryBlock(ndn::tlv::Content, DATA2.c_str(), DATA2.size()));
 
   BOOST_CHECK_NO_THROW(session.update(rrset1));
 
@@ -217,7 +217,7 @@
   rrset1.setTtl(time::seconds(4600));
 
   static const std::string DATA1 = "SOME DATA";
-  rrset1.setData(dataBlock(ndn::tlv::Content, DATA1.data(), DATA1.size()));
+  rrset1.setData(makeBinaryBlock(ndn::tlv::Content, DATA1.data(), DATA1.size()));
   session.insert(rrset1);
 
   Rrset rrset2(&zone);
@@ -226,7 +226,7 @@
   rrset2.setVersion(name::Component::fromVersion(232));
   rrset2.setTtl(time::seconds(2100));
   std::string data2 = "host1.net";
-  rrset2.setData(dataBlock(ndn::tlv::Content, data2.c_str(), data2.size()));
+  rrset2.setData(makeBinaryBlock(ndn::tlv::Content, data2.c_str(), data2.size()));
   session.insert(rrset2);
 
   std::vector<Rrset> vec = session.findRrsets(zone);
diff --git a/tests/unit/daemon/name-server.cpp b/tests/unit/daemon/name-server.cpp
index 8944759..6a9be97 100644
--- a/tests/unit/daemon/name-server.cpp
+++ b/tests/unit/daemon/name-server.cpp
@@ -170,9 +170,9 @@
   re.setNdnsType(NDNS_RESP);
 
   std::string str = "ns1.ndnsim.net";
-  re.addRr(dataBlock(ndns::tlv::RrData, str.c_str(), str.size()));
+  re.addRr(makeBinaryBlock(ndns::tlv::RrData, str.c_str(), str.size()));
   str = "ns2.ndnsim.net";
-  re.addRr(dataBlock(ndns::tlv::RrData, str.c_str(), str.size()));
+  re.addRr(makeBinaryBlock(ndns::tlv::RrData, str.c_str(), str.size()));
 
   shared_ptr<Data> data = re.toData();
   m_keyChain.sign(*data, m_certName);
@@ -222,9 +222,9 @@
   re.setNdnsType(NDNS_RESP);
 
   std::string str = "ns1.ndnsim.net";
-  re.addRr(dataBlock(ndns::tlv::RrData, str.c_str(), str.size()));
+  re.addRr(makeBinaryBlock(ndns::tlv::RrData, str.c_str(), str.size()));
   str = "ns2.ndnsim.net";
-  re.addRr(dataBlock(ndns::tlv::RrData, str.c_str(), str.size()));
+  re.addRr(makeBinaryBlock(ndns::tlv::RrData, str.c_str(), str.size()));
 
   shared_ptr<Data> data = re.toData();
   m_keyChain.sign(*data, m_certName);
@@ -298,9 +298,9 @@
   re.setNdnsType(NDNS_RESP);
 
   std::string str = "ns1.ndnsim.net";
-  re.addRr(dataBlock(ndns::tlv::RrData, str.c_str(), str.size()));
+  re.addRr(makeBinaryBlock(ndns::tlv::RrData, str.c_str(), str.size()));
   str = "ns2.ndnsim.net";
-  re.addRr(dataBlock(ndns::tlv::RrData, str.c_str(), str.size()));
+  re.addRr(makeBinaryBlock(ndns::tlv::RrData, str.c_str(), str.size()));
 
   shared_ptr<Data> data = re.toData();
   m_keyChain.sign(*data, dskCert->getName());
@@ -401,9 +401,9 @@
   re.setNdnsType(NDNS_RESP);
 
   std::string str = "ns1.ndnsim.net";
-  re.addRr(dataBlock(ndns::tlv::RrData, str.c_str(), str.size()));
+  re.addRr(makeBinaryBlock(ndns::tlv::RrData, str.c_str(), str.size()));
   str = "ns2.ndnsim.net";
-  re.addRr(dataBlock(ndns::tlv::RrData, str.c_str(), str.size()));
+  re.addRr(makeBinaryBlock(ndns::tlv::RrData, str.c_str(), str.size()));
 
   shared_ptr<Data> data = re.toData();
   m_keyChain.sign(*data, dskCert->getName());
diff --git a/tests/unit/database-test-data.cpp b/tests/unit/database-test-data.cpp
index df43338..077d09b 100644
--- a/tests/unit/database-test-data.cpp
+++ b/tests/unit/database-test-data.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014, Regents of the University of California.
+ * Copyright (c) 2014-2016, Regents of the University of California.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -132,7 +132,7 @@
 
   if (msg.size() > 0) {
     if (type == label::CERT_RR_TYPE)
-      re.setAppContent(dataBlock(ndn::tlv::Content, msg.c_str(), msg.size()));
+      re.setAppContent(makeBinaryBlock(ndn::tlv::Content, msg.c_str(), msg.size()));
     else
       re.addRr(msg);
   }
diff --git a/tests/unit/mgmt/management-tool.cpp b/tests/unit/mgmt/management-tool.cpp
index 54ad7d2..ed8e02b 100644
--- a/tests/unit/mgmt/management-tool.cpp
+++ b/tests/unit/mgmt/management-tool.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /**
- * Copyright (c) 2014, Regents of the University of California.
+ * Copyright (c) 2014-2016, Regents of the University of California.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -802,7 +802,7 @@
   re2.setRrType(name::Component("USER-DEFINED"));
   re2.setNdnsType(NDNS_RAW);
   re2.setVersion(name::Component::fromVersion(1234567));
-  re2.setAppContent(dataBlock(ndn::tlv::Content, "Hello", sizeof("Hello")));
+  re2.setAppContent(makeBinaryBlock(ndn::tlv::Content, "Hello", sizeof("Hello")));
   shared_ptr<Data> data2 = re2.toData();
   m_keyChain.sign(*data2, otherDsk);
   ndn::io::save(*data2, output);
