diff --git a/scripts/bootstrap_ansible.sh b/scripts/bootstrap_ansible.sh
index 6c7db5b..2f1b4b5 100755
--- a/scripts/bootstrap_ansible.sh
+++ b/scripts/bootstrap_ansible.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 #
 # Copyright 2012 the original author or authors.
 #
@@ -17,8 +17,8 @@
 
 set -e
 
-echo "Installing Ansible..."
-apt-get install -y software-properties-common python-netaddr apt-transport-https 
+echo "Installing Ansible using APT (PPA)..."
+apt-get install -y software-properties-common python-netaddr apt-transport-https
 apt-add-repository ppa:ansible/ansible
 apt-get update
 apt-get install -y ansible
diff --git a/scripts/cord-in-a-box.sh b/scripts/cord-in-a-box.sh
index 17e3b65..09b29fd 100755
--- a/scripts/cord-in-a-box.sh
+++ b/scripts/cord-in-a-box.sh
@@ -1,15 +1,21 @@
 #!/usr/bin/env bash
+# cord-in-a-box.sh
 
 set -e -x
 
+# start time, used to name logfiles
+START_T=$(date -u "+%Y%m%d_%H%M%SZ")
+
+# Paths
 CORDDIR=~/cord
 VMDIR=/cord/build/
 CONFIG=config/cord_in_a_box.yml
 SSHCONFIG=~/.ssh/config
+VAGRANT_CWD=${CORDDIR}/build/targets/cord-in-a-box
 
-# For CORD version
+# CORD versioning
 REPO_BRANCH="master"
-VERSION_STRING="CiaB development version"
+VERSION_STRING="CiaB Devel"
 
 function finish {
     EXIT=$?
@@ -40,7 +46,9 @@
   then
     echo "Destroying all Vagrant VMs"
     cd $CORDDIR/build
-    for i in `seq 12`; do sudo su $USER -c 'vagrant destroy' && break; done
+    for i in `seq 12`; do
+      sudo VAGRANT_CWD=$VAGRANT_CWD vagrant destroy && break
+    done
   fi
 
   echo "Removing $CORDDIR"
@@ -49,39 +57,65 @@
 }
 
 function bootstrap() {
+
   echo "Generating build id"
   rm -f /tmp/cord-build-version
-
   dd bs=18 count=1 if=/dev/urandom | base64 | tr +/ _. > /tmp/cord-build
-  cd ~
-  sudo apt-get update
-  [ -e vagrant_1.8.5_x86_64.deb ] || wget https://releases.hashicorp.com/vagrant/1.8.5/vagrant_1.8.5_x86_64.deb
-  dpkg -l vagrant || sudo dpkg -i vagrant_1.8.5_x86_64.deb
-  sudo apt-get -y install qemu-kvm libvirt-bin libvirt-dev curl nfs-kernel-server git build-essential python-pip
-  sudo pip install pyparsing python-logstash mixpanel
 
+  if [ ! -x "/usr/local/bin/repo" ]
+  then
+    echo "Installing repo..."
+    REPO_SHA256SUM="e147f0392686c40cfd7d5e6f332c6ee74c4eab4d24e2694b3b0a0c037bf51dc5" # not versioned...
+    curl -o /tmp/repo https://storage.googleapis.com/git-repo-downloads/repo
+    echo "$REPO_SHA256SUM  /tmp/repo" | sha256sum -c -
+    sudo mv /tmp/repo /usr/local/bin/repo
+    sudo chmod a+x /usr/local/bin/repo
+  fi
+
+  if [ ! -x "/usr/bin/vagrant" ]
+  then
+    echo "Installing vagrant and associated tools..."
+    VAGRANT_SHA256SUM="faff6befacc7eed3978b4b71f0dbb9c135c01d8a4d13236bda2f9ed53482d2c4"  # version 1.9.3
+    curl -o /tmp/vagrant.deb https://releases.hashicorp.com/vagrant/1.9.3/vagrant_1.9.3_x86_64.deb
+    echo "$VAGRANT_SHA256SUM  /tmp/vagrant.deb" | sha256sum -c -
+    sudo apt-get update
+    sudo dpkg -i /tmp/vagrant.deb
+    sudo apt-get -y install qemu-kvm libvirt-bin libvirt-dev curl nfs-kernel-server git build-essential python-pip
+    sudo adduser $USER libvirtd
+    sudo pip install pyparsing python-logstash mixpanel
+  fi
+
+  echo "Installing vagrant plugins..."
+  vagrant plugin list | grep vagrant-libvirt || vagrant plugin install vagrant-libvirt --plugin-version 0.0.35
+  vagrant plugin list | grep vagrant-mutate || vagrant plugin install vagrant-mutate
+
+  add_box ubuntu/trusty64
+
+  echo "Creating SSH key..."
   [ -e ~/.ssh/id_rsa ] || ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
 
-  sudo adduser $USER libvirtd
-
-  sudo curl -o /usr/local/bin/repo https://storage.googleapis.com/git-repo-downloads/repo
-  sudo chmod a+x /usr/local/bin/repo
-
   if [ ! -d "$CORDDIR" ]
   then
+    echo "Downloading CORD/XOS..."
+
+    if [ ! -e "~/.gitconfig" ]
+    then
+      echo "No ~/.gitconfig, setting testing defaults"
+      git config --global user.name 'Test User'
+      git config --global user.email 'test@null.com'
+      git config --global color.ui false
+    fi
+
+    # make sure we can find gerrit.opencord.org as DNS failures will fail the build
+    dig +short gerrit.opencord.org || (echo "ERROR: gerrit.opencord.org can't be looked up in DNS" && exit 1)
+
     mkdir $CORDDIR && cd $CORDDIR
-
-
-    git config --global user.name 'Test User'
-    git config --global user.email 'test@null.com'
-    git config --global color.ui false
-
-    repo init -u https://gerrit.opencord.org/manifest -b $REPO_BRANCH -g build,onos,orchestration,voltha
+    repo init -u https://gerrit.opencord.org/manifest -b master -g build,onos,orchestration,voltha
     repo sync
 
     # check out gerrit branches using repo
     for gerrit_branch in ${GERRIT_BRANCHES[@]}; do
-      echo "checking out opencord gerrit branch: $gerrit_branch"
+      echo "Checking out opencord gerrit branch: $gerrit_branch"
       repo download ${gerrit_branch/:/ }
     done
   fi
@@ -89,11 +123,6 @@
   exec > >(tee -i $CORDDIR/install.out)
   exec 2>&1
 
-  cd $CORDDIR/build
-  vagrant plugin list | grep vagrant-libvirt || vagrant plugin install vagrant-libvirt --plugin-version 0.0.35
-  vagrant plugin list | grep vagrant-mutate || vagrant plugin install vagrant-mutate
-  add_box ubuntu/trusty64
-
   # Start tracking failures from this point
   trap finish EXIT
 
@@ -158,13 +187,17 @@
 }
 
 function vagrant_vms_up() {
+
+  echo "Bringing up CORD-in-a-Box Vagrant VM's..."
   cd $CORDDIR/build
 
-  sudo su $USER -c 'vagrant up corddev prod --provider libvirt'
+  sudo VAGRANT_CWD=$VAGRANT_CWD vagrant up corddev prod --provider libvirt
 
   # This is a workaround for a weird issue with ARP cache timeout breaking 'vagrant ssh'
   # It allows SSH'ing to the machine via 'ssh corddev'
-  sudo su $USER -c "vagrant ssh-config corddev prod > $SSHCONFIG"
+  sudo VAGRANT_CWD=$VAGRANT_CWD vagrant ssh-config corddev prod > $SSHCONFIG
+
+  sudo chown -R ${USER} ${VAGRANT_CWD}/.vagrant
 
   scp ~/.ssh/id_rsa* corddev:.ssh
   ssh corddev "chmod go-r ~/.ssh/id_rsa"
@@ -209,10 +242,10 @@
 
   if [[ $FABRIC -ne 0 ]]
   then
-      sudo su $USER -c "FABRIC=$FABRIC vagrant up leaf-1 leaf-2 spine-1 spine-2 --provider libvirt"
+      sudo VAGRANT_CWD=$VAGRANT_CWD FABRIC=$FABRIC vagrant up leaf-1 leaf-2 spine-1 spine-2 --provider libvirt
   else
       # Linux bridging seems to be having issues with two spine switches
-      sudo su $USER -c "FABRIC=$FABRIC vagrant up leaf-1 leaf-2 spine-1 --provider libvirt"
+      sudo VAGRANT_CWD=$VAGRANT_CWD FABRIC=$FABRIC vagrant up leaf-1 leaf-2 spine-1 --provider libvirt
   fi
 
   # Turn off MAC learning on "links" -- i.e., bridges created by libvirt.
@@ -234,7 +267,7 @@
   echo add_compute_node: $1 $2
 
   cd $CORDDIR/build
-  sudo su $USER -c "vagrant up $1 --provider libvirt"
+  sudo VAGRANT_CWD=$VAGRANT_CWD vagrant up $1 --provider libvirt
 
   # Set up power cycling for the compute node and wait for it to be provisioned
   ssh prod "cd /cord/build/ansible; ansible-playbook maas-provision.yml --extra-vars \"maas_user=maas vagrant_name=$2\""
@@ -347,7 +380,7 @@
 for i in `seq 1 $NUM_COMPUTE_NODES`;
 do
    echo adding the compute node: compute-node-$i
-   add_compute_node compute-node-$i build_compute-node-$i
+   add_compute_node compute-node-$i cord-in-a-box_compute-node-$i
 done
 echo "==> Adding compute nodes: Complete"
 
diff --git a/scripts/opencloud-in-a-box.sh b/scripts/opencloud-in-a-box.sh
new file mode 100755
index 0000000..ee2bd5d
--- /dev/null
+++ b/scripts/opencloud-in-a-box.sh
@@ -0,0 +1,244 @@
+#!/usr/bin/env bash
+# opencloud-in-a-box.sh
+
+set -e -x
+
+# start time, used to name logfiles
+START_T=$(date -u "+%Y%m%d_%H%M%SZ")
+
+# Paths
+CORDDIR=~/cord
+CONFIG=${CORDDIR}/config/opencloud_in_a_box.yml
+SSHCONFIG=~/.ssh/config
+VAGRANT_CWD=${CORDDIR}/build/targets/opencloud-in-a-box
+
+# CORD versioning
+REPO_BRANCH="master"
+VERSION_STRING="OpenCloud Devel"
+
+function add_box() {
+  echo "Downloading image: $1"
+  vagrant box list | grep $1 | grep virtualbox || vagrant box add $1
+  vagrant box list | grep $1 | grep libvirt || vagrant mutate $1 libvirt --input-provider virtualbox
+}
+
+function run_stage {
+    echo "==> "$1": Starting"
+    $1
+    echo "==> "$1": Complete"
+}
+
+function cleanup_from_previous_test() {
+  echo "## Cleanup ##"
+
+  if [ -d $CORDDIR/build ]
+  then
+    echo "Destroying all Vagrant VMs"
+    cd $CORDDIR/build
+    sudo VAGRANT_CWD=$VAGRANT_CWD vagrant destroy
+  fi
+
+  echo "Removing $CORDDIR"
+  cd ~
+  rm -rf $CORDDIR
+}
+
+function bootstrap() {
+
+  if [ ! -x "/usr/bin/ansible" ]
+  then
+    echo "Installing Ansible..."
+    sudo apt-get update
+    sudo apt-get install -y software-properties-common apt-transport-https
+    sudo apt-add-repository -y ppa:ansible/ansible  # latest supported version
+    sudo apt-get update
+    sudo apt-get install -y ansible python-netaddr
+  fi
+
+  if [ ! -x "/usr/local/bin/repo" ]
+  then
+    echo "Installing repo..."
+    REPO_SHA256SUM="e147f0392686c40cfd7d5e6f332c6ee74c4eab4d24e2694b3b0a0c037bf51dc5" # not versioned...
+    curl -o /tmp/repo https://storage.googleapis.com/git-repo-downloads/repo
+    echo "$REPO_SHA256SUM  /tmp/repo" | sha256sum -c -
+    sudo mv /tmp/repo /usr/local/bin/repo
+    sudo chmod a+x /usr/local/bin/repo
+  fi
+
+  if [ ! -x "/usr/bin/vagrant" ]
+  then
+    echo "Installing vagrant and associated tools..."
+    VAGRANT_SHA256SUM="52ebd6aa798582681d0f1e008982c709136eeccd668a8e8be4d48a1f632de7b8"  # version 1.9.2
+    curl -o /tmp/vagrant.deb https://releases.hashicorp.com/vagrant/1.9.2/vagrant_1.9.2_x86_64.deb
+    echo "$VAGRANT_SHA256SUM  /tmp/vagrant.deb" | sha256sum -c -
+    sudo dpkg -i /tmp/vagrant.deb
+    sudo apt-get -y install qemu-kvm libvirt-bin libvirt-dev curl nfs-kernel-server git build-essential python-pip
+    sudo adduser $USER libvirtd
+    sudo pip install pyparsing python-logstash
+
+    run_stage cloudlab_setup
+
+    echo "Installing vagrant plugins..."
+    vagrant plugin list | grep vagrant-libvirt || vagrant plugin install vagrant-libvirt --plugin-version 0.0.35
+    vagrant plugin list | grep vagrant-mutate || vagrant plugin install vagrant-mutate
+
+    add_box ubuntu/trusty64
+  fi
+
+  if [ ! -d "$CORDDIR" ]
+  then
+    echo "Downloading CORD/XOS..."
+
+    if [ ! -e "~/.gitconfig" ]
+    then
+      echo "No ~/.gitconfig, setting testing defaults"
+      git config --global user.name 'Test User'
+      git config --global user.email 'test@null.com'
+      git config --global color.ui false
+    fi
+
+    # make sure we can find gerrit.opencord.org as DNS failures will fail the build
+    dig +short gerrit.opencord.org || (echo "ERROR: gerrit.opencord.org can't be looked up in DNS" && exit 1)
+
+    mkdir $CORDDIR && cd $CORDDIR
+    repo init -u https://gerrit.opencord.org/manifest -b master -g build,onos,orchestration,voltha
+    repo sync
+
+    # check out gerrit branches using repo
+    for gerrit_branch in ${GERRIT_BRANCHES[@]}; do
+      echo "Checking out opencord gerrit branch: $gerrit_branch"
+      repo download ${gerrit_branch/:/ }
+    done
+  fi
+}
+
+function cloudlab_setup() {
+
+  # Don't do anything if not a CloudLab node
+  [ ! -d /usr/local/etc/emulab ] && return
+
+  # The watchdog will sometimes reset groups, turn it off
+  if [ -e /usr/local/etc/emulab/watchdog ]
+  then
+    sudo /usr/bin/perl -w /usr/local/etc/emulab/watchdog stop
+    sudo mv /usr/local/etc/emulab/watchdog /usr/local/etc/emulab/watchdog-disabled
+  fi
+
+  # Mount extra space, if haven't already
+  if [ ! -d /mnt/extra ]
+  then
+    sudo mkdir -p /mnt/extra
+
+    # for NVME SSD on Utah Cloudlab, not supported by mkextrafs
+    if $(df | grep -q nvme0n1p1) && [ -e /usr/testbed/bin/mkextrafs ]
+    then
+      # set partition type of 4th partition to Linux, ignore errors
+      echo -e "t\n4\n82\np\nw\nq" | sudo fdisk /dev/nvme0n1 || true
+
+      sudo mkfs.ext4 /dev/nvme0n1p4
+      echo "/dev/nvme0n1p4 /mnt/extra/ ext4 defaults 0 0" | sudo tee -a /etc/fstab
+      sudo mount /mnt/extra
+      mount | grep nvme0n1p4 || (echo "ERROR: NVME mkfs/mount failed, exiting!" && exit 1)
+
+    elif [ -e /usr/testbed/bin/mkextrafs ]  # if on Clemson/Wisconsin Cloudlab
+    then
+      # Sometimes this command fails on the first try
+      sudo /usr/testbed/bin/mkextrafs -r /dev/sdb -qf "/mnt/extra/" || sudo /usr/testbed/bin/mkextrafs -r /dev/sdb -qf "/mnt/extra/"
+
+      # Check that the mount succeeded (sometimes mkextrafs succeeds but device not mounted)
+      mount | grep sdb || (echo "ERROR: mkextrafs failed, exiting!" && exit 1)
+    fi
+  fi
+
+  # replace /var/lib/libvirt/images with a symlink
+  [ -d /var/lib/libvirt/images/ ] && [ ! -h /var/lib/libvirt/images ] && sudo rmdir /var/lib/libvirt/images
+  sudo mkdir -p /mnt/extra/libvirt_images
+
+  if [ ! -e /var/lib/libvirt/images ]
+  then
+    sudo ln -s /mnt/extra/libvirt_images /var/lib/libvirt/images
+  fi
+}
+
+function vagrant_vms_up() {
+
+  # vagrant-libvirt 0.0.35 fails with libvirt networks created by others
+  # echo "Configuring libvirt networking..."
+  # cd ${CORDDIR}/build/ansible
+  # ansible-playbook opencloud-in-a-box-playbook.yml
+
+  echo "Bringing up OpenCloud-in-a-Box Vagrant VM's..."
+  cd $CORDDIR/build
+  sudo VAGRANT_CWD=$VAGRANT_CWD vagrant up head1 compute1 compute2 --provider libvirt
+
+  # This is a workaround for a weird issue with ARP cache timeout breaking 'vagrant ssh'
+  # It allows SSH'ing to the machine via 'ssh <machinename>'
+  echo "Configuring SSH for VM's..."
+  sudo VAGRANT_CWD=$VAGRANT_CWD vagrant ssh-config head1 compute1 compute2 > $SSHCONFIG
+
+  sudo chown -R ${USER} ${VAGRANT_CWD}/.vagrant
+}
+
+function opencloud_buildhost_prep() {
+
+  echo "Preparing build tools..."
+  cd ${CORDDIR}/build/platform-install
+  ansible-playbook -i inventory/opencloud opencloud-prep-playbook.yml
+}
+
+# Parse options
+GERRIT_BRANCHES=
+RUN_TEST=0
+SETUP_ONLY=0
+CLEANUP=0
+
+while getopts "b:chsv" opt; do
+  case ${opt} in
+    b ) GERRIT_BRANCHES+=("$OPTARG")
+      ;;
+    c ) CLEANUP=1
+      ;;
+    h ) echo "Usage:"
+      echo "    $0                install OpenCloud-in-a-Box [default]"
+      echo "    $0 -b <project:changeset/revision>  checkout a changesets from gerrit. Can"
+      echo "                      be used multiple times."
+      echo "    $0 -c             cleanup from previous test"
+      echo "    $0 -h             display this help message"
+      echo "    $0 -s             run initial setup phase only (don't start building CORD)"
+      echo "    $0 -v             print CiaB version and exit"
+      exit 0
+      ;;
+    s ) SETUP_ONLY=1
+      ;;
+    v ) echo "$VERSION_STRING ($REPO_BRANCH branch)"
+      exit 0
+      ;;
+    \? ) echo "Invalid option: -$OPTARG"
+      exit 1
+      ;;
+  esac
+done
+
+# What to do
+if [[ $CLEANUP -eq 1 ]]
+then
+  run_stage cleanup_from_previous_test
+fi
+
+echo ""
+echo "Preparing to install $VERSION_STRING ($REPO_BRANCH branch)"
+echo ""
+
+run_stage bootstrap
+
+
+if [[ $SETUP_ONLY -ne 0 ]]
+then
+  echo "Finished build environment setup, exiting..."
+  exit 0
+fi
+
+run_stage vagrant_vms_up
+run_stage opencloud_buildhost_prep
+
+exit 0
