 
                 let semaphore = DispatchSemaphore (value: 0)
 
-                //            var moreResults = false
-                var begBlockNumber = begBlockNumber
-
-                for begHeight in stride (from: begBlockNumber, to: endBlockNumber, by: 5000) {
-                    if nil != error { break }
-                    queryVals[1] = begHeight.description
-                    queryVals[2] = min (begHeight + 5000, endBlockNumber).description
-
-                    //                moreResults = false
-
-                    self.bdbMakeRequest (path: "transactions", query: zip (queryKeys, queryVals)) {
+                var nextURL: URL? = nil
+
+                queryVals[1] = begBlockNumber.description
+                queryVals[2] = endBlockNumber.description
+
+                // Make the first request.  Ideally we'll get all the transactions in one gulp
+                self.bdbMakeRequest (path: "transactions", query: zip (queryKeys, queryVals)) {
+                    (more: URL?, res: Result<[JSON], QueryError>) in
+
+                    // Append `transactions` with the resulting transactions.
+                    results += try! res
+                        .flatMap { BlockChainDB.getManyExpected(data: $0, transform: Model.asTransaction) }
+                        .recover { error = $0; return [] }.get()
+
+                    nextURL = more
+
+                    semaphore.signal()
+                }
+
+                // Wait for the first request
+                semaphore.wait()
+
+                // Loop until all 'nextURL' values are queried
+                while let url = nextURL, nil == error {
+                    self.bdbMakeRequest (url: url, embedded: true, embeddedPath: "transactions") {
                         (more: URL?, res: Result<[JSON], QueryError>) in
-                        // Flag if `more`
-                        //                    moreResults = more
 
                         // Append `transactions` with the resulting transactions.
                         results += try! res
                             .flatMap { BlockChainDB.getManyExpected(data: $0, transform: Model.asTransaction) }
                             .recover { error = $0; return [] }.get()
 
-                        if let _ = more, nil == error {
-                            begBlockNumber = results.reduce(0) {
-                                max ($0, ($1.blockHeight ?? 0))
-                            }
-                        }
+                        nextURL = more
 
                         semaphore.signal()
                     }

        }

        sendRequest (request, dataTaskFunc, completion: completion)
    }

    internal func bdbMakeRequest (path: String,

                let size     = json.asUInt64 (name: "size")
                else { return nil }

            let acks     = json.asUInt64 (name: "acknowledgements") ?? 0
            let header   = json.asString (name: "header")
            let raw      = json.asData   (name: "raw")
            let prevHash = json.asString (name: "prev_hash")
