Hi Mike,
I tried a DO-WHILE construct and I'm quite surprised by the results. I moved the starting and stopping back to where I had it originally and with the DO-WHILE I get 1496 cycles instead of 1730 for the 9 test-bytes. A 67 byte array, previously taking ~12600 cycles now executes in ~10800. Getting there....

Here's the current ASM code:
Code:
0012A0                    M _MB_CRC_16
0012A0 6831               M         setf    _MB_CRC
0012A2 6832               M         setf    (_MB_CRC) + 1
0012A4 0E03               M         movlw   003h
0012A6 5C3F               M         subwf   _MB_Buffer_Ptr, W
0012A8 6E42               M         movwf   _MB_k
0012AA 6A40               M         clrf    _MB_i
0012AC                    M L00108
0012AC 0004               M         clrwdt
0012AE 5040               M         movf    _MB_i, W
0012B0 5C42               M         subwf   _MB_k, W
0012B2 A0D8               M         btfss   STATUS, C
0012B4 EF80 F009          M         goto    L00109
0012B8 5040               M         movf    _MB_i, W
0012BA 0F56               M         addlw   low (_MB_Buffer)
0012BC 6EE9               M         movwf   FSR0L
0012BE 0E01               M         movlw   (_MB_Buffer) >> 8
0012C0 6AEA               M         clrf    FSR0H
0012C2 22EA               M         addwfc  FSR0H, F
0012C4 CFEF F013          M         movff   INDF0, T1
0012C8 5013               M         movf    T1,  W
0012CA 1A31               M         xorwf   _MB_CRC, F
0012CC 6A41               M         clrf    _MB_j
0012CE                    M L00110
0012CE 0004               M         clrwdt
0012D0 B641               M         btfsc   _MB_j, 003h
0012D2 EF7D F009          M         goto    L00111
0012D6 0004               M         clrwdt
0012D8 A031               M         btfss   _MB_CRC, 000h
0012DA EF78 F009          M         goto    L00112
0012DE 90D8               M         bcf     STATUS, C
0012E0 3232               M         rrcf    _MB_CRC + 1, F
0012E2 3231               M         rrcf    _MB_CRC, F
0012E4 0E01               M         movlw   low (0A001h)
0012E6 1A31               M         xorwf   _MB_CRC, F
0012E8 0EA0               M         movlw   (0A001h) >> 8
0012EA 1A32               M         xorwf   _MB_CRC + 1, F
0012EC EF7B F009          M         goto    L00113
0012F0                    M L00112
0012F0 90D8               M         bcf     STATUS, C
0012F2 3232               M         rrcf    _MB_CRC + 1, F
0012F4 3231               M         rrcf    _MB_CRC, F
0012F6                    M L00113
0012F6 2A41               M         incf    _MB_j, F
0012F8 D7EA               M         bra     L00110
0012FA                    M L00111
0012FA 2A40               M         incf    _MB_i, F
0012FC A0D8               M         btfss   STATUS, C
0012FE D7D6               M         bra     L00108
001300                    M L00109
001300 0012               M         return
/Henrik.