I'm confused. I don't see how the "do { ... } while(0)" variant of the macro would fail in current wi.c sources - what am I missing? man DELAY(9) says: void DELAY(unsigned int us); so what "use as an expression" are we talking about? You can't use void functions as expressions, can't you? Martin