diff --git a/test/integration/_blockchain.js b/test/integration/_blockchain.js
index bb2b6b8..ac77e50 100644
--- a/test/integration/_blockchain.js
+++ b/test/integration/_blockchain.js
@@ -8,40 +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) {
-  var unspents = []
+  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)
 
-  async.whilst(
-    function condition () { return unspents.length === 0 },
-    function f (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) {
+      testnet.addresses.unspents(address, function (err, result) {
         if (err) return callback(err)
 
-        testnet.addresses.unspents(address, function (err, result) {
+        var unspent = result.filter(function (unspent) {
+          return unspent.value > 1e3
+        }).pop()
+
+        testnet.transactions.get(unspent.txId, function (err, tx) {
           if (err) return callback(err)
 
-          // filter small unspents
-          unspents = result.filter(function (unspent) {
-            return unspent.value > 1e3
-          })
+          testnet.transactions.propagate(tx.txHex, function (err) {
+            if (err) return callback(err)
 
-          callback()
+            callback(null, unspent)
+          })
         })
       })
-    },
-    function (err) {
-      if (err) return done(err)
-
-      done(null, unspents)
-    }
-  )
+    })
+  }, done)
 }
 
 module.exports = {
diff --git a/test/integration/advanced.js b/test/integration/advanced.js
index 3abb665..c28e78d 100644
--- a/test/integration/advanced.js
+++ b/test/integration/advanced.js
@@ -28,11 +28,9 @@ describe('bitcoinjs-lib (advanced)', function () {
     var keyPair = bitcoin.ECPair.makeRandom({ network: network })
     var address = keyPair.getAddress()
 
-    blockchain.t.faucet(address, 2e4, function (err, unspents) {
+    blockchain.t.faucet(address, 2e4, function (err, unspent) {
       if (err) return done(err)
 
-      // use the oldest unspent
-      var unspent = unspents.pop()
       var tx = new bitcoin.TransactionBuilder(network)
       var data = new Buffer('bitcoinjs-lib')
       var dataScript = bitcoin.script.nullDataOutput(data)
@@ -76,12 +74,9 @@ describe('bitcoinjs-lib (advanced)', function () {
     beforeEach(function (done) {
       this.timeout(10000)
 
-      blockchain.t.faucet(alice.getAddress(), 2e4, function (err, unspents) {
+      blockchain.t.faucet(alice.getAddress(), 2e4, function (err, unspent) {
         if (err) return done(err)
 
-        // use the oldest unspent
-        var unspent = unspents.pop()
-
         // build the transaction
         var tx = new bitcoin.TransactionBuilder(network)
         tx.addInput(unspent.txId, unspent.vout)
diff --git a/test/integration/multisig.js b/test/integration/multisig.js
index 1a211d5..83f0e81 100644
--- a/test/integration/multisig.js
+++ b/test/integration/multisig.js
@@ -37,12 +37,9 @@ describe('bitcoinjs-lib (multisig)', function () {
     var address = bitcoin.address.fromOutputScript(scriptPubKey, bitcoin.networks.testnet)
 
     // attempt to send funds to the source address
-    blockchain.t.faucet(address, 2e4, function (err, unspents) {
+    blockchain.t.faucet(address, 2e4, function (err, unspent) {
       if (err) return done(err)
 
-      // use the oldest unspent
-      var unspent = unspents.pop()
-
       // make a random destination address
       var targetAddress = bitcoin.ECPair.makeRandom({
         network: bitcoin.networks.testnet