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/tools/ndncert-ca-server.cpp b/tools/ndncert-ca-server.cpp
index 566f355..a683a9f 100644
--- a/tools/ndncert-ca-server.cpp
+++ b/tools/ndncert-ca-server.cpp
@@ -72,14 +72,14 @@
     std::cerr << signalName;
   }
   std::cerr << std::endl;
-  face.getIoService().stop();
+  face.getIoContext().stop();
   exit(1);
 }
 
 static int
 main(int argc, char* argv[])
 {
-  boost::asio::signal_set terminateSignals(face.getIoService());
+  boost::asio::signal_set terminateSignals(face.getIoContext());
   terminateSignals.add(SIGINT);
   terminateSignals.add(SIGTERM);
   terminateSignals.async_wait(handleSignal);
diff --git a/tools/ndncert-client.cpp b/tools/ndncert-client.cpp
index 3c7d3de..a8f3abe 100644
--- a/tools/ndncert-client.cpp
+++ b/tools/ndncert-client.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2017-2022, Regents of the University of California.
+ * Copyright (c) 2017-2023, Regents of the University of California.
  *
  * This file is part of ndncert, a certificate management system based on NDN.
  *
@@ -186,7 +186,7 @@
             << ": DONE\nCertificate with Name: " << reply.getName()
             << " has been installed to your local keychain\n"
             << "Exit now" << std::endl;
-  face.getIoService().stop();
+  face.getIoContext().stop();
 }
 
 static void
@@ -611,14 +611,14 @@
       keyChain.deleteKey(identity, identity.getKey(newlyCreatedKeyName));
     }
   }
-  face.getIoService().stop();
+  face.getIoContext().stop();
   exit(1);
 }
 
 static int
 main(int argc, char* argv[])
 {
-  boost::asio::signal_set terminateSignals(face.getIoService());
+  boost::asio::signal_set terminateSignals(face.getIoContext());
   terminateSignals.add(SIGINT);
   terminateSignals.add(SIGTERM);
   terminateSignals.async_wait(handleSignal);
diff --git a/wscript b/wscript
index a4f9500..ec72c96 100644
--- a/wscript
+++ b/wscript
@@ -46,7 +46,7 @@
                    'For more information, see https://redmine.named-data.net/projects/nfd/wiki/Boost')
 
     if conf.env.WITH_TESTS:
-        conf.check_boost(lib='filesystem unit_test_framework', mt=True, uselib_store='BOOST_TESTS')
+        conf.check_boost(lib='unit_test_framework', mt=True, uselib_store='BOOST_TESTS')
 
     if conf.env.WITH_TOOLS:
         conf.check_boost(lib='program_options', mt=True, uselib_store='BOOST_TOOLS')
