Separate interface and impl