I see your point. I understand your implementation, but nevertheless I think it's prone to errors and leads to misunderstanding. Since AD-X didn't make their tracker a shared instance, I assume this is not required to be one. Since the tracker does not leverage any functionality of serving the tracker as a shared instance, I think you don't have to have a shared instance around. So simply initialise a new instance of the ADXTracking class, when you need it and then it'll be destroyed, when no longer retained anywhere. For the tracker wrapper I don't see any advantages to using a shared instance of that class, so this should be just fine.