do not return collection if criteria not met

check filter criteria in closure and return collection if met and null
if not met. also renamed some classes and functions to make the whole
thing more explicit.