separating out implementations and interfaces