diff --git a/NOTICE b/NOTICE
index ecbd36a62b8c0e359b8bcba30c280776f1ff2dc7..8aa7a74ad8fbf49ad17348fcaca33b32b0151459 100644
--- a/NOTICE
+++ b/NOTICE
@@ -110,16 +110,6 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-bpwatch license
----------------
-
-Copyright (c) 2013 Kenneth Reitz
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 pip-pop license
 ---------------
diff --git a/bin/compile b/bin/compile
index e46316e4829bef28c315f8a2ec3b446076987196..a8bd024ef645d652b1add0b6933c1fc6f3614d6d 100755
--- a/bin/compile
+++ b/bin/compile
@@ -38,14 +38,8 @@ SETUPTOOLS_VERSION="32.1.0"
 export WARNINGS_LOG=$(mktemp)
 export RECOMMENDED_PYTHON_VERSION=$DEFAULT_PYTHON_VERSION
 
-# Setup bpwatch
-export PATH=$PATH:$ROOT_DIR/vendor/:$ROOT_DIR/vendor/bpwatch
-LOGPLEX_KEY="t.b90d9d29-5388-4908-9737-b4576af1d4ce"
-export BPWATCH_STORE_PATH=$CACHE_DIR/bpwatch.json
-BUILDPACK_VERSION=v28
-
-# Setup pip-pop (pip-diff)
-export PATH=$PATH:$ROOT_DIR/vendor/pip-pop
+# Setup vendored tools and pip-pop (pip-diff)
+export PATH=$PATH:$ROOT_DIR/vendor/:$ROOT_DIR/vendor/pip-pop
 
 # Support Anvil Build_IDs
 [ ! "$SLUG_ID" ] && SLUG_ID="defaultslug"
@@ -57,12 +51,6 @@ unset GIT_DIR PYTHONHOME PYTHONPATH
 unset RECEIVE_DATA RUN_KEY BUILD_INFO DEPLOY LOG_TOKEN DYNO
 unset CYTOKINE_LOG_FILE GEM_PATH
 
-# Setup buildpack instrumentation.
-bpwatch init $LOGPLEX_KEY
-bpwatch build python $BUILDPACK_VERSION $REQUEST_ID
-
-bpwatch start compile
-
 # Syntax sugar.
 source $BIN_DIR/utils
 
@@ -100,9 +88,7 @@ if [[ ! -f Procfile ]]; then
 fi
 
 # Experimental pre_compile hook.
-bpwatch start pre_compile
-  source $BIN_DIR/steps/hooks/pre_compile
-bpwatch stop pre_compile
+source $BIN_DIR/steps/hooks/pre_compile
 
 # Sticky runtimes.
 if [ -f $CACHE_DIR/.heroku/python-version ]; then
@@ -128,18 +114,16 @@ fi
 mkdir -p $CACHE_DIR
 
 # Restore old artifacts from the cache.
-bpwatch start restore_cache
-    mkdir -p .heroku
-
-    cp -R $CACHE_DIR/.heroku/python .heroku/ &> /dev/null || true
-    cp -R $CACHE_DIR/.heroku/python-stack .heroku/ &> /dev/null || true
-    cp -R $CACHE_DIR/.heroku/python-version .heroku/ &> /dev/null || true
-    cp -R $CACHE_DIR/.heroku/vendor .heroku/ &> /dev/null || true
-    if [[ -d $CACHE_DIR/.heroku/src ]]; then
-      cp -R $CACHE_DIR/.heroku/src .heroku/ &> /dev/null || true
-    fi
+mkdir -p .heroku
+
+cp -R $CACHE_DIR/.heroku/python .heroku/ &> /dev/null || true
+cp -R $CACHE_DIR/.heroku/python-stack .heroku/ &> /dev/null || true
+cp -R $CACHE_DIR/.heroku/python-version .heroku/ &> /dev/null || true
+cp -R $CACHE_DIR/.heroku/vendor .heroku/ &> /dev/null || true
+if [[ -d $CACHE_DIR/.heroku/src ]]; then
+  cp -R $CACHE_DIR/.heroku/src .heroku/ &> /dev/null || true
+fi
 
-bpwatch stop restore_cache
 
 mkdir -p $(dirname $PROFILE_PATH)
 mkdir -p /app/.heroku/src
@@ -214,32 +198,24 @@ set-default-env PYTHONPATH /app/
 cp $ROOT_DIR/vendor/python.gunicorn.sh $GUNICORN_PROFILE_PATH
 
 # Experimental post_compile hook.
-bpwatch start post_compile
-  source $BIN_DIR/steps/hooks/post_compile
-bpwatch stop post_compile
+source $BIN_DIR/steps/hooks/post_compile
 
 # Fix egg-links, again.
 source $BIN_DIR/steps/eggpath-fix2
 
 # Store new artifacts in cache.
-bpwatch start dump_cache
-
-  rm -rf $CACHE_DIR/.heroku/python
-  rm -rf $CACHE_DIR/.heroku/python-version
-  rm -rf $CACHE_DIR/.heroku/python-stack
-  rm -rf $CACHE_DIR/.heroku/vendor
-  rm -rf $CACHE_DIR/.heroku/src
-
-  mkdir -p $CACHE_DIR/.heroku
-  cp -R .heroku/python $CACHE_DIR/.heroku/
-  cp -R .heroku/python-version $CACHE_DIR/.heroku/
-  cp -R .heroku/python-stack $CACHE_DIR/.heroku/ &> /dev/null || true
-  cp -R .heroku/vendor $CACHE_DIR/.heroku/ &> /dev/null || true
-  if [[ -d .heroku/src ]]; then
-    cp -R .heroku/src $CACHE_DIR/.heroku/ &> /dev/null || true
-  fi
-
-bpwatch stop dump_cache
-
-# Fin.
-bpwatch stop compile
+
+rm -rf $CACHE_DIR/.heroku/python
+rm -rf $CACHE_DIR/.heroku/python-version
+rm -rf $CACHE_DIR/.heroku/python-stack
+rm -rf $CACHE_DIR/.heroku/vendor
+rm -rf $CACHE_DIR/.heroku/src
+
+mkdir -p $CACHE_DIR/.heroku
+cp -R .heroku/python $CACHE_DIR/.heroku/
+cp -R .heroku/python-version $CACHE_DIR/.heroku/
+cp -R .heroku/python-stack $CACHE_DIR/.heroku/ &> /dev/null || true
+cp -R .heroku/vendor $CACHE_DIR/.heroku/ &> /dev/null || true
+if [[ -d .heroku/src ]]; then
+  cp -R .heroku/src $CACHE_DIR/.heroku/ &> /dev/null || true
+fi
diff --git a/bin/steps/collectstatic b/bin/steps/collectstatic
index f8f63f5b9464299c164d9e1ea860d42e08dd6a07..6189a5fd486789143a1c379f54da435c2552e624 100755
--- a/bin/steps/collectstatic
+++ b/bin/steps/collectstatic
@@ -22,7 +22,6 @@ MANAGE_FILE=${MANAGE_FILE:-fakepath}
 # Ensure that Django is explicitly specified in requirements.txt
 pip-grep -s requirements.txt django Django && DJANGO_INSTALLED=1
 
-bpwatch start collectstatic  # metrics collection
 
 if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ] && [ "$DJANGO_INSTALLED" ]; then
     set +e
@@ -63,5 +62,3 @@ if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ] && [ "$DJANGO_INSTALL
 
     echo
 fi
-
-bpwatch stop collectstatic  # metrics collection
diff --git a/bin/steps/cryptography b/bin/steps/cryptography
index 3c526c3e4fbec1f08bedc8263bb01ae030f318eb..8a507999d05256b7dad9a95ea553b7b2ab7fc3c9 100755
--- a/bin/steps/cryptography
+++ b/bin/steps/cryptography
@@ -17,8 +17,6 @@ PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
 # Syntax sugar.
 source $BIN_DIR/utils
 
-bpwatch start libffi_install
-
 # If a package using cffi exists within requirements, use vendored libffi.
 if (pip-grep -s requirements.txt argon2-cffi bcrypt cffi cryptography django[argon2] Django[argon2] django[bcrypt] Django[bcrypt] PyNaCl pyOpenSSL PyOpenSSL requests[security] misaka &> /dev/null) then
 
@@ -31,5 +29,3 @@ if (pip-grep -s requirements.txt argon2-cffi bcrypt cffi cryptography django[arg
 
   export LIBFFI=$(pwd)/vendor
 fi
-
-bpwatch stop libffi_install
diff --git a/bin/steps/gdal b/bin/steps/gdal
index 39f3bd3519e8ce5050c79552a946bcbf861bced2..50a09ac331aad10a53e797b49e0d5c01250e2d8f 100755
--- a/bin/steps/gdal
+++ b/bin/steps/gdal
@@ -17,8 +17,6 @@ PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
 # Syntax sugar.
 source $BIN_DIR/utils
 
-bpwatch start gdal_install
-
 # If GDAL exists within requirements, use vendored gdal.
 if (pip-grep -s requirements.txt GDAL gdal pygdal &> /dev/null) then
 
@@ -32,4 +30,3 @@ if (pip-grep -s requirements.txt GDAL gdal pygdal &> /dev/null) then
   export GDAL=$(pwd)/vendor
 fi
 
-bpwatch stop gdal_install
diff --git a/bin/steps/geo-libs b/bin/steps/geo-libs
index f458861e8702bda851a209a6c7c6cc536d3bc32b..3240fed0cdea322863d0e181192e43ac4d8a8a61 100755
--- a/bin/steps/geo-libs
+++ b/bin/steps/geo-libs
@@ -19,8 +19,6 @@ PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
 # Syntax sugar.
 source $BIN_DIR/utils
 
-bpwatch start geo_libs_install
-
 # If GDAL exists within requirements, use vendored gdal.
 if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then
 
@@ -36,4 +34,3 @@ if [[ "$BUILD_WITH_GEO_LIBRARIES" ]]; then
   export GDAL=$(pwd)/vendor
 fi
 
-bpwatch stop geo_libs_install
diff --git a/bin/steps/mercurial b/bin/steps/mercurial
index c7d7bf117a3406a99c6376d6bb9452312b24eb4a..cd4ad707b6cd0d4acbceb2df161ab6e98e457df7 100755
--- a/bin/steps/mercurial
+++ b/bin/steps/mercurial
@@ -1,6 +1,4 @@
 # Install Mercurial if it appears to be required.
 if (grep -Fiq "hg+" requirements.txt) then
-  bpwatch start mercurial_install
     /app/.heroku/python/bin/pip install  mercurial | cleanup | indent
-  bpwatch stop mercurial_install
 fi
diff --git a/bin/steps/nltk b/bin/steps/nltk
index a8d5fdb780cc506df9e5a70c78e27e060ae8163d..ec44a4845ffe72f4317df7cedd2f1c16c21f7abc 100755
--- a/bin/steps/nltk
+++ b/bin/steps/nltk
@@ -12,8 +12,6 @@
 # Syntax sugar.
 source $BIN_DIR/utils
 
-bpwatch start nltk_download
-
 # Check that nltk was installed by pip, otherwise obviously not needed
 python -m nltk.downloader -h >/dev/null 2>&1
 if [ $? -eq 0 ]; then
@@ -29,5 +27,3 @@ if [ $? -eq 0 ]; then
     fi
 fi
 
-
-bpwatch stop nltk_download
diff --git a/bin/steps/pip-install b/bin/steps/pip-install
index 6fe6e72ee6bd5ab93da92b5b2e800c1b37fd7169..349c895805144724e6bb61a8158a11b6dd21f47a 100755
--- a/bin/steps/pip-install
+++ b/bin/steps/pip-install
@@ -1,9 +1,6 @@
 # Install dependencies with Pip.
 puts-step "Installing requirements with pip"
 
-[ ! "$FRESH_PYTHON" ] && bpwatch start pip_install
-[ "$FRESH_PYTHON" ] && bpwatch start pip_install_first
-
 set +e
 /app/.heroku/python/bin/pip install -r $BUILD_DIR/requirements.txt --exists-action=w --src=/app/.heroku/src --disable-pip-version-check --no-cache-dir 2>&1 | tee $WARNINGS_LOG | cleanup | indent
 PIP_STATUS="${PIPESTATUS[0]}"
@@ -20,7 +17,4 @@ fi
 cp requirements.txt .heroku/python/requirements-declared.txt
 /app/.heroku/python/bin/pip freeze --disable-pip-version-check > .heroku/python/requirements-installed.txt
 
-[ ! "$FRESH_PYTHON" ] && bpwatch stop pip_install
-[ "$FRESH_PYTHON" ] && bpwatch stop pip_install_first
-
 echo
diff --git a/bin/steps/pip-uninstall b/bin/steps/pip-uninstall
index 3e41d1b96466b4265272146b06724ada4c7f1668..64950c2382ca398f88f6ccbf79ccccd7e2753123 100755
--- a/bin/steps/pip-uninstall
+++ b/bin/steps/pip-uninstall
@@ -1,6 +1,6 @@
 set +e
 # Install dependencies with Pip.
-bpwatch start pip_uninstall
+
 if [[ -f .heroku/python/requirements-declared.txt ]]; then
 
   cp .heroku/python/requirements-declared.txt requirements-declared.txt
@@ -14,5 +14,5 @@ if [[ -f .heroku/python/requirements-declared.txt ]]; then
     /app/.heroku/python/bin/pip uninstall -r .heroku/python/requirements-stale.txt -y --exists-action=w | cleanup | indent
   fi
 fi
-bpwatch stop pip_uninstall
+
 set -e
diff --git a/bin/steps/pylibmc b/bin/steps/pylibmc
index 1ae691452d6b5467cec7d485fd8301cadd451d23..f574e5350b8adabc4571578767cc3d11924b89f7 100755
--- a/bin/steps/pylibmc
+++ b/bin/steps/pylibmc
@@ -16,8 +16,6 @@ VENDORED_MEMCACHED="https://lang-python.s3.amazonaws.com/$STACK/libraries/vendor
 source $BIN_DIR/utils
 
 
-bpwatch start pylibmc_install
-
 # If pylibmc exists within requirements, use vendored libmemcached.
 if (pip-grep -s requirements.txt pylibmc &> /dev/null) then
 
@@ -30,5 +28,3 @@ if (pip-grep -s requirements.txt pylibmc &> /dev/null) then
 
   export LIBMEMCACHED=$(pwd)/vendor
 fi
-
-bpwatch stop pylibmc_install
diff --git a/bin/steps/python b/bin/steps/python
index 14789dff5680bb256191a4276e948c79d18ffede..9d539be44bb551e0f761e6e7b4539fab1ae95bab 100755
--- a/bin/steps/python
+++ b/bin/steps/python
@@ -5,25 +5,20 @@ PYTHON_VERSION=$(cat runtime.txt)
 # Install Python.
 if [ -f .heroku/python-version ]; then
   if [ ! $(cat .heroku/python-version) = $PYTHON_VERSION ]; then
-    bpwatch start uninstall_python
       puts-step "Found $(cat .heroku/python-version), removing"
       rm -fr .heroku/python
-    bpwatch stop uninstall_python
   else
     SKIP_INSTALL=1
   fi
 fi
 
 if [ ! $STACK = $CACHED_PYTHON_STACK ]; then
-  bpwatch start uninstall_python
     rm -fr .heroku/python .heroku/python-stack .heroku/vendor
     unset SKIP_INSTALL
-  bpwatch stop uninstall_python
 fi
 
 
 if [ ! "$SKIP_INSTALL" ]; then
-  bpwatch start install_python
     puts-step "Installing $PYTHON_VERSION"
 
     # Prepare destination directory.
@@ -36,8 +31,6 @@ if [ ! "$SKIP_INSTALL" ]; then
       exit 1
     fi
 
-  bpwatch stop install_python
-
   # Record for future reference.
   echo $PYTHON_VERSION > .heroku/python-version
   echo $STACK > .heroku/python-stack
@@ -50,8 +43,6 @@ fi
 if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_VERSION* ]]; then
   WORKING_DIR=$(pwd)
 
-  bpwatch start prepare_environment
-
   TMPTARDIR=$(mktemp -d)
   trap "rm -rf $TMPTARDIR" RETURN
 
@@ -63,7 +54,6 @@ if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_VERSION* ]]; then
 
   /app/.heroku/python/bin/python $ROOT_DIR/vendor/get-pip.py &> /dev/null
 
-  bpwatch stop prepare_environment
 fi
 
 set -e
diff --git a/vendor/bpwatch/bpwatch b/vendor/bpwatch/bpwatch
deleted file mode 100755
index 8923f72954db564615e9cb08e21dd3a0077a2d43..0000000000000000000000000000000000000000
--- a/vendor/bpwatch/bpwatch
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/python
-
-
-import os
-import sys
-
-
-DEFAULT_PATH = '{0}.zip'.format(os.path.abspath(__file__))
-BPWATCH_DISTRO_PATH = os.environ.get('BPWATCH_DISTRO_PATH', DEFAULT_PATH)
-
-sys.path.insert(0, BPWATCH_DISTRO_PATH)
-
-import bp_cli
-bp_cli.main()
diff --git a/vendor/bpwatch/bpwatch.zip b/vendor/bpwatch/bpwatch.zip
deleted file mode 100644
index 9d34563ae481d58d9a0bb45086cb9db1c430f9da..0000000000000000000000000000000000000000
Binary files a/vendor/bpwatch/bpwatch.zip and /dev/null differ