Currently, extending GraphView.Port implementation or even changing a Node's rules on how they show ports is very limited. I wanted to change the rules for a specific type of node to always show certain ports even when collapsed. And even though Node.RefreshPorts() is not virtual, its still for the most part doable. but I noticed that the port.OnConnect and port.OnDisconnect delegates were internal which complicates things. Then I looked at the implementation for Port.Connect(),.Disconnect(), and .DisconnectAll(). These functions actually invoke the said internal delegates, but the functions themselves have the virtual modifier. This presents a limitation on extending Ports because one that is overriding said functions can't invoke these delegates without being forced to call the base implementations. And in my case I also want to override said functions because m_connections used in these functions is a HashSet and some of my Ports would like to enforce an order on connected edges (the order of edges on a port would imply priority for nodes that would need that context). For now I'm to resorting to making duplicate delegates and some reflection (in case the internals are invoked, so they also invoke my delegates) just so I can add my own OnPortConnect handlers for my nodes, which feels really, really ugly. It just seems that OnConnect and OnDisconnect being made internal feels arbitrary. I'd like that either the delegates are made public or at least protected with some "AddListener/RemoveListener" interface.