diff --git a/test/integration/_blockchain.js b/test/integration/_blockchain.js
index f6bfb9f..1265f37 100644
--- a/test/integration/_blockchain.js
+++ b/test/integration/_blockchain.js
@@ -8,30 +8,37 @@ var mainnet = new Blockchain('https://api.blocktrail.com/cb/v0.2.1/BTC', { api_k
 var testnet = new Blockchain('https://api.blocktrail.com/cb/v0.2.1/tBTC', { api_key: BLOCKTRAIL_API_KEY })
 
 testnet.faucet = function faucet (address, amount, done) {
-  async.retry(5, function (callback) {
-    httpify({
-      method: 'POST',
-      url: 'https://api.blocktrail.com/v1/tBTC/faucet/withdrawl?api_key=' + BLOCKTRAIL_API_KEY,
-      headers: { 'Content-Type': 'application/json' },
-      body: JSON.stringify({
-        address: address,
-        amount: amount
-      })
-    }, function (err) {
-      if (err) return callback(err)
-
-      testnet.addresses.unspents(address, function (err, result) {
-        if (err) return callback(err)
-
-        var unspent = result.filter(function (unspent) {
-          return unspent.value > 1e3
-        }).pop()
-
-        if (!unspent) return callback(new Error('No unspent given'))
-        callback(null, unspent)
-      })
+  httpify({
+    method: 'POST',
+    url: 'https://api.blocktrail.com/v1/tBTC/faucet/withdrawl?api_key=' + BLOCKTRAIL_API_KEY,
+    headers: { 'Content-Type': 'application/json' },
+    body: JSON.stringify({
+      address: address,
+      amount: amount
     })
-  }, done)
+  }, function (err, result) {
+    if (err) return done(err)
+
+    if (result.body.code === 401) {
+      return done(new Error('Hit faucet rate limit; ' + result.body.msg))
+    }
+
+    // allow for TX to be processed
+    async.retry(5, function (callback) {
+      setTimeout(function () {
+        testnet.addresses.unspents(address, function (err, result) {
+          if (err) return callback(err)
+
+          var unspent = result.filter(function (unspent) {
+            return unspent.value >= amount
+          }).pop()
+
+          if (!unspent) return callback(new Error('No unspent given'))
+          callback(null, unspent)
+        })
+      }, 600)
+    }, done)
+  })
 }
 
 module.exports = {
diff --git a/test/integration/multisig.js b/test/integration/multisig.js
index 16f3f00..6775bd8 100644
--- a/test/integration/multisig.js
+++ b/test/integration/multisig.js
@@ -1,5 +1,6 @@
 /* global describe, it */
 
+var async = require('async')
 var assert = require('assert')
 var bitcoin = require('../../')
 var blockchain = require('./_blockchain')
@@ -40,6 +41,9 @@ describe('bitcoinjs-lib (multisig)', function () {
     blockchain.t.faucet(address, 2e4, function (err, unspent) {
       if (err) return done(err)
 
+      var fee = 1e4
+      var targetValue = unspent.value - fee
+
       // make a random destination address
       var targetAddress = bitcoin.ECPair.makeRandom({
         network: bitcoin.networks.testnet
@@ -47,7 +51,7 @@ describe('bitcoinjs-lib (multisig)', function () {
 
       var txb = new bitcoin.TransactionBuilder(bitcoin.networks.testnet)
       txb.addInput(unspent.txId, unspent.vout)
-      txb.addOutput(targetAddress, 1e4)
+      txb.addOutput(targetAddress, targetValue)
 
       // sign with 1st and 3rd key
       txb.sign(0, keyPairs[0], redeemScript)
@@ -60,16 +64,22 @@ describe('bitcoinjs-lib (multisig)', function () {
       blockchain.t.transactions.propagate(tx.toHex(), function (err) {
         if (err) return done(err)
 
-        // check that the above transaction included the intended address
-        blockchain.t.addresses.unspents(targetAddress, function (err, unspents) {
-          if (err) return done(err)
+        // allow for TX to be processed
+        async.retry(5, function (callback) {
+          setTimeout(function () {
+            // check that the above transaction included the intended address
+            blockchain.t.addresses.unspents(targetAddress, function (err, unspents) {
+              if (err) return callback(err)
 
-          assert(unspents.some(function (unspent) {
-            return unspent.txId === txId && unspent.value === 1e4
-          }))
+              var unspentFound = unspents.some(function (unspent) {
+                return unspent.txId === txId && unspent.value === targetValue
+              })
 
-          done()
-        })
+              if (!unspentFound) return callback(new Error('Could not find unspent after propagate'))
+              callback()
+            })
+          }, 600)
+        }, done)
       })
     })
   })