initial macro impl