I think this interface should be in its own file for understandability