I don't like that Package is both our interface and contains some shared implementation code. I rather it was just an interface.

But I don't think this is critical for now and we can fix along the way.