more work on lazy evaluation