hiding implementation details