extract more fns out of macro