added interfaces for eventual unit testing