     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> (

    
    private var sendContinuations = [UInt: (Swift.Error) -> ()]()
    
    // MARK: - Initialization
    
    public init(
        socket: L2CAPSocket,

        assert(Response.attributeOpcode != .errorResponse)
        assert(Response.attributeOpcode.type == .response)
        assert(Request.attributeOpcode.type != .response)
        log?("Request: \(request)")
        sendID += 1
        let id = sendID
        return try await withCheckedThrowingContinuation { [unowned self] continuation in
            Task {
                let responseType: ATTProtocolDataUnit.Type = response
                // callback if no I/O errors or disconnect
                let callback: (ATTProtocolDataUnit) -> () = {
                    self.log?("Response: \($0)")
                    self.sendContinuations[id] = nil
                    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)") }
                // store continuation in case it doesnt get called
                self.sendContinuations[id] = { error in
                    continuation.resume(throwing: error)
                }
            }
        }
    }
