moved evaluation to its own module to separate concerns