move more of throw+ into a helper function: throw-fn