Hi David, I remember the hard time I had when my projects hit 2K boundary for the first time. I have developed some techniques to deal with pages, maybe you can adopt some of them. I always maintain PCLATH set to the current page for reasons mentioned in earlier post. Josef 1. Short routines can be copied in both (all) pages. A #define will take care about choosing the right one. You call them by short calls only. #define TXCHAR TXCHAR_#V($>>11) This routine can be copied (without changes) at every page (if needed). ; ------------------------------ ; TRANSMIT CHARACTER IN W ; ------------------------------ TXCHAR: BTFSS _TXIF GOTO TXCHAR MOVWF TXREG RETURN 2. Longer routines that make no (or very few) calls to the rest of the program can jump to another page. The routine can be called from page0 only, but takes up just two words of page0. page0: LONGSUB:BSF PCLATH,3 GOTO LONGSUB_CONT page1: LONGSUB_CONT: ....lot of code ....as few as possible calls to page0 BCF PCLATH,3 RETURN 3. Simplified access to routines in another page. Uses extra stack level. Call Anysub0 from page0, call Anysub1 from page1. page0: ANYSUB0:BSF PCLATH,3 CALL ANYSUB1 BCF PCLHATH,3 RETURN page1: ANYSUB1:....lot of code ....calls to page1 ....lot of code RETURN 4. Some other useful macros, I have no idea how they work, but I'd assume they are self-explanatory: BSFPCLH MACRO BIT IFNDEF __PCLATH __PCLATH SET 0 ENDIF BSF PCLATH,BIT __PCLATH SET __PCLATH | (0x01<