hide implementation details