ehhh, a mcaro is a bit much. rewriting to take a function