diff --git a/checkMirrorsUtility/checkMirrors.sh b/checkMirrorsUtility/checkMirrors.sh
new file mode 100755
index 0000000..8455a46
--- /dev/null
+++ b/checkMirrorsUtility/checkMirrors.sh
@@ -0,0 +1,221 @@
+#!/usr/bin/env bash
+#*******************************************************************************
+# Copyright (c) 2009-2016 Eclipse Foundation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     David Williams - initial implementation
+#*******************************************************************************
+
+# Simple script to count number of mirrors available for a particular URL
+#
+# To be useful, this script must be downloaded to "local" machine, so it accesses eclipse.org
+# from outside eclipse.org. (Mirrors are not suggested, when running on build.eclipse.org.)
+# Also, to be useful, most will want to change the list of default URLs to check, in your local copy.
+
+
+function usage()
+{
+  printf "\n\t%s\n" "Simple script to count number of mirrors available for a particular URL" >&2
+  printf "\t%s\n"   "Usage: $(basename $0) [-h] | [-v] [-f] [-p] [-t number] [urls]"  >&2
+  printf "\t\t%s\t%s\n" "-h" "help" >&2
+  printf "\t\t%s\t%s\n" "-v" "verbose" >&2
+  printf "\t\t%s\t%s\n" "-f" "ftp only" >&2
+  printf "\t\t%s\t%s\n" "-p" "http only" >&2
+  printf "\t\t%s\t%s\n" "-b" "both ftp and http (default)" >&2
+  printf "\t\t%s\t%s\n" "-l" "list mirrors (saved in mirrorsList.txt) " >&2
+  printf "\t\t%s\t%s\n" "-t n" "test against number n" >&2
+  printf "\t\t%s\t%s\n"  "urls" "space delimited list of URI parameters such as /releases/galileo/" >&2
+  printf "\n"
+}
+
+function checkMirrorsForURL()
+{
+
+  if [ -z $1 ]
+  then
+    echo "Error: internal funtion requires mirror url parameter";
+    exit 3;
+  else
+    mirrorURL=$1
+  fi
+  if [ -z $2 ]
+  then
+    protocol=
+    pword="http and ftp"
+  else
+    protocolarg="&protocol=$2"
+    pword="$2"
+  fi
+  if [[ $listMirrors -eq 1 ]]
+  then
+    listOfMirrors=$(wget -q -O - "http://www.eclipse.org/downloads/download.php?file=${mirrorURL}&format=xml${protocolarg}")
+    printf "\n\t%s\n\n%s\n\n" "${mirrorURL}" "${listOfMirrors}" >> mirrorsList.txt
+  fi
+  nMirrors=$(wget -q -O - "http://www.eclipse.org/downloads/download.php?file=${mirrorURL}&format=xml${protocolarg}" | grep "<mirror\ " | wc -l)
+  #printf "\t%s%4d%s\n" "number of ${pword} mirrors: " ${nMirrors} "  for ${mirrorURL}" >&2
+  printf "%s%4d%s\n" "number of mirrors:" ${nMirrors} " for ${mirrorURL}" >&2
+  # echo to get nMirrors "returned" to caller
+  echo $nMirrors
+}
+
+function minvalue()
+{
+  ref=$1
+  comp=$2
+  #echo "DEBUG: ref: $ref" >&2
+  #echo "DEBUG: comp: $comp" >&2
+  result=
+  if [ -z $comp ]
+  then
+    result=$ref
+  else
+    if [ $ref -lt $comp ]
+    then
+      result=$ref
+    else
+      result=$comp
+    fi
+  fi
+  echo $result
+}
+
+# by default, check for both FTP and HTTP sites.
+urls=
+ftponly=0
+httponly=0
+protocol=
+listMirrors=0
+while getopts 'hvlfpbt:' OPTION
+do
+  case $OPTION in
+    h)    usage
+      exit 1
+      ;;
+    f)    ftponly=1
+      httponly=0
+      ;;
+    p)    httponly=1
+      ftponly=0
+      ;;
+    b)    httponly=0
+      ftponly=0
+      ;;
+    l)    listMirrors=1
+      ;;
+    v)    verbose=1
+      ;;
+    t)    testNumber=$OPTARG
+      ;;
+      # No fall-through. We run without any arguments
+  esac
+done
+
+shift $(($OPTIND - 1))
+
+urls="$@"
+
+if [ $ftponly == 1 ]
+then
+  protocol="ftp"
+fi
+if [ $httponly == 1 ]
+then
+  protocol="http"
+fi
+if [ $ftponly == 1 -a $httponly == 1 ]
+then
+  protocol=
+fi
+
+if [ $verbose ]
+then
+  echo "ftponly: " $ftponly " httponly: " $httponly
+  echo "protocol: " $protocol
+  echo "urls on cmd line: " $urls
+  echo "listMirrors: $listMirrors"
+  if [[ $listMirrors -eq 1 ]]
+  then
+    echo "check for list of mirrors in mirrorsList.txt"
+  fi
+fi
+
+if [[ $listMirrors -eq 1 ]]
+then
+  # remove any existing mirrorsList.txt files
+  rm -f mirrorsList.txt
+fi
+
+if [ -z "${urls}" ]
+then
+
+  urls="\
+    /tools/orbit/downloads/drops/R20160520211859/repository/ \
+    /releases/neon/201606221000/ \
+    /releases/neon/201609281000/ \
+    /releases/neon/201610111000/ \
+    /releases/neon/201612211000/ \
+    /releases/oxygen/201608121000/ \
+    /releases/oxygen/201609231000/ \
+    /releases/oxygen/201611041000/ \
+    /releases/oxygen/201612161000/ \
+    /technology/epp/packages/neon/
+  /technology/epp/packages/neon/
+  /technology/epp/packages/oxygen/ \
+    /cbi/updates/aggregator/ide/4.6/ \
+    /cbi/updates/aggregator/headless/4.6/ \
+    /eclipse/updates/4.6/R-4.6-201606061100 \
+    /eclipse/updates/4.6/R-4.6.1-201609071200 \
+    /eclipse/updates/4.6/R-4.6.2-201611241400"
+
+fi
+
+if [ $verbose ]
+then
+  echo "\$HOSTNAME: " $HOSTNAME
+fi
+
+# if [ "davidw-hp-m10" == $HOSTNAME ]
+if [ "build" == $HOSTNAME ]
+then
+  printf "\n\t%s\n" "[WARNING] Remmember, when running on 'build.eclipse.org' 0 (zero) mirrors are expected"
+fi
+
+minimumMirrors=
+if [ "${urls}" ]
+then
+  echo -e "\n[DEBUG] urls: $urls\n"
+  for mirrorURL in ${urls}
+  do
+    nm=$(checkMirrorsForURL $mirrorURL $protocol)
+    minimumMirrors=`minvalue $nm $minimumMirrors`
+  done
+  echo
+else
+  usage
+fi
+
+if [ -z $testNumber ]
+then
+  if [ $verbose ]
+  then
+    echo "no test mode"
+  fi
+  exit 0
+else
+  fresult=$((testNumber - minimumMirrors))
+  if [ $fresult -le 0 ]
+  then
+    if [ $verbose ]
+    then
+      echo "minimum mirrors, $minimumMirrors, was greater than or equal to criteria, $testNumber"
+    fi
+    exit 0
+  else
+    echo "[ERROR] minimum mirrors, $minimumMirrors, was not as large as criteria, $testNumber"
+    exit $fresult
+  fi
+fi
