**Update 14** My mentor reviewed the PR and suggested a few changes: 1. **Log levels:** I was advised to revise the log levels across the changes. The goal is to: - Use *trace* level for significant steps. - Use *debug* level for main steps and issues with handling incoming data from remote peers. 2. **Redundant spaces and formatting:** I addressed some redundant spaces and formatting details in the code. 3. **Protocol updates in the constructor:** Initially, I was using an `SSLApplicationProtocol` list in the TLS protocol constructor. My mentor recommended using `MultiplexerSettings` instead, as the Application Protocol Negotiation is crucial for muxer selection. I updated the code to convert the list of `MultiplexerSettings.Muxers` into `SslApplicationProtocols`. 4. **Late initialization of SSLApplicationProtocols:** Since `MultiplexerSettings` is used by muxer protocols to register themselves before communication starts, there's a possibility that the `TlsProtocol` might be created before the muxers are registered, resulting in empty settings. To handle this, instead of creating the list of `SslApplicationProtocols` immediately, I moved its creation to the `ListenAsync` and `DialAsync` methods where it's actually needed. While this might seem less efficient, it ensures everything works as expected. After making these improvements, my PR was finally merged! 🎉 You can check it out here: https://github.com/NethermindEth/dotnet-libp2p/pull/104/ Also, I posted a thread detailing the libp2p TLS 1.3 protocol. It explains how the TLS protocol works, along with my merged PR for the full implementation of TLS 1.3 for Nethermind's .NET libp2p. Take a look: https://x.com/0xrosetteeee/status/1838580914965876931?s=46