better macro structure