starting lazy-evaluation design with huge suggestions by @forresto