This implementation of the interface should probably also be in its own file