split up the implementation and the code