diff --git a/install/voltha-swarm-stop.sh b/install/voltha-swarm-stop.sh
index 8aca489..ebb4aea 100755
--- a/install/voltha-swarm-stop.sh
+++ b/install/voltha-swarm-stop.sh
@@ -1,13 +1,124 @@
 #!/bin/bash
 
-docker service rm netconf_netconf
-docker service rm cli_cli
-docker service rm voltha_voltha
-docker service rm ofagent_ofagent
-docker service rm vcore_vcore
-docker service rm tools
-docker stack rm consul
-docker stack rm kafka
-docker stack rm fluentd
-docker stack rm onos
-docker network rm voltha_net
+# 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.
+
+PROG=$(basename $0)
+BASE_DIR=$(pwd)
+
+GREEN='\033[32;1m'
+RED='\033[0;31m'
+WHITE='\033[1;37m'
+NC='\033[0m' # No Color
+
+SERVICES=""
+STACKS="consul kafka fluentd voltha"
+NETWORKS="voltha_net kafka_net"
+
+usage() {
+    echo >&2 "$PROG: [-d <dir>] [-l <log-dir>] [-h]"
+    echo >&2 "  -z              zero out the consul data"
+    echo >&2 "  -h              this message"
+}
+
+VOLUME_CLEANUP=0
+
+OPTIND=1
+while getopts d:l:c:zh OPT; do
+    case "$OPT" in
+        z) VOLUME_CLEANUP=1;;
+        c) export CONSUL_ROOT="$OPTARG";;
+        h) usage;
+           exit 1;;
+        esac
+done
+
+for s in $SERVICES; do
+    echo -n "[service] $s ... "
+    if [ $(docker service ls | grep $s | wc -l) -ne 0 ]; then
+        OUT=$(docker service rm $s 2>&1)
+        if [ $? -eq 0 ]; then
+            echo -e "${GREEN}removed${NC}"
+        else
+            echo -e "${RED}ERROR: $OUT${NC}"
+        fi
+    else
+        echo -e "${WHITE}not running${NC}"
+    fi
+done
+
+for s in $STACKS; do
+    echo -n "[stack] $s ... "
+    if [ $(docker stack ls | grep $s | wc -l) -ne 0 ]; then
+        OUT=$(docker stack rm $s 2>&1)
+        if [ $? -eq 0 ]; then
+            echo -e "${GREEN}removed${NC}"
+        else
+            echo -e "${RED}ERROR: $OUT${NC}"
+        fi
+    else
+        echo -e "${WHITE}not running${NC}"
+    fi
+done
+
+for n in $NETWORKS; do
+    echo -n "[network] $n ... "
+    if [ $(docker network ls | grep $n | wc -l) -ne 0 ]; then
+        OUT=$(docker network rm $n 2>&1)
+        if [ $? -eq 0 ]; then
+            echo -e "${GREEN}removed${NC}"
+        else
+            echo -e "${RED}ERROR: $OUT${NC}"
+        fi
+    else
+        echo -e "${WHITE}not running${NC}"
+    fi
+done
+
+# Attempt to count Ready Docker Swarm managers
+SWARM_MANAGER_COUNT=$(docker node ls | grep Ready | egrep '(Leader)|(Reachable)' | wc -l)
+echo -n "[volume] consul ... "
+if [ $VOLUME_CLEANUP -ne 0 ]; then
+    RUNNING=$(docker service ps volume_cleanup 2> /dev/null | wc -l)
+    if [ $RUNNING -ne 0 ]; then
+        docker service rm volume_cleanup > /dev/null
+    fi
+    docker service create --detach=true --restart-condition=none \
+    --mode=global --name=volume_cleanup \
+    --mount=type=bind,src=${CONSUL_ROOT:-/cord/incubator/voltha/consul}/data,dst=/consul/data \
+    --mount=type=bind,src=${CONSUL_ROOT:-/cord/incubator/voltha/consul}/config,dst=/consul/config \
+    alpine:latest \
+    ash -c 'rm -rf /consul/data/* /consul/config/*' > /dev/null
+
+    RETRY=10
+    while [ $RETRY -ge 0 ]; do
+        COMPLETE=$(docker service ps --filter 'desired-state=Shutdown' --format '{{.DesiredState}}' volume_cleanup | wc -l)
+        ERRORS=$(docker service ps --format '{{.Error}}' volume_cleanup  | grep -v "^$" | wc -l)
+        if [ $COMPLETE -eq $SWARM_MANAGER_COUNT ]; then
+           if [ $ERRORS -eq 0 ]; then
+               echo -e "${GREEN}data removed${NC}"
+               docker service rm volume_cleanup > /dev/null
+               break
+           else
+               echo -e "${RED}ERROR: $(docker service ps --format '{{.Error}}' volume_cleanup | awk '{printf("%s ", $0)}')${NC}"
+               exit 1
+           fi
+
+        fi
+        sleep 5
+        RETRY=$(expr $RETRY - 1)
+    done
+else
+   echo -e "${WHITE}skipped${NC}" 
+fi
