refinements to reduce()

still need to format to Dave's requirements