add 5th method using apply(fn), update comments