WIP doesn't pass the compiler (not due to the merge)
Helps avoiding dependency problems, because client code is no longer coupled to the implementation class