It's doing exactly what it's supposed to do. Either re-write the code and make duplicate copies of fnAdd, one for non-isr and one for isr operation. Or use the isr level-setting pragma iff you cannot possibly have a call to fnAdd while fnAdd is already running. This is because the PIC doesn't have a stack. All the RAM allocations are performed by the compiler. The poor little processor just isn't a PC Andy