use macroses instead explicit checks