diff --git a/.waf-tools/default-compiler-flags.py b/.waf-tools/default-compiler-flags.py
index 4aa9e9b..bee5072 100644
--- a/.waf-tools/default-compiler-flags.py
+++ b/.waf-tools/default-compiler-flags.py
@@ -128,7 +128,11 @@
 
     def getGeneralFlags(self, conf):
         """Get dict of CXXFLAGS, LINKFLAGS, and DEFINES that are always needed"""
-        return {'CXXFLAGS': [], 'LINKFLAGS': [], 'DEFINES': []}
+        return {
+            'CXXFLAGS': [],
+            'LINKFLAGS': [],
+            'DEFINES': ['BOOST_ASIO_NO_DEPRECATED', 'BOOST_FILESYSTEM_NO_DEPRECATED'],
+        }
 
     def getDebugFlags(self, conf):
         """Get dict of CXXFLAGS, LINKFLAGS, and DEFINES that are needed only in debug mode"""
diff --git a/PSync/consumer.cpp b/PSync/consumer.cpp
index ed9fbd6..c598e82 100644
--- a/PSync/consumer.cpp
+++ b/PSync/consumer.cpp
@@ -36,7 +36,7 @@
                    ndn::time::milliseconds helloInterestLifetime,
                    ndn::time::milliseconds syncInterestLifetime)
   : m_face(face)
-  , m_scheduler(m_face.getIoService())
+  , m_scheduler(m_face.getIoContext())
   , m_syncPrefix(syncPrefix)
   , m_helloInterestPrefix(ndn::Name(m_syncPrefix).append("hello"))
   , m_syncInterestPrefix(ndn::Name(m_syncPrefix).append("sync"))
diff --git a/PSync/producer-base.cpp b/PSync/producer-base.cpp
index 10706ab..74f280d 100644
--- a/PSync/producer-base.cpp
+++ b/PSync/producer-base.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis
+ * Copyright (c) 2014-2023,  The University of Memphis
  *
  * This file is part of PSync.
  * See AUTHORS.md for complete list of PSync authors and contributors.
@@ -37,7 +37,7 @@
                            CompressionScheme contentCompression)
   : m_face(face)
   , m_keyChain(keyChain)
-  , m_scheduler(m_face.getIoService())
+  , m_scheduler(m_face.getIoContext())
   , m_rng(ndn::random::getRandomNumberEngine())
   , m_iblt(expectedNumEntries, ibltCompression)
   , m_segmentPublisher(m_face, m_keyChain)
diff --git a/PSync/segment-publisher.cpp b/PSync/segment-publisher.cpp
index ed20646..de2aac7 100644
--- a/PSync/segment-publisher.cpp
+++ b/PSync/segment-publisher.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis
+ * Copyright (c) 2014-2023,  The University of Memphis
  *
  * This file is part of PSync.
  * See AUTHORS.md for complete list of PSync authors and contributors.
@@ -24,7 +24,7 @@
 SegmentPublisher::SegmentPublisher(ndn::Face& face, ndn::KeyChain& keyChain,
                                    const ndn::security::SigningInfo& signingInfo, size_t imsLimit)
   : m_face(face)
-  , m_scheduler(m_face.getIoService())
+  , m_scheduler(m_face.getIoContext())
   , m_segmenter(keyChain, signingInfo)
   , m_ims(imsLimit)
 {
diff --git a/examples/full-sync.cpp b/examples/full-sync.cpp
index 29d5311..12fd909 100644
--- a/examples/full-sync.cpp
+++ b/examples/full-sync.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis
+ * Copyright (c) 2014-2023,  The University of Memphis
  *
  * This file is part of PSync.
  * See AUTHORS.md for complete list of PSync authors and contributors.
@@ -91,7 +91,7 @@
 private:
   ndn::Face m_face;
   ndn::KeyChain m_keyChain;
-  ndn::Scheduler m_scheduler{m_face.getIoService()};
+  ndn::Scheduler m_scheduler{m_face.getIoContext()};
 
   psync::FullProducer m_producer;
   uint64_t m_maxNumPublish;
diff --git a/examples/producer.cpp b/examples/producer.cpp
index 05ca842..a19b468 100644
--- a/examples/producer.cpp
+++ b/examples/producer.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis
+ * Copyright (c) 2014-2023,  The University of Memphis
  *
  * This file is part of PSync.
  * See AUTHORS.md for complete list of PSync authors and contributors.
@@ -82,7 +82,7 @@
 private:
   ndn::Face m_face;
   ndn::KeyChain m_keyChain;
-  ndn::Scheduler m_scheduler{m_face.getIoService()};
+  ndn::Scheduler m_scheduler{m_face.getIoContext()};
 
   psync::PartialProducer m_producer;
   uint64_t m_maxNumPublish;
