hide some implementation details