diff --git a/cmd/servicetester/e2e_test.sh b/cmd/servicetester/e2e_test.sh
index cbd53ef..3568441 100755
--- a/cmd/servicetester/e2e_test.sh
+++ b/cmd/servicetester/e2e_test.sh
@@ -119,7 +119,7 @@
 
   ( sleep 2; curl -s -X POST "$apiURL/$apiVersion/order" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":$identity,\"extension\":{\"plainText\":\"$inputString\"}}" > ref ) &
   output1=$(fishhook $configdir $host "self" 2)
- 
+
   ref=$(cat ref | jq .orderReference)
   cipherText=$(echo $output1 | jq .OrderPart2.Extension.CipherText)
 
@@ -150,17 +150,17 @@
   output1=$(fishhook $configdir $host "self" 1)
   ref=$(cat ref | jq .orderReference)
   commitment1=$(echo $output1 | jq .OrderPart2.CommitmentPublicKey)
-  #echo "Committment1 $commitment1"
+  echo "Committment1 $commitment1"
 
   ( sleep 1; curl -s -X POST "$apiURL/$apiVersion/order/secret" -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":$ref,\"beneficiaryIDDocumentCID\":$identity}" > /dev/null) &
   output2=$(fishhook $configdir $host "self" 3)
   commitment2=$(echo $output2 | jq .OrderPart4.Extension.FinalPublicKey)
   orderIndex=0
-  #echo "Committment1 $commitment1"
-  #echo "Committment2 $commitment2"
+  echo "Committment1 $commitment1"
+  echo "Committment2 $commitment2"
 
   if [ -z $commitment2 ]; then
-      eprintfcho "  ${RED}FAIL${NC}  Commitment is empty\n"
+      printf "  ${RED}FAIL${NC}  Commitment is empty\n"
       exit 1
   fi
 
diff --git a/cmd/servicetester/e2e_test_multi.sh b/cmd/servicetester/e2e_test_multi.sh
new file mode 100755
index 0000000..f788d1d
--- /dev/null
+++ b/cmd/servicetester/e2e_test_multi.sh
@@ -0,0 +1,226 @@
+#!/bin/bash
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+
+#End to End Test of Services using curl/bash
+
+principalID="FvhP9PyS1LNNizM1kns65PUA9imPya2zzTbZZ9BYaVLo"
+beneficiaryID="5m4iJRCRzcMySHFXgAPB1gyfBvHgomwEpWDpZRHayPyP"
+beneficiaryConfigdir=~/.milagro3
+apiVersion="v1"
+defaultURL="http://localhost:5556"
+apiURL="${1:-$defaultURL}"
+configdir=~/.milagro1
+host="34.246.173.153:26657"
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+ORANGE='\033[0;33m'
+BLUE='\033[1;34m'
+NC='\033[0m' # No Color
+
+
+
+status () {
+  #Determine if an extension is running
+  statusOutput=$(curl -s -X GET "$apiURL/$apiVersion/status" -H "accept: */*" -H "Content-Type: application/json")
+
+  #printf "$apiURL/$apiVersion/status\n"
+
+  identity=$(echo $statusOutput | jq .nodeCID)
+  extensionVendor=$(echo $statusOutput | jq -r .extensionVendor)
+  plugin=$(echo $statusOutput | jq -r .plugin)
+  printf "Plugin ${BLUE}$plugin ${NC}\n"
+
+  if [ -z "${extensionVendor}" ]; then
+       printf "${RED} Server Not Running{NC}\n"
+      exit 1
+  fi
+}
+
+###############################################################################################################################
+
+execute_bitcoin () {
+  # #Run 4 Tests against the Bitcoin Extension
+  echo "  Bitcoin Plugin Tests [2 Tests]"
+
+
+ ( sleep 1; curl -s -X POST "$apiURL/$apiVersion/order" -H "accept: */*" -H "Content-Type: application/json"  -d "{\"beneficiaryIDDocumentCID\":\"\",\"extension\":{\"coin\":\"0\"}}" > ref ) &
+  output1=$(fishhook $configdir $host "self" 2)
+  ref=$(cat ref | jq .orderReference)
+  commitment1=$(echo $output1 | jq .OrderPart2.CommitmentPublicKey)
+  address1=$(echo $output1 | jq .OrderPart2.Extension.address)
+  (sleep 1; curl -s -X POST "$apiURL/$apiVersion/order/secret" -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":$ref,\"beneficiaryIDDocumentCID\":$identity}" > /dev/null ) &
+
+  output2=$(fishhook $configdir $host "self" 2)
+  address2=$(echo $output2 | jq .OrderPart4.Extension.address)
+  commitment2=$(echo $output2 | jq .OrderPart4.Extension.FinalPublicKey)
+  #echo "Committment1 $commitment1 $address1"
+  #echo "Committment2 $commitment2 $address2"
+  if [ -z $commitment2 ]; then
+      printf "  ${RED}FAIL${NC} Commitment is empty\n"
+      exit 1
+  fi
+  if [ $commitment1 != $commitment2 ]; then
+    printf "  ${RED}FAIL${NC}\n "
+    exit 1
+  fi
+  if [ $address2 != $address2 ]; then
+    printf "  ${RED}FAIL${NC}\n "
+    exit 1
+  fi
+  printf "  ${GREEN}Pass${NC} - Id, Order & OrderSecret(Beneficiary)\n"
+
+
+  ( sleep 1; curl -s -X POST "$apiURL/$apiVersion/order" -H "accept: */*" -H "Content-Type: application/json"  -d "{\"beneficiaryIDDocumentCID\":$identity,\"extension\":{\"coin\":\"0\"}}" > ref ) &
+  output1=$(fishhook $configdir $host "self" 2)
+  ref=$(cat ref | jq .orderReference)
+  commitment1=$(echo $output1 | jq .OrderPart2.CommitmentPublicKey)
+  address1=$(echo $output1 | jq .OrderPart2.Extension.address)
+  (sleep 1; curl -s -X POST "$apiURL/$apiVersion/order/secret" -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":$ref}" > /dev/null ) &
+  output2=$(fishhook $configdir $host "self" 2)
+  address2=$(echo $output2 | jq .OrderPart4.Extension.address)
+  commitment2=$(echo $output2 | jq .OrderPart4.Extension.FinalPublicKey)
+  #echo "Committment1 $commitment1 $address1"
+  #echo "Committment2 $commitment2 $address2"
+  if [ -z $commitment2 ]; then
+      printf "  ${RED}FAIL${NC}  Commitment is empty\n"
+      exit 1
+  fi
+  if [ $commitment1 != $commitment2 ]; then
+    printf "  ${RED}FAIL${NC}\n "
+    exit 1
+  fi
+  if [ $address2 != $address2 ]; then
+    printf "  ${RED}FAIL${NC}\n"
+    exit 1
+  fi
+ printf "  ${GREEN}Pass${NC} - Id, Order(Beneficiary) & OrderSecret\n"
+}
+
+
+###############################################################################################################################
+
+execute_safeguardsecret () {
+
+  inputString="This is some random test text 1234567890!"
+  printf "  Encrypt a String [1 Test]\n"
+
+  ( sleep 2; curl -s -X POST "$apiURL/$apiVersion/order" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":$identity,\"extension\":{\"plainText\":\"$inputString\"}}" > ref ) &
+  output1=$(fishhook $configdir $host "self" 2)
+
+  ref=$(cat ref | jq .orderReference)
+  cipherText=$(echo $output1 | jq .OrderPart2.Extension.CipherText)
+
+  ( sleep 1; curl -s -X POST "$apiURL/$apiVersion/order/secret" -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":$ref,\"beneficiaryIDDocumentCID\":$identity,\"extension\":{\"cipherText\":$cipherText}}" > /dev/null) &
+  output2=$(fishhook $configdir $host "self" 2)
+  plaintext=$(echo $output2 | jq -r .OrderPart4.Extension.PlainText)
+
+  if [ -z "$plaintext" ]; then
+      printf "  ${RED}FAIL${NC}  Commitment is empty\n"
+      exit 1
+  fi
+
+  if [ "$inputString" == "$plaintext" ]; then
+    printf "  ${GREEN}Pass ${NC}Order Create/Retrieve\n"
+  else
+    printf "  ${RED}FAIL ${NC}Order Create/Retrieve\n"
+    exit 1
+  fi
+
+}
+
+# #############################################################################
+
+
+execute_milagro () {
+  echo "  Milagro Tests [1 Test]"
+  ( sleep 1; curl -s -X POST "$apiURL/$apiVersion/order" -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":\"\"}" > ref ) &
+
+  output1=$(fishhook $configdir $host "self" 1)
+  ref=$(cat ref | jq .orderReference)
+  commitment1=$(echo $output1 | jq .OrderPart2.CommitmentPublicKey)
+  echo "Committment1 $commitment1"
+
+
+
+  ( sleep 1; curl -s -X POST "$apiURL/$apiVersion/order/secret" -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":$ref,\"beneficiaryIDDocumentCID\":\"$beneficiaryID\"}" > /dev/null) &
+
+
+  output2=$(fishhook $beneficiaryConfigdir $host "self" 1)
+  commitment2=$(echo $output2 | jq .OrderPart4.Extension.FinalPublicKey)
+  orderIndex=0
+
+  
+  if [ -z $commitment2 ]; then
+      printf "  ${RED}FAIL${NC}  Commitment is empty\n"
+      exit 1
+  fi
+
+  if [ $commitment1 == $commitment2 ]; then
+    printf "  ${GREEN}Pass${NC} Order Create/Retrieve\n"
+  else
+    printf "  ${RED}FAIL${NC} Order Create/Retrieve\n"
+    exit 1
+  fi
+}
+
+
+
+
+
+
+# #############################################################################
+
+execute_orderlist () {
+  printf "Milagro Tests [1 Test]\n"
+  commitment2=$(echo $output2 | jq .commitment)
+  outputList=$(curl -s -X GET "$apiURL/$apiVersion/order?page=0&perPage=2&sortBy=dateCreatedDsc" -H "accept: */*")
+  orderReference=$(echo $outputList | jq -r ".orderReference | .[$orderIndex]")
+  outputOrder=$(curl -s -X GET "$apiURL/$apiVersion/order/$orderReference" -H "accept: */*")
+
+  #A simple smoke test to ensure some sort of order is returned
+  hasSecret=`echo $outputOrder | grep "Secret"`
+
+  if [ -z $hasSecret ]; then
+      printf "  ${RED}FAIL${NC} Order has erro\n"
+      exit 1
+  else
+     printf "  ${GREEN}Pass${NC} orderList & get\n"
+  fi
+}
+
+# #############################################################################
+
+status
+
+if [ $plugin == "bitcoinwallet" ]; then
+   execute_bitcoin
+fi
+
+
+if [ $plugin == "milagro"  ]; then
+   execute_milagro
+fi
+
+
+if [ $plugin == "safeguardsecret" ]; then
+    execute_safeguardsecret
+fi
+
+#execute_orderlist
+
diff --git a/cmd/servicetester/orders b/cmd/servicetester/orders
new file mode 100755
index 0000000..c627f9c
--- /dev/null
+++ b/cmd/servicetester/orders
@@ -0,0 +1,13 @@
+#!/bin/bash
+rm refs
+x=1
+while [ $x -le $1 ]
+do
+    (curl -s -X POST http://localhost:5556/v1/order -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":\"\"}" | jq .orderReference >> refs ) &
+  x=$(( $x + 1 ))
+done
+
+
+
+
+
diff --git a/cmd/servicetester/orders4 b/cmd/servicetester/orders4
new file mode 100755
index 0000000..5a8bf34
--- /dev/null
+++ b/cmd/servicetester/orders4
@@ -0,0 +1,13 @@
+#!/bin/bash
+rm refs
+x=1
+while [ $x -le $1 ]
+do
+  curl -s -X POST http://localhost:8556/v1/order -H "accept: */*" -H "Content-Type: application/json" -d "{\"beneficiaryIDDocumentCID\":\"\"}" | jq .orderReference >> refs4 
+  x=$(( $x + 1 ))
+done
+
+
+
+
+
diff --git a/cmd/servicetester/refs b/cmd/servicetester/refs
new file mode 100644
index 0000000..942602f
--- /dev/null
+++ b/cmd/servicetester/refs
@@ -0,0 +1 @@
+"G6c5SAXkDanPvsQVqbdeyRXQ3nUtfF8YUtmqVGoKN7Dn"
diff --git a/cmd/servicetester/refs4 b/cmd/servicetester/refs4
new file mode 100644
index 0000000..0190582
--- /dev/null
+++ b/cmd/servicetester/refs4
@@ -0,0 +1,193 @@
+"EL3e7rfCmYRsrtCBGcZwPKJoDcr6DAAuDjUsJXfY5Pm2"
+"9VjvbiBdpezT5MJSxZdYtxQSuWUVkRnfHTCptd37YcVm"
+"F46mnFDoQHEGitY6LuvUUcvkpCFaMRgthTqWAwVi6u4Y"
+"5urdsUM3dTRmhvzu6AkiBwYGnziwVYGfRYEQ15vKnzTe"
+"A75Xo1kf8JMVcD989Kyj6igM8tiTynEbuJ7QKrjJ2NZe"
+"9yc5U5tEH5qcTxdwKRDbTaGH7AriLH4UFow3h3CQu1pP"
+"HkYAE5koRcek5sNK5mNcs2hQ8NdFMbcQ8Cyh4R1nMGVq"
+"3DVMjTcUL9PpjXW8U6wb5ZUEtTCHxVBLFNCPM418WNEU"
+"9zG6bCCDP4xGZVE3ySkpCThtjZaf3EeH5LX8BvaCSkC2"
+"ErRX7EUen9RT1KYfhVbhGWpPmdAX8RpFPejedxD2h922"
+"EWX8Q9QZPxXXKXhbi7dEbNCgpQ2xEofcopK8Dp5vsxvM"
+"AufU3nRsShZejXdt9XeC5i6cXUyZhH5X14TUdTrSGCTf"
+"89aqoF3rZcvPhTNMLMJgTRFoJAvtWXoRyFCaz6LotLoV"
+"3VPkSfCsEJSEygWWVRNFqGmAfeUqso2MpB27ZUeo2vEs"
+"3am1DjAPSKkoZrQyHkxjJqHFmFJ4zdjNqGtvaZRttvVU"
+"HnRSdFqojwZUh1hiFjMP87KZBAHFK4KRLEh1qSzhmhni"
+"Fgipj8gETxrCmNAtx2Cu96RHPj8rdzPfWmQ7N6fkfGMj"
+"Bz1Z4opxsJdjgoUarYqaymk7jMj886W7NyaxZxypYiNR"
+"HAHisc3bxeCHSpsN29awvhE8Bc326R2jQG6WTkxS8bVo"
+"2HrR57Yz8v5wBog3bAAyfhhoY31U8mZTWT1PikarmLPs"
+"2TDd4MUZGBZ8ZkbM66EZNSHDxM3DjXtQKXCGhiSwur1Y"
+"DJToC2dptgjC5bgmhVKs7L6wimsiy2rqjkwDPybhrTyh"
+"26VpRR6LYnR1fxkt58h48uYHvkj2HY9wAvnjesBqy3Qx"
+"7gHP5pNuZPsEjdb6BLhG2DnbrzMrcgH9smXsR67oNH5Y"
+"Fgpd5mVpsu1MasDdAgn1TStURKTBjjTUBwY3n1mXkvmq"
+"D6KrzR76tQ2eURg47cAEVb2r22NEBpRBib2ewrApxHvG"
+"98NbwHpTXH6cNmS81rkao7opaQcc39nkay2wLeBc9YKV"
+"2vVhayxcbxP7SFtrar613rycA5bLkgVXXAtKwykZhLcQ"
+"6DBGZ5iizWriQGwgG2gR2SPrn6yeVLfisJNj91Pf2Rdx"
+"Fp6oF7efgpgCpzycsSq7ux4M2rNPPp9LyjHrk7aUvWhP"
+"9b6T1fmyGfdanEDj74ccPrxdfFGe65Ui5KgJek1tHmAn"
+"AMv3rKSGRtALogskeRtkssgv3st8tSGH5YzKRur83w1X"
+"Gg41gX36SAczx11o7tGEFs4TvghQx3eZBVBpptc2oh9U"
+"AecNfbQ9p7Ce51MxaeKSTPS6GJwnCftaQEYN8GcYr5YY"
+"EvnasbWpNrzzRxSCfWBPmiabvM8zgxdKHP6rMxMqpRV8"
+"65bJ3X2DGMGxCrPWTdhCAz4DeWQJc8yQHSefxeEB6Nxo"
+"HkrnUeZEbBEr44xz8qLk6CMeWzH6tJSgkPs6uCdQaf8e"
+"aCyy3boV5tiNVv6EfNaW3tQi3viR3igDREevYz6ZB8T"
+"A2DuvQ7u9pCyFtRfTUgbabhrvitMxjNN7u6hZHyAfNqV"
+"H8hV1CZen2sBssAEYkE3iSkaYZaHS86z6fiTNVU9hgov"
+"6R8ES9BSAGDny9cSD5TMF3YkDE3zZJtQjAFdEZibef7T"
+"4gU4UWSZQwZAKQvSGw2jkMoWqpdN99UYX9p86RA11LEs"
+"6pxCaEpieYdrgToQQrqJz2DuHBjakv4gRhZ2kb9VuE5C"
+"296rKKjpu11qGTr5bNPwHxyW4LAHHYF8V44VmwaoJU5W"
+"AeJ2v4astM5yd9Gpr7xsX3QLcQHYCvAAPuwBsJ6pNdUW"
+"7Lxc3sxVBqEHz4GTXA45em1qZYtx5JrHGEjBFYAxpzWy"
+"Fgyt5ehUyjMgpUcti29GxmpTMSxDhUXMCR14wznUFbzg"
+"26TKapdLEenuo1BZYTdQDGGTH9QVi74fkmby2c95ksGh"
+"4K6kwK4wvxy89e3jNt5KxPYbrMqGhNUbmEhBKut1rTUM"
+"65MfB7gsJip3EHRhEkGwiR8tU5mk5Xtq4yYjVuohuWY4"
+"H29ZmRZ9S5wMKwbWVS1q15XdJUHt3yuvhEuk47mF1MPr"
+"GFpywDnK86w6WXZV9Vby3yY3iArvftfhSZNVDyPtyHUx"
+"EMfmJiHESXBrWHcQEdAsjJEZLBaSHFrxbPQ1rvp6kyAL"
+"DRb45jCL6ugV9BPboC9QtYbvMhgtciYsvT9ASq9Qgz1Z"
+"mTbsWAYmhqQc8WR2Tu9k1mCyUrg9JynDSGNrtccveaZ"
+"3uS1qBitUqRfbptztYwQFh7PaTCQeGnB4ieuDuwS2A5g"
+"647y1ymdq5wQkKp9Ue7bbJSW3kSVmLK5NYmtXwQgDqHn"
+"BeSw4wtiCMgX7s8QbUpQexJBYS9AcTTw57aEVEB1dc1u"
+"3XnNLS7vGFAtZFRuEChu7HpNa9edW4xZWaR1iTg2WWVz"
+"Dg12VpjNhX8yi4arjsYXcNPwSjad256W2Qb9JjWuhXqG"
+"Cdrwhhkh1e17NMvHsyczd3QEoRT66tTDfL2fqSfcqf8B"
+"BS3RqbDYYQHSaoTqndE4qeZ7B9ikYzQx6RNZfRsspNPa"
+"2TeLW5FMXPZM2wpQ4jj7chDfoogAed47bmXUhwfRknch"
+"3MGB3LvkvX1iEDNeadCgZPZKvWDNpQVzhit6HWhpwUhE"
+"AGgHDAjmoNVWxmUxWJ1At51hyhZkbUANwg4Ww2aYaGKd"
+"ESHviwtzS6HquafqosQBxrwY9d6yPjHX236BPp4YMWsH"
+"59gVPRTcoHtCGi8L9iBRqmrPSuLiFmavBjKG4e7cj5JB"
+"6FhR3PjufuCZMTDNCB61QqTYwLscqqhBHJA3awEFddcp"
+"uAEjobkjvrd69r3sa24VZqZC6XyFLCcRzo37aMeguXN"
+"EPAMzwMriyX6cgyuTfAey3tUddv8hWjTiR892V3RQw9P"
+"9zm6eePCbiT2zftRSwPp8AtVNAibdS5KTcXnCpBgh9dj"
+"CbywFktqe6bbTG95Bo6fRFcVWbvwsGcv8t4pVw1inkvx"
+"A93rU9v9LQM3weY3DHc5sbWkDWxX9gHR2evzqTWuNnAQ"
+"Cfqmh9PEnrwNejgmVjm1pYpG5XJo7ja3dKxrsYugr4YZ"
+"AGaxa5S9EsSrYzAzNY5D6FgE6T2pgRRUaWWTu3vakdH2"
+"Fya41zwPkELFSfL1eQtjHxt2Nmfm35htRwAE5UUtqAkw"
+"BKnYnjpJdegA7VsjEtmizFc28HqUrtwFRxYnui6xQf8g"
+"8RTbXgeK3w3N6zdF216diAPtTfuEEppGaAssZmH52WxG"
+"9MkHcrELBii9FcB4CoAh8SnzCFDyHV4HyNqLcoVVx5NE"
+"8g4AWZNEsq2MT7X9FaKqxFCVg2sEiiDA3Dj5JFHvN8GZ"
+"4D4Q4LY7jv3mtdf8EJFgjxWBpVSL9MRtM5RfEyL1TucT"
+"H2YMzY3XYK61mUoGXz8ZX7TMjo7NDUybg71cXtTttnFT"
+"CVCNqS57yQRUuEpcXCinPwNZxGrZkmF4SceVxWvT1CjN"
+"99g6i2931bXYfwfrZTB84KTo4LpCvU3LVnJrUoRep5qv"
+"34mC3tuP1ChUZAAhgSucY9mczP6yYbauLsfwjE7LFVSG"
+"7G1Yr9Y6rFnVWfYF8S8aLFakmH2fxkEVz8LUYgirz3y1"
+"9VrLZwMiC89noBeoWo9e2hDVWzrw2JeghKMxEjaZR26g"
+"J6BqTeum6vZxyDWqNysXGnS9aqV6chEubUg48XqAkERV"
+"FSZg4sNQCKEM4bmEoGrG2BdkCnjNjZCfRwPFC2YrB2s"
+"EKGWMuZNFYLvp8ayvJKLM4a5xbjkFhaXCnkL25gY3f5g"
+"FWh4vYQU3XZ7AYiXGP1mKsvV6kzJUhnqCfUJq5JuJsbQ"
+"Cz2b83m7YGTfvdWU5fnV9McBVuQjnQWENzfFPK4wg1CJ"
+"3rQ7RBHjBbrEuj5CrCktkbydPmr2zkmj7HfnFAmS7upg"
+"BZj5RrmzXGcafoQ2mYbaUGDm9MpBaVjAZxKMoCeEoErT"
+"8STyS1Egw2PoXZmRsV9umhYJgpiqevAXgYq8uL8TxPwf"
+"DLL1ZyyheZyVzs8PAV2uPCaPnjeY2hBPDVUrqX2KmwaN"
+"7HXtUSgK1ZFQKdWhpE24PyMhJWtFeeqvapUgpZ4djU1a"
+"CNEf8BXmEoiks9sdANQ5CVZ2SFmo4PNp7Tx3smbypkwB"
+"7b6eJ18bgdWscaxW2rLjNBYwdmDhmsN2az5DtatjoA1V"
+"6Uh4S99bmFpefn55RQy9nVK2PLERbKFcss5JQpbdV2sE"
+"5v18n2aWcx61vimETAEramRJ6hW5rBsiSYMUB51LcR8u"
+"9oB5FsWS8rrSBC7XFDSdcVKDwD3SNADMx4YjNf6XJcuM"
+"DbLsvrgUq1ySc9KsanJebmpdzDKXrttUS3tK2bKfLZS4"
+"43aaev4qUajoQorF3cXxgLzjSpH1i2jfV1bbsjxPD4e5"
+"2muZL3vSh24gycGdyzHW5otGEY74c3oPH8bsmYkMeF6T"
+"8oG11wLAW2PwuzQ6LcZ1xTbQ4KecaJfomDgfbxKsRwgE"
+"DrtJZ5V3JyoT2Hj9zqGvqkHPFMMxB5rUsuMwN6Bj3k9q"
+"EbwC1fEnfPjtPth8ZtEGDW8ZrndrTBYomdtwFiTJPU8j"
+"2qkY8pMruaKYSnEBA6RsFEga8uhdQNSQzfWxhLqfnsGJ"
+"ANWe93q4BpisAbSckE1LEq9owoQidpzMffGTUPtD6zuP"
+"Gtx22daAGeacVaLSLiQ1DZowVLAGe2yW6J9xyEiPGapL"
+"6HHUJkZN4YTwPjso32sXp6C8fo7PcPp8bCz5xMFzzpXC"
+"824wUz4TsYCURNW1PPjdcaY9o9J5VKLG1DtGQeDh1JiN"
+"CF39RYkcPXSfikT89NcqK85aJKhQwk4yPMvL8znSuysD"
+"6dmBhijdA54fiaJnSXa8V64NXtFP1cd95w2Yk8k7Bq8x"
+"Cg9hYSMEb3okq7HHdW86xsJeuvk1kGDbsiHhZ6gpcdqi"
+"7AA64iggMMesd8WcUQtfufv8vYqHdGiGJnzpnb9pdhjg"
+"HU3BeSuEH7PmYHXXn6VwgVCggArrZJMritM6ZhxoVv2d"
+"4UdDc8CvXn79tS2UZs5uSrdQZQPn5ccHK7eFZzbLJB1A"
+"8k1WnXRJoMPBZaNpLZcFjTAqDRYH6Mb1Jd7AgZAYnoQS"
+"ESuBqwsgCQ65mL5oKXpThqbTgeT5FUMtj3CRtixrg3eW"
+"CGHUcnunUwTLqfoYUKDKhJh6LAiGww2uyVFcofNRbuq6"
+"BFLkV6hC3ELrfgy55apmuhHupwC6SPECWmSjPGrdjPRH"
+"A63sr93zWE6t3y6GtVBPsqStS3EkoyPo72RSTr2b5QNV"
+"2VM32wLrHJHAWDn9mnzo8VpJ1USJYBS9JUmbvMhLAz5H"
+"29bWiigLg8xCRynzkCcmPHrkew6yiL1KabSkraseQpL9"
+"EpGedZY4iiKzABjHjBUv9k5s5oLYECKsYjWRyxpvmZvg"
+"AYcifHm9CwuLokh4aBhNmbdGRwS2kYwrsRYzX8YA7N23"
+"2XxnQQBE7RcnW5bkKpRrGNcr8ED3UL15fSySztRVcZGz"
+"AFEZJpeTDVSqqzJyRBFy7djgYzJP77j34dGNMyELDivv"
+"RQ9pm9H52xArHyjw7X1sjPSkFEYHWnGPLqEC4U1wa1t"
+"5ycD6Ec79yTnHUpmq89GcTxTLhf6FbyBC4ZZicuiPLTN"
+"FdRn3T4xHiu9z2T8uG6sVpETTajKnpTEjfDEckZwxE8L"
+"8TvuS7UJGo9V5nbqvWBcRvKEyPJUQ2au7d3dWeVTsXSz"
+"AcaheBFxqe3pTw5dsmb3W4ijRs92iqndakgR4Rosb4rh"
+"8VaZLjcL7xRiDsthjWCiBSDAoEdyxHgSHMxZsaTcryta"
+"EKqCMTwTHh8VghLMJsnWu1XgvzYceWKDWNYaPShPLveC"
+"837ZejSjEmarp3hLGGGtEPaacALjdNxyjfww9nPioxcG"
+"BBBnshFnxwJSxcDkePDkWsRyXyNYpfTWJaNTNuouiFp4"
+"8zXtGVmHKyRp6qedTHBgBesp7gP63DapF14ecWVzWyCB"
+"DqU4Cez9Ax7AvKHCmztWsGUV6MpHt1XAPUnPXLduPxfE"
+"D6FMVdtT6A5fSF53FNaq9dAgZVxh1SWq9MpLf9Gbrdh7"
+"BKrj91uwqc2kJ9ANGeXdeVqWqFABT9rkHC2oYu9jJphu"
+"3UioXcQ4EbwZcofm4Jfbn8zHT3eenvUkFM5Lz2skc7LF"
+"2YVwXg3xjvV3QrXf4oyrh4m7T72icMuMTpoo646BvBdY"
+"AcyFeNHF5afTF6J1HHsV9376Ceyv5xh3rwsJGqW7fWnb"
+"2LECcq5tqPyM86XrtQzgaBXLEoHy3SadvPPXLiZ8oKsR"
+"7CN3egUo7QCBf8Rc473Df2vLK9uRtbE7YLw6eZMvWyrv"
+"DCp6sfcUEdHkaqp4jhBPfnFLpTQd8pMJ9smahkUn9VPp"
+"EUb4YV5qL31RnrZ2DhfM72uJzqLtdJJjyxvboLbowvwR"
+"H2726Q5SA49mJhJW6GYXZxb6Zdm3EY32ZK4qLEdUsmR2"
+"HjrMf5YNfmoiqqea9YK5k7n74zb8kcTUopf9M6b5DXXM"
+"4qwE9UMfPYgR7JbMcWRaH2oYdsJdA7Dh5JeFR8zRkWCN"
+"pyTrxaJCKPSH4y97KUJTYF8JUcLGGBkSzoxLGnM3tWQ"
+"FNibCepGQ3Ua4bAJ9C9gPNVWYCRU6zTXXYisdqgrGrJD"
+"8qFxzdkq2KVqJyEvhREkb6aZarRGSk278VYUHkf91o51"
+"2927FbPNMahJDf9UhncA1y4wGyMLXMfxHyQrpHfRAqcX"
+"58AhvAevaHaiieU25AzuNte6fA36JUv6JmbESGLnCvNG"
+"35sFLtscL6KTtdNVfYecowVmShJrvoj9JTyVqsWBvoGy"
+"6ZPrvvMX7rbgPmDN2So73Zur6jEG2uQgmsHnPzj9Ci4J"
+"zYayVMDPXJq1FcqF6n7e9Kg7yvBKtjx8DdcovqJ9qir"
+"E16D2Kz31DHFg5CKGk5AMkdb3RiUKquQwN5Xeg3azGZk"
+"GFFwfGWB9vMbrhYacKVHmQMzhbWQ4dCQszMs4eX95jJF"
+"6kuLTStMZn631Nyp2DaLK6cSqJ5ti9HvqbGsWVLSRubW"
+"5qnG4HVGYyynJHNx1BUceLny7epY2RahU4ddx36WjLed"
+"GnjQF1HB8JaCwV6wZf7HxzVHgtLf6NoXtnBBBJyWhWKi"
+"ERghbpGX7UkVcey35PmA1cgSkQNZPen3Q5Q8Yd1TQsWZ"
+"89aRsFaRwwXF87fG5eEXoFWxz9FZVetMEpFeb9dWuqVM"
+"5KkNqeGRtpwZPwsmGTrzve3G53jEDeBWL36Pg2LYeZX8"
+"BcgC9y4grVNtWL1wveaJkvSKTkGpXynTogTVWfLSd7tB"
+"AqrygxSRX6wdrvRsEgA1QkqWb1VzqariqYJV67QBhBkt"
+"9c32ZhDD2zDZAbdNETT5zagJ7tpmH1qj4Qh2YQNyQmX3"
+"FU1kaAHnQ3tPPRMZXfaqPiYjAe46aqqddurGjCsdADwd"
+"Fb4LweGZT7faSGRka7XUKLqZzyGzSxS9c7Yj1ndEtPuP"
+"68rmB4bXYgEn77o9VfGaDrv5rsJ3oKJ3Vp41LHMHVok1"
+"FtitZtSgbQxVr2dnru8wNm7bmCmDwfCretCEsWEvRXm4"
+"9aez8kptrg3Ab2WMx7G1hVCvL7VMmx3eZqQiZ7wsJ8vU"
+"BXi7B6eF957aEZzvC7yuVwoskNxPz5guNhG73HF2jAKg"
+"9HCjETxLm6QzKi14pcVW4nQj8VUYcbb8NU2sEhSKnXwM"
+"6E5L2VWdarNw6ghmUJUdJTBVGC3TdnpjUdMhYtEvxaY3"
+"4Pxb97q1XwW2uUSBoWcsvDe8w4L9qWx3e1baqTQqysac"
+"67ocwkNgnzFEHvTaP4cdniPqwv1GBJEo7Qg3v519vPYJ"
+"CF7qGBFxms9MVH1hfNaJcC3LGgdXdHo9Nt1PSbXvBpuJ"
+"CYS6PXhwfm9m2QJQxGCbcRQC2e2i5mgPzWtHrmC9geBd"
+"BdcFhYGsE8HuwitoBixkdYhLitM3VzB2m6dPnJK7jhGX"
+"5yrCsj3twcknVXncnPPFZ76beCnQ5GP9B69dGWSr4rFk"
+"E81XYAhxnMBjAZAfdVr8sd6UvAYe2Kq65fXtJwLdh67D"
+"cyG4bDnutfJh9gChCgn3LEiXinYnqrTxjUxmFHL781t"
+"DwDvSwhpg2CB7wjEBvFBTsAxCR666LHMrcg5PYsCN8E3"
+"7eYNwjdXQheb6VGxryvmz3NuhUPkPJ4cJHqtPghRzsQM"
+"33CSWd6bru3BzuQv5Cs5EGjrhBzX8gS6kq94ErpAZvdd"
+"6E9kWUpFdhr56es5ryeXnPszmR9uYUhoiEBUBrhnnKzU"
+"5FNNz2rufCWAx58Qog1LYZghXLXky3dCoVVVm94yJWS8"
diff --git a/cmd/servicetester/secret b/cmd/servicetester/secret
new file mode 100755
index 0000000..0bb82cd
--- /dev/null
+++ b/cmd/servicetester/secret
@@ -0,0 +1,10 @@
+#!/bin/bash
+beneficiaryID="GisugaBj3LrtJ5eF1aRB13uxBt6SfGk4wErzLFaKKfZL"
+
+while IFS= read -r line; do
+    (curl -s -X POST http://localhost:5556/v1/order/secret -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":$line,\"beneficiaryIDDocumentCID\":\"$beneficiaryID\"}") &
+done < "refs"
+
+
+
+
diff --git a/cmd/servicetester/secret4 b/cmd/servicetester/secret4
new file mode 100755
index 0000000..a16dfff
--- /dev/null
+++ b/cmd/servicetester/secret4
@@ -0,0 +1,10 @@
+#!/bin/bash
+beneficiaryID="5m4iJRCRzcMySHFXgAPB1gyfBvHgomwEpWDpZRHayPyP"
+
+while IFS= read -r line; do
+curl -s -X POST http://localhost:8556/v1/order/secret -H "accept: */*" -H "Content-Type: application/json" -d "{\"orderReference\":$line,\"beneficiaryIDDocumentCID\":\"$beneficiaryID\"}"
+done < "refs4"
+
+
+
+
diff --git a/libs/documents/docs.go b/libs/documents/docs.go
index 1949af5..9ef77a1 100644
--- a/libs/documents/docs.go
+++ b/libs/documents/docs.go
@@ -21,6 +21,8 @@
 package documents
 
 import (
+	"sync"
+
 	"github.com/gogo/protobuf/proto"
 	"github.com/pkg/errors"
 )
@@ -31,6 +33,7 @@
 var (
 	//EnvelopeVersion the versioning of the entire Envelope, (not individual documents/contents)
 	EnvelopeVersion float32 = 1.0
+	mutex                   = &sync.Mutex{}
 )
 
 //IDDoc wrapper to encapsulate Header & IDDocument into one object
@@ -166,6 +169,7 @@
 		}
 
 		decryptedCipherText, err := aesDecrypt(envelope.EncryptedBody, header.EncryptedBodyIV, aesKey)
+
 		if err != nil {
 			return &Header{}, errors.Wrap(err, "Failed to AES Decrypt Envelope cipherText")
 		}
diff --git a/pkg/tendermint/connector.go b/pkg/tendermint/connector.go
index 5bba07b..d17a0d2 100644
--- a/pkg/tendermint/connector.go
+++ b/pkg/tendermint/connector.go
@@ -172,7 +172,6 @@
 	}
 
 	nc.loadMissingHistory(currentBlockHeight, processedTo, processFn)
-	// TODO: load historicTX
 
 	// Process events
 	return nc.processTXQueue(ctx, txQueue, processFn)
@@ -212,15 +211,20 @@
 	}
 
 	currentPage := 1
-	query := fmt.Sprintf("tag.recipient='%v' AND tag.sender='%v' AND tx.height>=%d AND tx.height<=%d", nc.nodeID, nc.nodeID, processedToHeight, currentBlockHeight)
+	query := fmt.Sprintf("tag.recipient='%v' AND tx.height>=%v AND tx.height<=%v", nc.nodeID, processedToHeight, currentBlockHeight)
 	numPerPage := 5
-
+	processedCount := 1
 	for {
 		result, err := tmHistoryClient.TxSearch(query, true, currentPage, numPerPage)
 		if err != nil {
 			return errors.Wrapf(err, "Failed to subscribe to query %s", query)
 		}
 
+		//skip over any previously processed
+
+		totalCount := result.TotalCount
+		totalToProcess := totalCount - int(processedToIndex)
+
 		for _, chainTx := range result.Txs {
 
 			tx := chainTx.Tx
@@ -235,33 +239,51 @@
 			payload.Height = chainTx.Height
 
 			//processedTo check
-			if payload.Height < processedToHeight {
+
+			if processedToHeight == payload.Height && processedToIndex >= payload.Index {
+				//We have already processed this before
+				msg := fmt.Sprintf("[%v/%v] HISTORY %s Block:%v Index:%v", processedCount, totalCount, color.BlueString("ALREADY PROCESSED"), chainTx.Height, chainTx.Index)
+				nc.log.Info(msg)
+				processedCount++
 				continue
+
 			}
-			if payload.Height == processedToHeight && payload.Index <= processedToIndex {
-				continue
-			}
+			// if processedToHeight == payload.Height && payload.Index == 0 {
+			// 	totalCount = totalCount - int(processedToIndex)
+			// }
+
+			// if processedToHeight > payload.Height {
+			// 	continue
+			// }
+
+			// if processedToHeight == payload.Height && processedToIndex > payload.Index {
+			// 	continue
+			// }
 
 			//Dont queue just process directly
 
 			if err := processFn(payload); err != nil {
-				msg := fmt.Sprintf("HISTORY %s Block:%v Index:%v Error:%v", color.RedString("FAILURE"), chainTx.Height, chainTx.Index, err)
+				msg := fmt.Sprintf("[%v/%v] HISTORY %s Block:%v Index:%v Error:%v", processedCount, totalCount, color.RedString("FAILURE"), chainTx.Height, chainTx.Index, err)
 				nc.log.Info(msg)
 			} else {
-				msg := fmt.Sprintf("HISTORY %s Block:%v Index:%v", color.GreenString("PROCESSED"), chainTx.Height, chainTx.Index)
+				msg := fmt.Sprintf("[%v/%v] HISTORY %s Block:%v Index:%v", processedCount, totalCount, color.GreenString("PROCESSED"), chainTx.Height, chainTx.Index)
 				nc.log.Info(msg)
 			}
+			processedCount++
 
 			if err := nc.updateProcessedUpToHeight(chainTx.Height, chainTx.Index); err != nil {
 				return err
 			}
+			processedToHeight = chainTx.Height
+			processedToIndex = chainTx.Index
 
 		}
-		if currentPage*numPerPage > result.TotalCount {
+		if processedCount == totalToProcess {
 			break
 		}
 		currentPage++
 	}
+	nc.log.Info("Process history complete")
 	return nil
 }
 
@@ -312,17 +334,21 @@
 	for {
 		select {
 		case chainTx := <-txQueue:
-
-			if err := processFn(chainTx); err != nil {
-				msg := fmt.Sprintf("TX %s Block:%v Index:%v Error:%v", color.RedString("FAILURE"), chainTx.Height, chainTx.Index, err)
-				nc.log.Info(msg)
-			} else {
-				msg := fmt.Sprintf("TX %s Block:%v Index:%v Type:%v", color.GreenString("PROCESSED"), chainTx.Height, chainTx.Index, chainTx.Processor)
-				nc.log.Info(msg)
-			}
-			if err := nc.updateProcessedUpToHeight(chainTx.Height, chainTx.Index); err != nil {
-				return err
-			}
+			//nc.log.Info(("incoming tx"))
+			go func() error {
+				if err := processFn(chainTx); err != nil {
+					msg := fmt.Sprintf("TX %s Block:%v Index:%v Error:%v", color.RedString("FAILURE"), chainTx.Height, chainTx.Index, err)
+					nc.log.Info(msg)
+				} else {
+					orderRef := chainTx.Tags["reference"]
+					msg := fmt.Sprintf("TX %s Block:%v Index:%v Type:%v Ref:%v", color.GreenString("PROCESSED"), chainTx.Height, chainTx.Index, chainTx.Processor, orderRef)
+					nc.log.Info(msg)
+				}
+				if err := nc.updateProcessedUpToHeight(chainTx.Height, chainTx.Index); err != nil {
+					return err
+				}
+				return nil
+			}()
 
 			// TODO: store the last block height
 		case <-ctx.Done():
diff --git a/r4 b/r4
new file mode 100755
index 0000000..6470df2
--- /dev/null
+++ b/r4
@@ -0,0 +1,5 @@
+GO111MODULE=on go build -o target/milagro github.com/apache/incubator-milagro-dta/cmd/service
+export MILAGRO_HOME=~/.milagro4
+target/milagro daemon
+
+
