diff --git a/examples/wscript b/examples/wscript
index 8f9faed..ad0cef9 100644
--- a/examples/wscript
+++ b/examples/wscript
@@ -3,11 +3,11 @@
 top = '..'
 
 def build(bld):
+    # List all .cpp files (whole example in one .cpp)
     for ex in bld.path.ant_glob('*.cpp'):
         name = ex.change_ext('').path_from(bld.path.get_bld())
-        bld.program(name='example-%s' % name,
+        bld.program(name=f'example-{name}',
                     target=name,
                     source=[ex],
                     use='NDN_CXX',
-                    includes='../src',
                     install_path=None)
diff --git a/tests/wscript b/tests/wscript
index 399409e..1ca51c0 100644
--- a/tests/wscript
+++ b/tests/wscript
@@ -5,16 +5,16 @@
 def build(bld):
     bld.objects(target='tests-base',
                 source=bld.path.ant_glob('*.cpp'),
-                use='repo-objects')
+                use='BOOST_TESTS repo-objects')
 
     bld.program(name='unit-tests',
-                target='../unit-tests',
+                target=f'{top}/unit-tests',
                 source=bld.path.ant_glob('unit/**/*.cpp'),
                 use='tests-base',
                 install_path=None)
 
     bld.program(name='integrated-tests',
-                target='../integrated-tests',
+                target=f'{top}/integrated-tests',
                 source=bld.path.ant_glob('integrated/**/*.cpp'),
                 use='tests-base',
                 install_path=None)
diff --git a/tools/ndnputfile.cpp b/tools/ndnputfile.cpp
index bed681a..04e85ee 100644
--- a/tools/ndnputfile.cpp
+++ b/tools/ndnputfile.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022, Regents of the University of California.
+ * Copyright (c) 2014-2023, Regents of the University of California.
  *
  * This file is part of NDN repo-ng (Next generation of NDN repository).
  * See AUTHORS.md for complete list of repo-ng authors and contributors.
@@ -17,8 +17,8 @@
  * repo-ng, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "../src/repo-command-parameter.hpp"
-#include "../src/repo-command-response.hpp"
+#include "repo-command-parameter.hpp"
+#include "repo-command-response.hpp"
 
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/security/interest-signer.hpp>
diff --git a/tools/repo-ng-ls.cpp b/tools/repo-ng-ls.cpp
index e1a8281..1ce8f2e 100644
--- a/tools/repo-ng-ls.cpp
+++ b/tools/repo-ng-ls.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2019, Regents of the University of California.
+ * Copyright (c) 2014-2023, Regents of the University of California.
  *
  * This file is part of NDN repo-ng (Next generation of NDN repository).
  * See AUTHORS.md for complete list of repo-ng authors and contributors.
@@ -17,7 +17,7 @@
  * repo-ng, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "../src/common.hpp"
+#include "common.hpp"
 
 #include <iostream>
 #include <string>
diff --git a/tools/wscript b/tools/wscript
index 8fe7229..a4f1dbe 100644
--- a/tools/wscript
+++ b/tools/wscript
@@ -6,6 +6,6 @@
     for tool in bld.path.ant_glob('*.cpp'):
         name = tool.change_ext('').path_from(bld.path.get_bld())
         bld.program(name=name,
-                    target='../bin/%s' % name,
+                    target=f'{top}/bin/{name}',
                     source=[tool],
-                    use='repo-objects')
+                    use='BOOST_TOOLS repo-objects')
diff --git a/wscript b/wscript
index 524e9de..8a4d2d4 100644
--- a/wscript
+++ b/wscript
@@ -1,7 +1,7 @@
 # -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
 
-from waflib import Utils
 import os
+from waflib import Utils
 
 VERSION = '0.1'
 APPNAME = 'ndn-repo-ng'
@@ -39,11 +39,13 @@
 
     conf.check_sqlite3()
 
-    boost_libs = ['system', 'program_options', 'filesystem', 'iostreams']
-    if conf.env.WITH_TESTS:
-        boost_libs.append('unit_test_framework')
+    conf.check_boost(lib='filesystem program_options', mt=True)
 
-    conf.check_boost(lib=boost_libs, mt=True)
+    if conf.env.WITH_TESTS:
+        conf.check_boost(lib='unit_test_framework', mt=True, uselib_store='BOOST_TESTS')
+
+    if conf.env.WITH_TOOLS:
+        conf.check_boost(lib='iostreams', mt=True, uselib_store='BOOST_TOOLS')
 
     conf.check_compiler_flags()
 
@@ -53,35 +55,37 @@
 
     conf.define_cond('HAVE_TESTS', conf.env.WITH_TESTS)
     conf.define_cond('DISABLE_SQLITE3_FS_LOCKING', not conf.options.with_sqlite_locking)
-    conf.define('DEFAULT_CONFIG_FILE', '%s/ndn/repo-ng.conf' % conf.env.SYSCONFDIR)
+    conf.define('DEFAULT_CONFIG_FILE', f'{conf.env.SYSCONFDIR}/ndn/repo-ng.conf')
     conf.write_config_header('src/config.hpp')
 
 def build(bld):
-    bld.objects(target='repo-objects',
-                source=bld.path.ant_glob('src/**/*.cpp',
-                                         excl=['src/main.cpp']),
-                use='NDN_CXX BOOST SQLITE3',
-                includes='src',
-                export_includes='src')
+    bld.objects(
+        target='repo-objects',
+        source=bld.path.ant_glob('src/**/*.cpp', excl=['src/main.cpp']),
+        use='BOOST NDN_CXX SQLITE3',
+        includes='src',
+        export_includes='src')
 
-    bld.program(name='ndn-repo-ng',
-                target='bin/ndn-repo-ng',
-                source='src/main.cpp',
-                use='repo-objects')
-
-    if bld.env.WITH_TOOLS:
-        bld.recurse('tools')
+    bld.program(
+        name='ndn-repo-ng',
+        target='bin/ndn-repo-ng',
+        source='src/main.cpp',
+        use='repo-objects')
 
     if bld.env.WITH_TESTS:
         bld.recurse('tests')
 
+    if bld.env.WITH_TOOLS:
+        bld.recurse('tools')
+
     if bld.env.WITH_EXAMPLES:
         bld.recurse('examples')
 
+    # Install sample config
     bld.install_files('${SYSCONFDIR}/ndn', 'repo-ng.conf.sample')
 
     if Utils.unversioned_sys_platform() == 'linux':
         bld(features='subst',
-            name='repo-ng.service',
+            name='systemd-units',
             source='systemd/repo-ng.service.in',
             target='systemd/repo-ng.service')
