         
         let completion = try player.playTrack(forRequest: request)
         
-        return URLSessionTask(completion: { completionHandler(completion) })
+        return URLSessionTask(completion: { self.operationQueue.addOperationWithBlock { completionHandler(completion) } })
     }
     
     private func playVinyl(request: NSURLRequest, fromData bodyData: NSData?, completionHandler: RequestCompletionHandler) throws -> NSURLSessionUploadTask {

        uploadRequest.HTTPBody = bodyData
        let completion = try player.playTrack(forRequest: uploadRequest)
        
        return URLSessionUploadTask(completion: { completionHandler(completion) })
    }

    // MARK: - NSURLSession methods

    var errorHandler: ErrorHandler = DefaultErrorHandler()
    private let turntableConfiguration: TurntableConfiguration
    private var player: Player?
    private let operationQueue: NSOperationQueue
    
    public init(configuration: TurntableConfiguration, delegateQueue: NSOperationQueue? = nil) {
        
        self.turntableConfiguration = configuration
        if let delegateQueue = delegateQueue {
            self.operationQueue = delegateQueue
        } else {
            self.operationQueue = NSOperationQueue()
            self.operationQueue.maxConcurrentOperationCount = 1
        }
        super.init()
    }
    
    public convenience init(vinyl: Vinyl, turntableConfiguration: TurntableConfiguration, delegateQueue: NSOperationQueue? = nil) {
        
        self.init(configuration: turntableConfiguration, delegateQueue: delegateQueue)
        self.player = Turntable.createPlayer(vinyl, configuration: turntableConfiguration)
    }
    
    public convenience init(cassetteName: String, bundle: NSBundle = testingBundle(), turntableConfiguration: TurntableConfiguration = TurntableConfiguration(), delegateQueue: NSOperationQueue? = nil) {
        
        let vinyl = Vinyl(plastic: Turntable.createCassettePlastic(cassetteName, bundle: bundle))
        self.init(vinyl: vinyl, turntableConfiguration: turntableConfiguration, delegateQueue: delegateQueue)
    }
    
    public convenience init(vinylName: String, bundle: NSBundle = testingBundle(), turntableConfiguration: TurntableConfiguration = TurntableConfiguration(), delegateQueue: NSOperationQueue? = nil) {
        
        let plastic = Turntable.createVinylPlastic(vinylName, bundle: bundle)
        self.init(vinyl: Vinyl(plastic: plastic), turntableConfiguration: turntableConfiguration, delegateQueue: delegateQueue)
    }
    
    // MARK: - Private methods
