use lazy vals to prevent huge outputs