use interface for criteria instead of actual object, will allow users to implement their own