more API/implementation separation