diff --git a/bin/compile b/bin/compile
index da62dcc8cbc6e56d5d5f9e8ac13665e496bcf4ec..372ad3dc7a0a0efd8d57560a41b38f02dd425ea4 100755
--- a/bin/compile
+++ b/bin/compile
@@ -20,8 +20,8 @@ CACHE_DIR=$2
 ENV_DIR=$3
 
 
-CACHED_DIR=".heroku"
-CACHED_DIRS=".heroku/python .heroku/python-stack .heroku/python-version .heroku/vendor .heroku/venv"
+CACHED_DIRS=".heroku"
+WHITELISTED_CACHE_ENTRIES="python|python-stack|python-version|venv|vendor"
 
 # Static configurations for virtualenv caches.
 VIRTUALENV_LOC=".heroku/venv"
@@ -146,15 +146,12 @@ bpwatch stop clear_old_venvs
 
 # Restore old artifacts from the cache.
 bpwatch start restore_cache
-  mkdir -p $CACHE_DIR/$CACHED_DIR
   for dir in $CACHED_DIRS; do
-    echo "cp -R $CACHE_DIR/$dir $CACHED_DIR"
-    cp -R $CACHE_DIR/$dir $CACHED_DIR &> /dev/null || true
+    cp -R $CACHE_DIR/$dir . &> /dev/null || true
   done
+  ls -1 $CACHED_DIRS | grep -E -v $WHITELISTED_CACHE_ENTRIES | xargs rm -f
 bpwatch stop restore_cache
 
-ls /app/.heroku/
-
 set +e
 # Create set-aside `.heroku` folder.
 mkdir .heroku &> /dev/null
@@ -214,10 +211,9 @@ bpwatch stop post_compile
 
 # Store new artifacts in cache.
 bpwatch start dump_cache
-  mkdir -p $CACHE_DIR/$CACHED_DIR
   for dir in $CACHED_DIRS; do
     rm -rf $CACHE_DIR/$dir
-    cp -R $dir $CACHE_DIR/ 2>/dev/null
+    cp -R $dir $CACHE_DIR/
   done
 bpwatch stop dump_cache