separating implementation and interface some more