     private func registerATTHandlers() async  {
         
         // value notifications / indications
-        await connection.register { [weak self] in await self?.notification($0) }
-        await connection.register { [weak self] in await self?.indication($0) }
+        await connection.register { [unowned self] in
+            self.notification($0)
+        }
+        await connection.register { [unowned self] in
+            await self.indication($0)
+        }
     }
     
     private func send <Request: ATTProtocolDataUnit, Response: ATTProtocolDataUnit> (

        assert(Response.attributeOpcode != .errorResponse)
        assert(Response.attributeOpcode.type == .response)
        assert(Request.attributeOpcode.type != .response)
        let log = self.log
        log?("Request: \(request)")
        return try await withCheckedThrowingContinuation { [weak self] continuation in
            guard let self = self else { return }
            Task {
                let responseType: ATTProtocolDataUnit.Type = response
                // callback if no I/O errors or disconnect
                let callback: (ATTProtocolDataUnit) -> () = {
                    log?("Response: \($0)")
                    continuation.resume(returning: ATTResponse<Response>($0))
                }
                guard let _ = await self.connection.queue(request, response: (callback, responseType))
                    else { fatalError("Could not add PDU to queue: \(request)") }
            }
        }
    }

    
    private var sendContinuations = [UInt: (Swift.Error) -> ()]()
    
    private var sendID: UInt = 0
    
    // MARK: - Initialization
    
    deinit {
        sendContinuations.values.forEach { continuation in
            continuation(CancellationError())
        }
        sendContinuations.removeAll()
    }
    
    public init(
        socket: L2CAPSocket,
