lazy arguments can be toggled - haven't added memoization yet