abstract that macros