lazy eval = reduce
should not be there