diff --git a/.gitignore b/.gitignore
index 8656b01..fd9cc76 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,5 @@
 onos-apps
 pkg
 src
+install.log
+*.swp
diff --git a/README.md b/README.md
index 510b310..63dc796 100644
--- a/README.md
+++ b/README.md
@@ -36,14 +36,21 @@
 export TYPE=minimal
 ```
 
+## TL;DR
+OK, if you really don't care how it starts and you just wanted started. After
+cloning the repository and making sure you have Go and Docker available, just
+execute `./voltha up` and the minimal cluster should start.
+
+To remove voltha use `./voltha down`
+
 ## Create Kubernetes Cluster
 Kind provides a command line control tool to easily create Kubernetes clusters
 using just a basic Docker envionrment. The following commands will create
 the desired deployment of Kubernetes and then configure your local copy of 
 `kubectl` to connect to this cluster.
 ```bash
-kind create cluster --config $TYPE-cluster.cfg
-export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
+kind create cluster --name=voltha-$TYPE --config $TYPE-cluster.cfg 
+export KUBECONFIG="$(kind get kubeconfig-path --name="voltha-$TYPE")"
 kubectl cluster-info
 ```
 
@@ -94,6 +101,37 @@
 etcd-operator-etcd-operator-etcd-restore-operator-7d77d878wwcn7   1/1       Running   0          2m
 ```
 
+## It is not just VOLTHA
+To demonstrate the capability of VOLTHA other _partner_ applications are
+required, such as ONOS. The followins sections describe how to install and
+configure these _partner_ applications.
+
+_NOTE: It is important to start ONOS before VOLTHA as if they are started in
+the reverse order ofagent sometimes does not connect to the SDN controller
+[VOL-1764](https://jira.opencord.org/browse/VOL-1764)_.
+
+### ONOS (OpenFlow Controller)
+VOLTHA exposes an OLT and its connected ONUs as an OpenFlow switch. To control
+that virtual OpenFlow switch an OpenFlow controller is required. For most VOLTHA
+deployments that controller is ONOS with a set of ONOS applications installed.
+To install ONOS use the following Helm command:
+```bash
+helm install -f $TYPE-values.yaml --name onos onf/onos
+```
+
+#### Exposing ONOS Services
+```bash
+screen -dmS onos-ui kubectl port-forward service/onos-ui 8181:8181
+screen -dmS onos-ssh kubectl port-forward service/onos-ssh 8101:8101
+```
+
+#### Installing and Configuring ONOS Applications
+A script has been included, `install-onos-applications.sh`, that can be used
+to download and install the required applications into ONOS.
+```bash
+./onos-files/install-onos-applications.sh
+```
+
 ## Install VOLTHA Core
 VOLTHA has two main _parts_: core and adapters. The **core** provides the main
 logic for the VOLTHA application and the **adapters** contain logic to adapter
@@ -147,6 +185,7 @@
 services cannot be reached. 
 ```bash
 screen -dmS voltha-api kubectl port-forward -n voltha service/voltha-api 55555:55555
+screen -dmS voltha-ssh kubectl port-forward -n voltha service/voltha-cli 5022:5022
 ```
 
 ## It is not just VOLTHA
@@ -220,7 +259,8 @@
 ```
 
 _NOTE: If the device fails to create and an error message is displayed you may
-have hit an existing bug in onos. To work around this, use the
+have hit an existing bug in onos
+[VOL-1661](https://jira.opencord.org/browse/VOL-1661) . To work around this, use the
 `restart-api.sh` included in the repository. After running this script you will
 have to quit and restart the screen sesssion associated with the voltha-api._
 
@@ -331,8 +371,8 @@
 
 ## Teardown
 To remove the cluster simply use the `kind` command:
-```
-kind delete cluster
+```bash
+kind delete cluster --name=voltha-$TYPE
 ```
 
 ## WIP
diff --git a/voltha b/voltha
new file mode 100755
index 0000000..70659c6
--- /dev/null
+++ b/voltha
@@ -0,0 +1,372 @@
+#!/usr/bin/env bash
+# Copyright 2019 Ciena Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# trap ctrl-c and call ctrl_c()
+trap ctrl_c INT
+
+function ctrl_c() {
+    tput cnorm
+    echo ""
+    echo "ctrl-c trapped"
+    echo "Thank you for trying 'votlha up'"
+    exit
+}
+
+if [ $# -ne 1 -o $(echo ":up:down:" | grep -c ":$1:") -ne 1 ]; then 
+    >&2 echo "up or down?"
+    exit 1
+fi
+
+if [ "$1" == "down" ]; then
+    exec kind delete cluster --name voltha-$TYPE
+    exit 
+fi
+
+LOG="install.log"
+date > $LOG
+
+spin() {
+    START=14852225
+    END=14852287
+    IDX=$START
+    tput civis
+    while true; do
+       printf '%02x' $IDX | xxd -r -p
+       echo -en "  $IDX"
+       IDX=$(expr $IDX + 1)
+       if [ $IDX -gt $END ]; then
+           IDX=$START
+       fi
+       sleep .15 
+       echo -en "\r"
+    done
+}
+
+IDX=14852225
+NOT_VERIFIED="\xe2\x9c\x97"
+VERIFIED="\xe2\x9c\x93"
+bspin() {
+    tput civis
+    IDX=14852225
+    local INDENT=
+    if [ "$1" == "-" ]; then
+        INDENT="  "
+        shift
+    fi
+    echo -en "$INDENT  $*"
+}
+
+sspin() {
+    local INDENT=
+    if [ "$1" == "-" ]; then
+        INDENT="  "
+        shift
+    fi
+    echo -en "\r$INDENT"
+    printf " %02x" $IDX | xxd -r -p
+    echo -en " $*"
+    IDX=$(expr $IDX + 1)
+    if [ $IDX -gt 14852287 ]; then
+        IDX=14852225
+    fi
+}
+
+espin() {
+    local INDENT=
+    if [ "$1" == "-" ]; then
+        INDENT="  "
+        shift
+    fi
+    echo -e "\r$INDENT$*"
+    tput cnorm
+}
+
+count_pods() {
+    local NAMESPACE=$1; shift
+    local PODS=$(kubectl -n $NAMESPACE get pod -o go-template="{{range .items}}{{.metadata.name}}/{{.status.phase}}/_{{range .status.containerStatuses}}{{.ready}}_{{end}} {{end}}")
+    local COUNT=0
+    local PATTERNS=$*
+    for POD in $PODS; do
+        local NAME=$(echo $POD | cut -d/ -f 1)
+        local STATE=$(echo $POD | cut -d/ -f 2)
+        local CONTAINERS=$(echo $POD | cut -d/ -f 3 | sed -e 's/_/ /g')
+        if [ "$STATE" == "Running" ]; then
+            local TOTAL=$(echo $CONTAINERS | wc -w)
+            local FOUND=$(echo $CONTAINERS | grep -o true | wc -l)
+            if [ $TOTAL -eq $FOUND ]; then
+                for PATTERN in $PATTERNS; do
+                    if [[ $NAME =~ $PATTERN ]]; then
+                        COUNT=$(expr $COUNT + 1)
+                    fi
+                done
+            fi
+        fi
+    done
+    echo $COUNT
+}
+
+wait_for_pods() {
+    local INDENT=
+    if [ "$1" == "-" ]; then
+        INDENT=$1; shift
+    fi
+    local NAMESPACE=$1; shift
+    local EXPECT=$1; shift
+    local RETRY=$1; shift
+    local MESSAGE=$1; shift
+    local PATTERNS=$*
+    local HAVE=$(count_pods $NAMESPACE $PATTERNS)
+    COUNT=$(expr 300 / 15)
+    bspin $INDENT $MESSAGE
+    sspin $INDENT
+    if [ $HAVE -ne $EXPECT ]; then
+        while [ $HAVE -ne $EXPECT ]; do
+            sspin $INDENT
+            COUNT=$(expr $COUNT - 1)
+            if [ $COUNT -eq 0 ]; then
+                HAVE=$(count_pods $NAMESPACE $PATTERNS)
+                COUNT=$(expr 300 / 15)
+            fi
+            sleep .15
+        done
+    fi
+    espin $INDENT $VERIFIED
+    if [ $HAVE -ne $EXPECT ]; then
+        return 1
+    fi
+    return 0
+}
+
+helm_install() { 
+    local INDENT=
+    if [ "$1" == "-" ]; then
+        INDENT=$1; shift
+    fi
+    local NAMESPACE=$1; shift
+    local NAME=$1; shift
+    local CHART=$1; shift
+    local MESSAGE=$*
+
+    COUNT=$(expr 300 / 15)
+    bspin $INDENT $MESSAGE
+    (set -x; helm install -f $TYPE-values.yaml --namespace $NAMESPACE --name $NAME $CHART >>$LOG 2>&1) >>$LOG 2>&1
+    SUCCESS=$?
+    while [ $SUCCESS -ne 0 ]; do
+        sspin $INDENT
+        COUNT=$(expr $COUNT - 1)
+        if [ $COUNT -eq 0 ]; then
+            (set -x; helm install -f $TYPE-values.yaml --namespace $NAMESPACE --name $NAME $CHART >>$LOG 2>&1) >>$LOG 2>&1
+            COUNT=$(expr 300 / 15)
+        fi
+        sleep .15
+    done
+    espin $INDENT $VERIFIED
+}
+
+TYPE=${TYPE:-minimal}
+
+# Only minimal cluster works in this script currently
+TYPE=minimal
+echo "INSTALL TYPE: $TYPE" >> $LOG
+
+bspin "Verify GOPATH"
+export GOPATH=$(pwd)
+espin $VERIFIED
+
+bspin "Verify Kubernetes/Kind"
+if [ -x ./bin/kind ]; then
+    espin $VERIFIED
+else
+    espin $NOT_VERIFIED
+    bspin - "Download and build Kubernetes/Kind"
+    (set -x; rm -rf $GOPATH/go.mod $GOPATH/go.sum >>$LOG 2>&1) >>$LOG 2>&1
+    (set -x; GO111MODULE="on" go get sigs.k8s.io/kind@v0.4.0 >>$LOG 2>&1) >>$LOG 2>&1
+    espin - $VERIFIED
+fi
+
+bspin "Verify Helm"
+if [ -x ./bin/helm ]; then
+    espin $VERIFIED
+else
+    espin $NOT_VERIFIED
+    bspin - "Download and install Helm"
+    (set -x; rm -rf $GOPATH/go.mod $GOPATH/go.sum >>$LOG 2>&1) >>$LOG 2>&1
+    (set -x; curl -L https://git.io/get_helm.sh | HELM_INSTALL_DIR=$(go env GOPATH)/bin bash >>$LOG 2>&1) >>$LOG 2>&1
+    espin - $VERIFIED
+fi
+
+bspin "Verify voltctl"
+if [ -x ./bin/voltctl ]; then
+    espin $VERIFIED
+else
+    espin $NOT_VERIFIED
+    bspin - "Download and build voltctl"
+    (set -x; rm -rf $GOPATH/go.mod $GOPATH/go.sum >>$LOG 2>&1) >>$LOG 2>&1
+    (set -x; go get github.com/ciena/voltctl/cmd/voltctl >>$LOG 2>&1) >>$LOG 2>&1
+    espin - $VERIFIED
+fi
+
+bspin "Verify command PATH"
+export PATH=$(go env GOPATH)/bin:$PATH
+espin $VERIFIED
+exit
+
+HAVE=$(kind get clusters | grep -c voltha-$TYPE)
+bspin "Verify Kubernetes/Kind Cluster"
+sspin
+if [ $HAVE -eq 0 ]; then
+  espin $NOT_VERIFIED
+  kind create cluster --name voltha-$TYPE --config $TYPE-cluster.cfg
+else
+  espin $VERIFIED
+fi
+
+export KUBECONFIG="$(kind get kubeconfig-path --name="voltha-$TYPE")"
+P="coredns-.* \
+    etcd-voltha-$TYPE-control-plane \
+    kindnet-.* \
+    kube-apiserver-voltha-$TYPE-control-plane \
+    kube-controller-manager-voltha-$TYPE-control-plane \
+    kube-proxy-.* \
+    kube-scheduler-voltha-$TYPE-control-plane"
+
+wait_for_pods - "kube-system" 12 -1 "Waiting for system PODs to start..." $P
+
+COUNT=$(count_pods "kube-system" "tiller-deploy-.*")
+bspin "Verify Helm"
+if [ $(count_pods "kube-system" "tiller-deploy-.*") -ne 1 ]; then
+    espin $NOT_VERIFIED
+    echo Configuring" Helm ..."
+    bspin - "Initialize Helm"
+    (set -x; helm init --upgrade >>$LOG 2>&1) >>$LOG 2>&1
+    espin - $VERIFIED
+    bspin - "Add Google Incubator repository to Helm ..."
+    (set -x; helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com >>$LOG 2>&1) >>$LOG 2>&1
+    espin - $VERIFIED
+
+    bspin - "Add Google Stable repository to Helm ..."
+    (set -x; helm repo add stable https://kubernetes-charts.storage.googleapis.com >>$LOG 2>&1) >>$LOG 2>&1
+    espin - $VERIFIED
+    bspin - "Add ONF repository to Helm ..."
+    (set -x; helm repo add onf https://charts.opencord.org >>$LOG 2>&1) >>$LOG 2>&1
+    espin - $VERIFIED
+    bspin - "Update Helm repository cache ..."
+    (set -x; helm repo update >>$LOG 2>&1) >>$LOG 2>&1
+    espin - $VERIFIED
+    
+    # Create and k8s service account so that Helm can create pods
+    bspin - "Create Tiller ServiceAccount ..."
+    (set -x; kubectl create serviceaccount --namespace kube-system tiller >>$LOG 2>&1) >>$LOG 2>&1
+    espin - $VERIFIED
+    bspin - "Create Tiller ClusterRoleBinding ..."
+    (set -x; kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller >>$LOG 2>&1) >>$LOG 2>&1
+    espin - $VERIFIED
+    bspin - "Update Tiller Manifest ..."
+    (set -x; kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}' >>$LOG 2>&1) >>$LOG 2>&1
+    espin - $VERIFIED
+else
+    espin $VERIFIED
+fi
+wait_for_pods - "kube-system" 1 -1 "Waiting for Tiller POD to start..." "tiller-deploy-.*"
+
+bspin "Verify ETCD Operator"
+if [ $(helm list etcd-operator | grep -c DEPLOYED) -ne 1 ]; then
+    espin $NOT_VERIFIED 
+    helm_install - voltha etcd-operator stable/etcd-operator "Install ETCD Operator"
+else
+    espin $VERIFIED
+fi
+wait_for_pods - "voltha" 1 -1 "Waiting for ETCD Operator to start..." "etcd-operator-.*"
+
+bspin "Verify ONOS installed"
+if [ $(helm list onos | grep -c DEPLOYED) -ne 1 ]; then
+    espin $NOT_VERIFIED
+    helm_install - default onos onf/onos "Install ONOS"
+else
+    espin $VERIFIED
+fi
+wait_for_pods - "default" 1 -1 "Waiting for ONOS to start..." "onos-.*"
+
+bspin - "Forward ONOS API port"
+(set -x; screen -p 0 -X -S onos-ui  stuff $'\003' >>$LOG 2>&1) >>$LOG 2>&1
+(set -x; screen -dmS onos-ui kubectl port-forward service/onos-ui 8181:8181 >>$LOG 2>&1) >>$LOG 2>&1
+espin - $VERIFIED
+bspin - "Forward ONOS SSH port"
+(set -x; screen -p 0 -X -S onos-ssh  stuff $'\003' >>$LOG 2>&1) >>$LOG 2>&1
+(set -x; screen -dmS onos-ssh kubectl port-forward service/onos-ssh 8101:8101 >>$LOG 2>&1) >>$LOG 2>&1
+espin - $VERIFIED
+bspin - "Install required ONOS applications"
+(set -x; ./onos-files/install-onos-applications.sh >>$LOG 2>&1) >>$LOG 2>&1
+espin - $VERIFIED
+
+bspin "Verify VOLTHA installed"
+if [ $(helm list voltha | grep -c DEPLOYED) -ne 1 ]; then
+    espin $NOT_VERIFIED
+    helm_install - voltha voltha onf/voltha "Install VOLTHA"
+else
+    espin $VERIFIED
+fi
+VOLTHA="ofagent-.* \
+    ro-core.* \
+    rw-core.* \
+    voltha-api-server-.* \
+    voltha-cli-server-.* \
+    voltha-etcd-cluster-.* \
+    voltha-kafka-.* \
+    voltha-zookeeper-.*"
+wait_for_pods - "voltha" 9 -1 "Waiting for VOLTHA CORE top start..." $VOLTHA
+
+echo "Verify Adapters"
+bspin - "Verify Simulated Adapters installed"
+if [ $(helm list sim | grep -c DEPLOYED) -ne 1 ]; then
+    espin - $NOT_VERIFIED
+    helm_install - voltha sim onf/voltha-adapter-simulated "Install Simulated Adapters"
+else
+    espin - $VERIFIED
+fi
+
+bspin - "Verify OpenOLT Adapter installed"
+if [ $(helm list open-olt | grep -c DEPLOYED) -ne 1 ]; then
+    espin - $NOT_VERIFIED
+    helm_install - voltha open-olt onf/voltha-adapter-openolt "Install OpenOLT Adapter"
+else
+    espin - $VERIFIED
+fi
+bspin - "Verify OpenONU Adapter installed"
+if [ $(helm list open-onu | grep -c DEPLOYED) -ne 1 ]; then
+    espin - $NOT_VERIFIED
+    helm_install - voltha open-onu onf/voltha-adapter-openonu "Install OpenONU Adapter"
+else
+    espin - $VERIFIED
+fi
+
+ADAPTERS="adapter-.*"
+wait_for_pods - "voltha" 4 -1 "Waiting for adapters to start..." $ADAPTERS
+
+echo "Restart VOLTHA API"
+API="voltha-api-server-.* ofagent-.*"
+(set -x; kubectl scale --replicas=0 deployment -n voltha voltha-api-server ofagent >>$LOG 2>&1) >>$LOG 2>&1
+wait_for_pods - "voltha" 0 -1 "Wait for API to stop" $API
+(set -x; kubectl scale --replicas=1 deployment -n voltha voltha-api-server ofagent >>$LOG 2>&1) >>$LOG 2>&1
+wait_for_pods - "voltha" 2 -1 "Wait for API to re-start ..." $API
+
+bspin - "Forward VOLTHA API port"
+(set -x; screen -p 0 -X -S voltha-api  stuff $'\003' >>$LOG 2>&1) >>$LOG 2>&1
+(set -x; screen -dmS voltha-api kubectl port-forward -n voltha service/voltha-api 55555:55555 >>$LOG 2>&1) >>$LOG 2>&1
+espin - $VERIFIED
+bspin - "Forward VOLTHA SSH port"
+(set -x; screen -p 0 -X -S voltha-ssh  stuff $'\003' 2>/dev/null >/dev/null >>$LOG 2>&1) >>$LOG 2>&1
+(set -x; screen -dmS voltha-ssh kubectl port-forward -n voltha service/voltha-cli 5022:5022 >>$LOG 2>&1) >>$LOG 2>&1
+espin - $VERIFIED
