All this makes perfect sense to me! The ICD mode operates by running a special version of the code which contains "hooks" to the debug code (loaded at the end of memory) which in turn handshakes with the ICD/ programming interface. Or is it a CONFIG option (single-step interrupt mode set)? If it can't handshake with that interface, it naturally hangs trying to do so. To operate *without* the ICD interface, you have to compile a version of the code without the "hooks" *and* re-program the chip with that *different* code. Verification fails presumably because the "talker" (to borrow the Motorola term) code at the top of program memory is added from a separate source during programming. That is indeed avoided by not verifying (or re-programming) the section of memory containing the interrupt server. -- Cheers, Paul B.