Well, I have seen that SNI uses two different classes on it's own. They are only used in the implementation and should never be part of public API. (There are 3 of them if you consider SNIP). What I think is that all those private class can expose all their attributes and stuff in a public way. Or if you want the ref count to be private, you might need some methods that the SNIP will call instead.

Anyway, that needs to be investigated.