* using more macros
* reduced compiled code size