macro is closer to complete implementation