diff --git a/tools/tox_install.sh b/tools/tox_install.sh
index 3de10be75..c09d81872 100755
--- a/tools/tox_install.sh
+++ b/tools/tox_install.sh
@@ -16,6 +16,7 @@
 ZUUL_CLONER=/usr/zuul-env/bin/zuul-cloner
 BRANCH_NAME=master
 neutron_installed=$(echo "import neutron" | python 2>/dev/null ; echo $?)
+NEUTRON_DIR=$HOME/neutron
 
 set -e
 set -x
@@ -23,7 +24,17 @@ set -x
 install_cmd="pip install -c$1"
 shift
 
-if [ $neutron_installed -eq 0 ]; then
+# The devstack based functional tests have neutron checked out in
+# $NEUTRON_DIR on the test systems - with the change to test in it.
+# Use this directory if it exists, so that this script installs the
+# neutron version to test here.
+# Note that the functional tests use sudo to run tox and thus
+# variables used for zuul-cloner to check out the correct version are
+# lost.
+if [ -d "$NEUTRON_DIR" ]; then
+    echo "FOUND Neutron code at $NEUTRON_DIR - using"
+    $install_cmd -U -e $NEUTRON_DIR
+elif [ $neutron_installed -eq 0 ]; then
     echo "ALREADY INSTALLED" > /tmp/tox_install.txt
     location=$(python -c "import neutron; print(neutron.__file__)")
     echo "ALREADY INSTALLED at $location"
@@ -33,7 +44,7 @@ elif [ -x "$ZUUL_CLONER" ]; then
     echo "ZUUL CLONER" > /tmp/tox_install.txt
     # Make this relative to current working directory so that
     # git clean can remove it. We cannot remove the directory directly
-    # since it is reference after $install_cmd -e.
+    # since it is referenced after $install_cmd -e.
     mkdir -p .tmp
     NEUTRON_DIR=$(/bin/mktemp -d -p $(pwd)/.tmp)
     pushd $NEUTRON_DIR