diff --git a/.jenkins.d/README.md b/.jenkins.d/README.md
index 41812aa..39fa40b 100644
--- a/.jenkins.d/README.md
+++ b/.jenkins.d/README.md
@@ -13,13 +13,13 @@
 
   * `[OS_TYPE]`: `Linux`
   * `[DISTRO_TYPE]`: `Ubuntu`
-  * `[DISTRO_VERSION]`: `Ubuntu-14.04`, `Ubuntu-16.04`
+  * `[DISTRO_VERSION]`: `Ubuntu-16.04`, `Ubuntu-18.04`
 
   Possible values for OS X / macOS:
 
   * `[OS_TYPE]`: `OSX`
   * `[DISTRO_TYPE]`: `OSX` (can be absent)
-  * `[DISTRO_VERSION]`: `OSX-10.10`, `OSX-10.11`, `OSX-10.12`
+  * `[DISTRO_VERSION]`: `OSX-10.11`, `OSX-10.12`, `OSX-10.13`
 
 - `JOB_NAME`: optional variable to define type of the job.  Depending on the defined job type,
   the build scripts can perform different tasks.
diff --git a/.travis.yml b/.travis.yml
index 61c1139..984e8ac 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,6 @@
+language: cpp
+dist: xenial
 sudo: required
-language: generic
 env:
   global:
     - JOB_NAME=limited-build
@@ -8,150 +9,87 @@
 matrix:
   include:
     # Linux/gcc
+    # https://launchpad.net/~ubuntu-toolchain-r/+archive/ubuntu/test/+packages
     - os: linux
-      dist: trusty
-      env:
-        - CXX=g++-4.8
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
-        - BUILD_WITH_ASAN=yes
+      env: COMPILER=g++-5
     - os: linux
-      dist: trusty
-      addons:
-        apt:
-          sources: ubuntu-toolchain-r-test
-          packages: g++-4.9
-      env:
-        - CXX=g++-4.9
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
-        - BUILD_WITH_ASAN=yes
+      env: COMPILER=g++-6
     - os: linux
-      dist: trusty
-      addons:
-        apt:
-          sources: ubuntu-toolchain-r-test
-          packages: g++-5
-      env:
-        - CXX=g++-5
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
-        - BUILD_WITH_ASAN=yes
+      env: COMPILER=g++-7
     - os: linux
-      dist: trusty
-      addons:
-        apt:
-          sources: ubuntu-toolchain-r-test
-          packages: g++-6
-      env:
-        - CXX=g++-6
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
-        - BUILD_WITH_ASAN=yes
-    - os: linux
-      dist: trusty
-      addons:
-        apt:
-          sources: ubuntu-toolchain-r-test
-          packages: g++-7
-      env:
-        - CXX=g++-7
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
-        - BUILD_WITH_ASAN=yes
+      env: COMPILER=g++-8
 
     # Linux/clang
+    # https://apt.llvm.org/
     - os: linux
-      dist: trusty
-      addons:
-        apt:
-          packages: clang-3.5
-      env:
-        - CXX=clang++-3.5
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
-        - BUILD_WITH_ASAN=yes
+      env: COMPILER=clang++-3.5
     - os: linux
-      dist: trusty
-      addons:
-        apt:
-          packages: clang-3.6
-      env:
-        - CXX=clang++-3.6
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
-        - BUILD_WITH_ASAN=yes
+      env: COMPILER=clang++-3.6
     - os: linux
-      dist: trusty
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-precise-3.7
-            - ubuntu-toolchain-r-test
-          packages: clang-3.7
-      env:
-        - CXX=clang++-3.7
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
+      env: COMPILER=clang++-3.7 DISABLE_ASAN=yes
     - os: linux
-      dist: trusty
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-precise-3.8
-            - ubuntu-toolchain-r-test
-          packages: clang-3.8
-      env:
-        - CXX=clang++-3.8
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
-        - BUILD_WITH_ASAN=yes
+      env: COMPILER=clang++-3.8
     - os: linux
-      dist: trusty
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-trusty-3.9
-            - ubuntu-toolchain-r-test
-          packages: clang-3.9
-      env:
-        - CXX=clang++-3.9
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
+      env: COMPILER=clang++-3.9
     - os: linux
-      dist: trusty
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-trusty-4.0
-            - ubuntu-toolchain-r-test
-          packages: clang-4.0
-      env:
-        - CXX=clang++-4.0
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
-        - BUILD_WITH_ASAN=yes
+      env: COMPILER=clang++-4.0
     - os: linux
-      dist: trusty
-      addons:
-        apt:
-          sources:
-            - llvm-toolchain-trusty-5.0
-            - ubuntu-toolchain-r-test
-          packages: clang-5.0
-      env:
-        - CXX=clang++-5.0
-        - NODE_LABELS="Linux Ubuntu Ubuntu-14.04"
-        - BUILD_WITH_ASAN=yes
+      env: COMPILER=clang++-5.0
+    - os: linux
+      env: COMPILER=clang++-6.0
+    - os: linux
+      env: COMPILER=clang++-7
 
     # macOS/clang
-    # https://docs.travis-ci.com/user/osx-ci-environment/#OS-X-Version
+    # https://docs.travis-ci.com/user/reference/osx/#OS-X-Version
     - os: osx
       osx_image: xcode7.3
-      env:
-        - NODE_LABELS="OSX OSX-10.11"
-        - BUILD_WITH_ASAN=yes
+      env: OSX_VERSION=10.11
     - os: osx
       osx_image: xcode8.3
-      env:
-        - NODE_LABELS="OSX OSX-10.12"
-        - BUILD_WITH_ASAN=yes
+      env: OSX_VERSION=10.12
     - os: osx
-      osx_image: xcode9
-      env:
-        - NODE_LABELS="OSX OSX-10.12"
-        - BUILD_WITH_ASAN=yes
+      osx_image: xcode9.3
+      env: OSX_VERSION=10.13
+
+  allow_failures:
+    - env: COMPILER=g++-6
+    - env: COMPILER=g++-7
+    - env: COMPILER=g++-8
+    - env: COMPILER=clang++-3.5
+    - env: COMPILER=clang++-3.6
+    - env: COMPILER=clang++-3.7 DISABLE_ASAN=yes
+    - env: COMPILER=clang++-3.8
+    - env: COMPILER=clang++-3.9
+    - env: COMPILER=clang++-4.0
+    - env: COMPILER=clang++-5.0
+    - env: COMPILER=clang++-6.0
+    - env: COMPILER=clang++-7
+
+  fast_finish: true
+
+install: |
+    case ${COMPILER} in
+      g++-[6789])
+        travis_retry sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
+        travis_retry sudo apt-get -qq update
+        travis_retry sudo apt-get -qy install "${COMPILER}"
+        ;;
+      clang++-*)
+        CLANG_VERSION=${COMPILER/clang++}
+        if [[ ${CLANG_VERSION} != "-3."* ]]; then
+          wget -O - "https://apt.llvm.org/llvm-snapshot.gpg.key" | sudo apt-key add -
+          travis_retry sudo add-apt-repository -y "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial${CLANG_VERSION/-7} main"
+        fi
+        travis_retry sudo apt-get -qq update
+        travis_retry sudo apt-get -qy install "clang${CLANG_VERSION}"
+        ;;
+    esac
 
 before_script:
+  - if [[ ${TRAVIS_OS_NAME} == linux ]]; then export NODE_LABELS="Linux Ubuntu Ubuntu-16.04"; fi
+  - if [[ ${TRAVIS_OS_NAME} == osx ]]; then export NODE_LABELS="OSX OSX-${OSX_VERSION}"; fi
+  - if [[ -n ${COMPILER} ]]; then export CXX=${COMPILER}; fi
   - ${CXX:-c++} --version
   - python --version
 
diff --git a/.waf-tools/default-compiler-flags.py b/.waf-tools/default-compiler-flags.py
index 54db7ea..e690290 100644
--- a/.waf-tools/default-compiler-flags.py
+++ b/.waf-tools/default-compiler-flags.py
@@ -15,14 +15,14 @@
     errmsg = ''
     warnmsg = ''
     if cxx == 'gcc':
-        if ccver < (4, 8, 2):
+        if ccver < (5, 3, 0):
             errmsg = ('The version of gcc you are using is too old.\n'
-                      'The minimum supported gcc version is 4.8.2.')
+                      'The minimum supported gcc version is 5.3.0.')
         conf.flags = GccFlags()
     elif cxx == 'clang':
-        if ccver < (3, 4, 0):
+        if ccver < (3, 5, 0):
             errmsg = ('The version of clang you are using is too old.\n'
-                      'The minimum supported clang version is 3.4.0.')
+                      'The minimum supported clang version is 3.5.0.')
         conf.flags = ClangFlags()
     else:
         warnmsg = 'Note: %s compiler is unsupported' % cxx
@@ -39,7 +39,7 @@
 
     conf.areCustomCxxflagsPresent = (len(conf.env.CXXFLAGS) > 0)
 
-    # General flags are always applied (e.g., selecting C++11 mode)
+    # General flags are always applied (e.g., selecting C++ language standard)
     generalFlags = conf.flags.getGeneralFlags(conf)
     conf.add_supported_cxxflags(generalFlags['CXXFLAGS'])
     conf.add_supported_linkflags(generalFlags['LINKFLAGS'])
@@ -128,7 +128,7 @@
     """
     def getGeneralFlags(self, conf):
         flags = super(GccBasicFlags, self).getGeneralFlags(conf)
-        flags['CXXFLAGS'] += ['-std=c++11']
+        flags['CXXFLAGS'] += ['-std=c++14']
         return flags
 
     def getDebugFlags(self, conf):
@@ -164,16 +164,12 @@
 class GccFlags(GccBasicFlags):
     def getDebugFlags(self, conf):
         flags = super(GccFlags, self).getDebugFlags(conf)
-        if self.getCompilerVersion(conf) < (5, 1, 0):
-            flags['CXXFLAGS'] += ['-Wno-missing-field-initializers']
-        flags['CXXFLAGS'] += ['-fdiagnostics-color'] # gcc >= 4.9
+        flags['CXXFLAGS'] += ['-fdiagnostics-color']
         return flags
 
     def getOptimizedFlags(self, conf):
         flags = super(GccFlags, self).getOptimizedFlags(conf)
-        if self.getCompilerVersion(conf) < (5, 1, 0):
-            flags['CXXFLAGS'] += ['-Wno-missing-field-initializers']
-        flags['CXXFLAGS'] += ['-fdiagnostics-color'] # gcc >= 4.9
+        flags['CXXFLAGS'] += ['-fdiagnostics-color']
         return flags
 
 class ClangFlags(GccBasicFlags):
diff --git a/common.hpp b/common.hpp
index 57ed667..d59fa9c 100644
--- a/common.hpp
+++ b/common.hpp
@@ -60,29 +60,20 @@
 #include <boost/foreach.hpp>
 #include <boost/lexical_cast.hpp>
 #include <boost/noncopyable.hpp>
-#include <boost/property_tree/ptree.hpp>
-#include <boost/scoped_ptr.hpp>
-#include <boost/tuple/tuple.hpp>
 
 namespace chronosync {
 
 using std::size_t;
 
 using boost::noncopyable;
-using boost::scoped_ptr;
 
 using std::bind;
-using std::const_pointer_cast;
 using std::cref;
-using std::dynamic_pointer_cast;
-using std::enable_shared_from_this;
 using std::function;
 using std::make_shared;
 using std::make_tuple;
 using std::ref;
 using std::shared_ptr;
-using std::static_pointer_cast;
-using std::weak_ptr;
 
 using ndn::Block;
 using ndn::ConstBufferPtr;
diff --git a/wscript b/wscript
index fa2864b..e40914f 100644
--- a/wscript
+++ b/wscript
@@ -140,7 +140,7 @@
             else:
                 # no tags matched
                 Context.g_module.VERSION = '%s-commit-%s' % (VERSION_BASE, out)
-    except subprocess.CalledProcessError:
+    except (OSError, subprocess.CalledProcessError):
         pass
 
     versionFile = ctx.path.find_node('VERSION')
