     }
     
     // MARK: - Initialiser
-    public init(appName: String? = nil, headers: [AnyHashable: Any]? = nil, timeout: TimeInterval = 60) {
+    public init(appName: String? = nil,
+                headers: [AnyHashable: Any]? = nil,
+                timeout: TimeInterval = 60,
+                queue: DispatchQueue = .main) {
         let configuration: URLSessionConfiguration = .ephemeral
         configuration.httpAdditionalHeaders = Constants.defaultHeaders
         configuration.userAgent(using: appName)

    public func execute<Model: Decodable>(request: URLRequest,
                                          with decoder: JSONDecoder = JSONDecoder(),
                                          handler: @escaping Handler<Model>) {
        // Ensure all our responses are back on the main thread
        let completion = { response in DispatchQueue.main.async { handler(response) }}
        
        #if os(Linux)
        // See https://gitlab.com/optimisedlabs/URLSessionRegression
        let session = URLSession(configuration: .default)

    // MARK: - Properties
    private let configuration: URLSessionConfiguration
    private let session: URLSession
    private let queue: DispatchQueue
    
    // MARK: - Structs
    private struct Constants {
