Separate interface from implementation