I have modified my code in line with the suggestions regarding relocatable code and using UDATA and let the compiler take care of the allocation. I think I am missing the point as it has become more difficult for me to code. This may be because I am used to the old approach. Apart from loosing the ability to access 2 x 80 byte blocks of ram as single 160 byte block of data by simply changing some bits in the status register as I detailed in a previous post. I now find that I must use banksel directives everywhere because I do not know if the compiler has put the GPR I am referencing in the same bank as a special purpose register I am referencing. For example banksel PORTB movfw PORTB banksel shadow movwf shadow bsf shadow,OVEN ;Curently ON at start should be off bsf shadow,TC_CS ;This starts conversions on max chip as chip is not selected movfw shadow banksel PORTB movwf PORTB Before, I rarely needed a banksel directive, but now I found that I need to use them whenever I am referencing any register. I guess if I resign myself to this fact then I can move on. I do remember reading somewhere that PIC chips can release significant speed performances as almost every instruction is executed in one program clock cycle. But if I have to use banksel everwhere then not so efficient I think. Perhaps I need to look at AVRs I am doing something wrong and missing the point. Cheers Justin --=20 http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .