             }.resume()
     }
 
+    /// Update `request` with 'application/json' headers and the httpMethod
+    internal func decorateRequest (_ request: inout URLRequest, httpMethod: String) {
+        request.addValue ("application/json", forHTTPHeaderField: "Accept")
+        request.addValue ("application/json", forHTTPHeaderField: "Content-Type")
+        request.httpMethod = httpMethod
+    }
+
+    /// Make a reqeust but w/o the need to create a URL.  Just create a URLRequest, decorate it,
+    /// and then send it off.
+    internal func makeRequest<T> (_ dataTaskFunc: DataTaskFunc,
+                                  url: URL,
+                                  httpMethod: String = "POST",
+                                  completion: @escaping (Result<T, QueryError>) -> Void) {
+        var request = URLRequest (url: url)
+        decorateRequest(&request, httpMethod: httpMethod)
+        sendRequest (request, dataTaskFunc, completion: completion)
+    }
+
+    /// Make a request by building a URL request from baseURL, path, query and data.  Once we have
+    /// a request, decorate it and then send it off.
     internal func makeRequest<T> (_ dataTaskFunc: DataTaskFunc,
                                   _ baseURL: String,
                                   path: String,

        }

        sendRequest (request, dataTaskFunc, completion: completion)
    }

    internal func bdbMakeRequest (path: String,


                let semaphore = DispatchSemaphore (value: 0)

                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

                        // 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()
                    }
