Modify the forward macro to use do block