Hide implementation class and use factory methods instead