diff --git a/install/voltha-swarm-start.sh b/install/voltha-swarm-start.sh
index ceb45b8..cbd69e3 100755
--- a/install/voltha-swarm-start.sh
+++ b/install/voltha-swarm-start.sh
@@ -1,48 +1,151 @@
 #!/bin/bash
 
-voltha_base_dir="/cord/incubator/voltha"
-hostName=`hostname`
+# Copyright 2017 the original author or authors.
+#
+# 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.
 
-docker network create --driver overlay --subnet=172.29.19.0/24 voltha_net
-#docker network create --driver overlay --subnet=172.29.19.0/24 --opt encrypted=true voltha_net
-docker stack deploy -c ${voltha_base_dir}/compose/docker-compose-kafka-cluster.yml kafka
-docker stack deploy -c ${voltha_base_dir}/compose/docker-compose-consul-cluster.yml consul
-echo "Waiting for consul to start"
-while true
-do
-	cs=`docker service ls | grep consul_consul | awk '{print $4}'`
-	if [ "$cs" == "3/3" ]; then
-		break
-	fi
+PROG=$(basename $0)
+BASE_DIR=$(pwd)
+
+GREEN='\033[32;1m'
+RED='\033[0;31m'
+YELLOW='\033[0;33m'
+WHITE='\033[1;37m'
+NC='\033[0m' # No Color
+
+usage() {
+    echo >&2 "$PROG: [-d <dir>] [-l <log-dir>] [-h]"
+    echo >&2 "  -d <dir>        directory in which the 'compose file directory' is located, defaults to '$(pwd)'"
+    echo >&2 "  -l <log-dir>    directory into which fluentd logs will be written"
+    echo >&2 "  -c <consul-dir> directory into which consul data is written"
+    echo >&2 "  -e              ensure voltha_net is encrypted"
+    echo >&2 "  -h              this message"
+}
+
+wait_for_service() {
+  while true
+  do
+      COUNT=$(docker service ls | grep $1 | awk '{print $4}')
+      if [ ! -z "$COUNT" ]; then
+          HAVE=$(echo $COUNT | cut -d/ -f1)
+          WANT=$(echo $COUNT | cut -d/ -f2)
+          if [ $WANT == $HAVE ]; then
+            break
+          fi
+      fi
+      sleep 2
+  done
+}
+
+ENCRYPT_VNET=""
+
+OPTIND=1
+while getopts d:l:c:eh OPT; do
+    case "$OPT" in
+        d) BASE_DIR="$OPTARG";;
+        l) export VOLTHA_LOGS="$OPTARG";;
+        c) export CONSUL_ROOT="$OPTARG";;
+    	e) ENCRYPT_VNET="--opt encrypted=true";;
+        h) usage;
+           exit 1;;
+        esac
 done
 
-echo "Waiting for consul leader election"
+# If `REGISTRY` is set, but doesn't end in a `/`, then
+# add one
+test -z "$REGISTRY" -o "$(echo ${REGISTRY: -1})" == "/" || REGISTRY="$REGISTRY/"
+
+# Attempt to count Ready Docker Swarm managers
+export SWARM_MANAGER_COUNT=$(docker node ls | grep Ready | egrep '(Leader)|(Reachable)' | wc -l | sed -e 's/ //g')
+hostName=$(hostname)
+
+echo -n "[network] voltha-net ... "
+if [ $(docker network ls | grep voltha_net | wc -l) -eq 0 ]; then
+    OUT=$(docker network create --driver overlay \
+        --subnet="172.29.19.0/24" \
+        $ENCRYPT_VNET voltha_net 2>&1)
+    if [ $? -ne 0 ]; then
+        echo -e "${RED}ERROR: $OUT${NC}"
+    else
+        echo -e "${GREEN}created${NC}"
+    fi
+else
+    # Verify that the current encrypted state is the desired encrypted state
+    # and if not, tear down and recreate
+    CURRENT=$(docker network inspect --format '{{.Options.encrypted}}' voltha_net | grep -v "<no value>")
+    if [ "$ENCRYPT_VNET X" != " X" -a "$CURRENT" != "true" -o "$ENCRYPT_VNET X" == " X" -a "$CURRENT" == "true" ]; then
+        echo -en "${YELLOW}delete${NC} ... "
+        docker network rm voltha_net > /dev/null || exit 1
+        OUT=$(docker network create --driver overlay \
+            --subnet="172.29.19.0/24" \
+            $ENCRYPT_VNET voltha_net 2>&1)
+        if [ $? -ne 0 ]; then
+            echo -e "${RED}ERROR: $OUT${NC}"
+        else
+           echo -e "${GREEN}created${NC}"
+        fi
+    else
+        echo -e "${WHITE}already exists${NC}"
+    fi
+fi
+
+echo -n "[network] kafka_net ... "
+if [ $(docker network ls | grep kafka_net | wc -l) -eq 0 ]; then
+    OUT=$(docker network create --driver overlay --opt encrypted kafka_net 2>&1)
+    if [ $? -ne 0 ]; then
+        echo -e "${RED}ERROR: $OUT${NC}"
+    else
+        echo -e "${GREEN}created${NC}"
+    fi
+else
+    echo -e "${WHITE}already exists${NC}"
+fi
+
+docker stack deploy -c $BASE_DIR/compose/docker-compose-kafka-cluster.yml kafka
+docker stack deploy -c $BASE_DIR/compose/docker-compose-consul-cluster.yml consul
+echo -n "Waiting for consul to start ... "
+wait_for_service consul_consul
+echo -e "${GREEN}done${NC}"
+
+echo -n "Waiting for consul leader election ... "
 patience=10
 while true
 do
-	leader=`curl -v http://${hostName}:8500/v1/status/leader 2>/dev/null | sed -e 's/"//g'`
-	if [ ! -z "$leader" ] ; then
-		echo "Leader elected is on ${leader}"
-		break
-	fi
-	sleep 10
-	patience=`expr $patience - 1`
-	if [ $patience -eq 0 ]; then
-		echo "Consul leader election taking too long... aborting"
-		./voltha-swarm-stop.sh
-		exit 1
-	fi
+        leader=`curl -v http://${hostName}:8500/v1/status/leader 2>/dev/null | sed -e 's/"//g'`
+        if [ ! -z "$leader" ] ; then
+                echo -e "${GREEN}Leader elected is on ${leader}${NC}"
+                break
+        fi
+        sleep 10
+        patience=`expr $patience - 1`
+        if [ $patience -eq 0 ]; then
+                echo -e "${RED}Consul leader election taking too long... aborting${NC}"
+                echo "Stopping VOLTHA ... "
+                ./voltha-swarm-stop.sh
+                exit 1
+        fi
 done
 
+docker stack deploy -c $BASE_DIR/compose/docker-compose-fluentd-agg-cluster.yml fluentd
 
-docker stack deploy -c ${voltha_base_dir}/compose/docker-compose-fluentd-agg-cluster.yml fluentd
+echo -n "Waiting for fluentd aggregation services to start ... "
+wait_for_service fluentd_fluentdstby
+wait_for_service fluentd_fluentdactv
+echo -e "${GREEN}done${NC}"
 sleep 2
-docker stack deploy -c ${voltha_base_dir}/compose/docker-compose-fluentd-cluster.yml fluentd
-docker stack deploy -c ${voltha_base_dir}/compose/docker-compose-onos-swarm.yml onos
-docker stack deploy -c ${voltha_base_dir}/compose/docker-compose-voltha-swarm.yml vcore
-docker stack deploy -c ${voltha_base_dir}/compose/docker-compose-ofagent-swarm.yml ofagent
-docker stack deploy -c ${voltha_base_dir}/compose/docker-compose-envoy-swarm.yml voltha
-docker stack deploy -c ${voltha_base_dir}/compose/docker-compose-vcli.yml cli
-docker stack deploy -c ${voltha_base_dir}/compose/docker-compose-netconf-swarm.yml netconf
-docker service create -d --name tools --network voltha_net  --network kafka_net --publish "4022:22" voltha/tools
 
+
+TMP_STACK_FILE=$(mktemp -u)
+cat $BASE_DIR/compose/docker-compose-all.yml.j2 2>&1 | docker run -e SWARM_MANAGER_COUNT=$SWARM_MANAGER_COUNT --rm -i voltha/j2 - 2>&1 > $TMP_STACK_FILE
+docker stack deploy -c $TMP_STACK_FILE voltha
+rm -f $TMP_STACK_FILE
