fixed recursive macro