added the lazy evaluation feature