diff --git a/bin/compile b/bin/compile
index 187c3c2b67633e7fd3654c32b3ec5b9bc4e0ec00..3e604b26ba28ce0a5bbe9e1e49a8105968731c13 100755
--- a/bin/compile
+++ b/bin/compile
@@ -30,6 +30,24 @@ PYTHON_EXE="/app/.heroku/python/bin/python"
 PIP_VERSION="1.3.1"
 DISTRIBUTE_VERSION="0.6.36"
 
+export PATH=$PATH:$ROOT_DIR/vendor/bpwatch
+
+LOGPLEX_KEY="t.b396af7f-ad75-4643-8b9e-ebb288acc624"
+BUILDPACK_VERSION=HEAD
+
+export BPWATCH_STORE_PATH=$CACHE_DIR/bpwatch.json
+
+[ ! "$REQUEST_ID" ] && REQUEST_ID=$SLUG_ID
+
+
+
+bpwatch init $LOGPLEX_KEY
+bpwatch build python $BUILDPACK_VERSION $REQUEST_ID
+TMP_APP_DIR=$CACHE_DIR/tmp_app_dir
+
+bpwatch start compile
+
+
 # Sanitizing environment variables.
 unset GIT_DIR PYTHONHOME PYTHONPATH LD_LIBRARY_PATH LIBRARY_PATH
 
@@ -44,11 +62,15 @@ APP_DIR='/app'
 TMP_APP_DIR=$CACHE_DIR/tmp_app_dir
 
 # Copy Anvil app dir to temporary storage...
+bpwatch start anvil_appdir_stage
 mkdir -p $TMP_APP_DIR
 deep-mv $APP_DIR $TMP_APP_DIR
+bpwatch stop anvil_appdir_stage
 
 # Copy Application code in.
+bpwatch start appdir_stage
 deep-mv $BUILD_DIR $APP_DIR
+bpwatch stop appdir_stage
 
 # Set new context.
 ORIG_BUILD_DIR=$BUILD_DIR
@@ -65,7 +87,9 @@ export LD_LIBRARY_PATH=/app/.heroku/vendor/lib
 cd $BUILD_DIR
 
 # Experimental pre_compile hook.
+bpwatch start pre_compile
 source $BIN_DIR/steps/hooks/pre_compile
+bpwatch stop pre_compile
 
 # If no requirements given, assume `setup.py develop`.
 if [ ! -f requirements.txt ]; then
@@ -83,13 +107,17 @@ fi
 mkdir -p $CACHE_DIR
 
 # Purge "old-style" virtualenvs.
+bpwatch start clear_old_venvs
 [ -d $CACHE_DIR/$LEGACY_TRIGGER ] && rm -fr $CACHE_DIR/.heroku/bin $CACHE_DIR/.heroku/lib $CACHE_DIR/.heroku/include
 [ -d $CACHE_DIR/$VIRTUALENV_LOC ] && rm -fr $CACHE_DIR/.heroku/venv $CACHE_DIR/.heroku/src
+bpwatch stop clear_old_venvs
 
 # Restore old artifacts from the cache.
+bpwatch start restore_cache
 for dir in $CACHED_DIRS; do
   cp -R $CACHE_DIR/$dir . &> /dev/null || true
 done
+bpwatch stop restore_cache
 
 set +e
 # Create set-aside `.heroku` folder.
@@ -104,8 +132,10 @@ 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
@@ -113,6 +143,7 @@ fi
 
 
 if [ ! "$SKIP_INSTALL" ]; then
+  bpwatch start install_python
   puts-step "Preparing Python runtime ($PYTHON_VERSION)"
   curl http://envy-versions.s3.amazonaws.com/$PYTHON_VERSION.tar.bz2 -s | tar jx &> /dev/null
   if [[ $? != 0 ]] ; then
@@ -121,6 +152,7 @@ if [ ! "$SKIP_INSTALL" ]; then
     exit 1
   fi
   mv python .heroku/python
+  bpwatch stop install_python
 
   # Record for future reference.
   echo $PYTHON_VERSION > .heroku/python-version
@@ -135,16 +167,24 @@ fi
 if [ "$FRESH_PYTHON" ] || [[ ! $(pip --version) == *$PIP_VERSION* ]]; then
   WORKING_DIR=$(pwd)
 
+  bpwatch start prepare_environment
+
+  bpwatch start install_distribute
   # Prepare it for the real world
   puts-step "Installing Distribute ($DISTRIBUTE_VERSION)"
   cd $ROOT_DIR/vendor/distribute-$DISTRIBUTE_VERSION/
   python setup.py install &> /dev/null
   cd $WORKING_DIR
+  bpwatch stop install_distribute
 
+  bpwatch start install_pip
   puts-step "Installing Pip ($PIP_VERSION)"
   cd $ROOT_DIR/vendor/pip-$PIP_VERSION/
   python setup.py install &> /dev/null
   cd $WORKING_DIR
+
+  bpwatch stop install_pip
+  bpwatch stop prepare_environment
 fi
 
 set -e
@@ -152,19 +192,33 @@ hash -r
 
 # Pylibmc support.
 # See [`bin/steps/pylibmc`](pylibmc.html).
+bpwatch start pylibmc_install
 source $BIN_DIR/steps/pylibmc
+bpwatch stop pylibmc_install
 
 # 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 --use-mirrors mercurial | cleanup | indent
+  bpwatch stop mercurial_install
 fi
 
 # Install dependencies with Pip.
 puts-step "Installing dependencies using Pip ($PIP_VERSION)"
+
+
+[ ! "$FRESH_PYTHON" ] && bpwatch start pip_install
+[ "$FRESH_PYTHON" ] && bpwatch start pip_install_first
+
 /app/.heroku/python/bin/pip install --use-mirrors -r requirements.txt --exists-action=w --src=./.heroku/src | cleanup | indent
 
+[ ! "$FRESH_PYTHON" ] && bpwatch stop pip_install
+[ "$FRESH_PYTHON" ] && bpwatch stop pip_install_first
+
 # Django collectstatic support.
+bpwatch start collectstatic
 source $BIN_DIR/steps/collectstatic
+bpwatch stop collectstatic
 
 # ### Finalize
 #
@@ -181,15 +235,25 @@ set-default-env PYTHONPATH /app/
 
 
 # Experimental post_compile hook.
+bpwatch start post_compile
 source $BIN_DIR/steps/hooks/post_compile
+bpwatch stop post_compile
 
 # Store new artifacts in cache.
+bpwatch start dump_cache
 for dir in $CACHED_DIRS; do
   rm -rf $CACHE_DIR/$dir
   cp -R $dir $CACHE_DIR/
 done
+bpwatch stop dump_cache
 
 # ### Fin.
-
+bpwatch start appdir_commit
 deep-mv $BUILD_DIR $ORIG_BUILD_DIR
+bpwatch stop appdir_commit
+
+bpwatch start anvil_appdir_commit
 deep-mv $TMP_APP_DIR $APP_DIR
+bpwatch stop anvil_appdir_commit
+
+bpwatch stop compile
diff --git a/vendor/bpwatch/bpwatch b/vendor/bpwatch/bpwatch
new file mode 100755
index 0000000000000000000000000000000000000000..40be50b042b2652d538496df46dfd2e9447a10b3
--- /dev/null
+++ b/vendor/bpwatch/bpwatch
@@ -0,0 +1,14 @@
+#!/usr/local/bin/python
+
+
+import os
+import sys
+
+
+DEFUALT_PATH = '{}.zip'.format(os.path.abspath(__file__))
+BPWATCH_DISTRO_PATH = os.environ.get('BPWATCH_DISTRO_PATH', DEFUALT_PATH)
+
+sys.path.insert(0, BPWATCH_DISTRO_PATH)
+
+import bp_cli
+bp_cli.main()
\ No newline at end of file
diff --git a/vendor/bpwatch/bpwatch.zip b/vendor/bpwatch/bpwatch.zip
new file mode 100644
index 0000000000000000000000000000000000000000..53683fb53d214cd4ad4ab9b8a5040875a2544187
Binary files /dev/null and b/vendor/bpwatch/bpwatch.zip differ