hide the implementation details