next step change use struc instead of macro