That looks fine, except for this problem with a tab: +#define virtual_reg(n) saved_reg(fake_reg, n) +#define MR_virtual_succip MR_saved_succip(fake_reg) Don't modify mercury_trace.c yet to use the new macros; wait until I commit my next change. Zoltan.