I have recently glanced at the ICD firmware and the very beginning catched my eye (see listing below). In the RCIF interrupt routine the RCREG is read _twice_ (at address 0011 and 0017). This is I guess OK, if there is only one byte in the FIFO, but wrong, if there are two characters waiting in the queue. I didn't analyze the rest of the program, I was just wondering if this could under certain circumstances cause communication problem with the ICD. The very simple solution would be to replace the second MOVF RCREG,W with XORLW D'24' instruction. Regards, Josef 0004 ORG 0004 0004 00FF MOVWF R7F 0005 0E03 SWAPF STATUS,W ;Assuming bank 0 0006 1283 BCF STATUS,RP0 0007 00FE MOVWF R7E 0008 080A MOVF PCLATH,W 0009 00FA MOVWF R7A ;Assuming page 0 000A 018A CLRF PCLATH 000B 1E8C BTFSS PIR1,RCIF 000C 2826 GOTO L3 ;0026 000D 0804 MOVF FSR,W 000E 00FC MOVWF R7C 000F 083C MOVF R3C,W 0010 0084 MOVWF FSR 0011 081A MOVF RCREG,W 0012 3A24 XORLW 24 ;'$' 0013 1D03 BTFSS STATUS,Z 0014 2817 GOTO L0 ;0017 0015 153F BSF R3F,2 0016 2822 GOTO L1 ;0022 0017 081A L0: MOVF RCREG,W 0018 0080 MOVWF INDF 0019 0800 MOVF INDF,W 001A 0ABC INCF R3C,F