diff --git a/.waf-tools/boost.py b/.waf-tools/boost.py
index bb65d7c..d7e0107 100644
--- a/.waf-tools/boost.py
+++ b/.waf-tools/boost.py
@@ -405,8 +405,8 @@
 
 	self.find_program('dpkg-architecture', var='DPKG_ARCHITECTURE', mandatory=False)
 	if self.env.DPKG_ARCHITECTURE:
-		deb_host_multiarch = Utils.subprocess.check_output([self.env.DPKG_ARCHITECTURE[0], '-qDEB_HOST_MULTIARCH']).strip()
-		BOOST_LIBS.insert(0, '/usr/lib/%s' % deb_host_multiarch)
+		deb_host_multiarch = self.cmd_and_log([self.env.DPKG_ARCHITECTURE[0], '-qDEB_HOST_MULTIARCH'])
+		BOOST_LIBS.insert(0, '/usr/lib/%s' % deb_host_multiarch.strip())
 
 	self.start_msg('Checking boost includes')
 	self.env['INCLUDES_%s' % var] = inc = self.boost_get_includes(**params)
diff --git a/src/logic.cpp b/src/logic.cpp
index 35480ee..7bf4428 100644
--- a/src/logic.cpp
+++ b/src/logic.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2012-2018 University of California, Los Angeles
+ * Copyright (c) 2012-2019 University of California, Los Angeles
  *
  * This file is part of ChronoSync, synchronization library for distributed realtime
  * applications for NDN.
@@ -121,7 +121,7 @@
   , m_needPeriodReset(resetTimer > time::steady_clock::Duration::zero())
   , m_onUpdate(onUpdate)
   , m_scheduler(m_face.getIoService())
-  , m_rng(std::random_device{}())
+  , m_rng(ndn::random::getRandomNumberEngine())
   , m_rangeUniformRandom(100, 500)
   , m_reexpressionJitter(100, 500)
   , m_resetTimer(resetTimer)
@@ -866,56 +866,4 @@
   }
 }
 
-// void
-// Logic::sendExcludeInterest(const Interest& interest, const Data& data)
-// {
-//   _LOG_DEBUG_ID(">> Logic::sendExcludeInterest");
-
-//   Name interestName = interest.getName();
-//   Interest excludeInterest(interestName);
-
-//   Exclude exclude = interest.getExclude();
-//   exclude.excludeOne(data.getFullName().get(-1));
-//   excludeInterest.setExclude(exclude);
-//   excludeInterest.setMustBeFresh(true);
-
-//   excludeInterest.setInterestLifetime(m_syncInterestLifetime);
-
-//   if (excludeInterest.wireEncode().size() > ndn::MAX_NDN_PACKET_SIZE) {
-//     return;
-//   }
-
-//   m_face.expressInterest(excludeInterest,
-//                          bind(&Logic::onSyncData, this, _1, _2),
-//                          bind(&Logic::onSyncTimeout, this, _1), // Nack
-//                          bind(&Logic::onSyncTimeout, this, _1));
-
-//   _LOG_DEBUG_ID("Send interest: " << excludeInterest.getName());
-//   _LOG_DEBUG_ID("<< Logic::sendExcludeInterest");
-// }
-
-// void
-// Logic::formAndSendExcludeInterest(const Name& nodePrefix, const State& commit, ConstBufferPtr previousRoot)
-// {
-//   _LOG_DEBUG_ID(">> Logic::formAndSendExcludeInterest");
-//   Name interestName;
-//   interestName.append(m_syncPrefix)
-//               .append(ndn::name::Component(*previousRoot));
-//   Interest interest(interestName);
-
-//   Data data(interestName);
-//   data.setContent(commit.wireEncode());
-//   data.setFreshnessPeriod(m_syncReplyFreshness);
-//   if (m_nodeList.find(nodePrefix) == m_nodeList.end())
-//     return;
-//   if (m_nodeList[nodePrefix].signingId.empty())
-//     m_keyChain.sign(data);
-//   else
-//     m_keyChain.sign(data, security::signingByIdentity(m_nodeList[nodePrefix].signingId));
-
-//   sendExcludeInterest(interest, data);
-
-//   _LOG_DEBUG_ID("<< Logic::formAndSendExcludeInterest");
-// }
-
 } // namespace chronosync
diff --git a/src/logic.hpp b/src/logic.hpp
index a71080f..b92ec38 100644
--- a/src/logic.hpp
+++ b/src/logic.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
 /*
- * Copyright (c) 2012-2018 University of California, Los Angeles
+ * Copyright (c) 2012-2019 University of California, Los Angeles
  *
  * This file is part of ChronoSync, synchronization library for distributed realtime
  * applications for NDN.
@@ -29,6 +29,8 @@
 #include "diff-state-container.hpp"
 #include "interest-table.hpp"
 
+#include <ndn-cxx/util/random.hpp>
+
 #include <boost/archive/iterators/dataflow_exception.hpp>
 #include <boost/archive/iterators/transform_width.hpp>
 #include <boost/assert.hpp>
@@ -36,7 +38,6 @@
 #include <boost/throw_exception.hpp>
 
 #include <memory>
-#include <random>
 #include <unordered_map>
 
 namespace chronosync {
@@ -509,7 +510,7 @@
   ndn::EventId m_resetInterestId;
 
   // Timer
-  std::mt19937 m_rng;
+  ndn::random::RandomNumberEngine& m_rng;
   std::uniform_int_distribution<> m_rangeUniformRandom;
   std::uniform_int_distribution<> m_reexpressionJitter;
   /// @brief Timer to send next reset 0 for no reset
