refactor with macros