Great! thank you for your reply,

let me get this straight.
-TXREG and RCREG is the buffer where a byte is stored whether it is going to be sent or received
-TXIF and RCIF determines whether the buffer is empty or full for tx and rx.
Also depending on whether i have an interrupt enabled (TXIE or RCIE) it will fire but both get set regardless.
-HSERIN/HSEROUT does not run in the background

my question is now, how does this compare to serin2/serout2. what does UART have special that i can't do in software with serin2/serout2 (which i can use any pin by the way)?

if i want to synch a message with a character will i not use:
HSERIN [wait("a"), dat]
but if i use this the SW will be hung at this line waiting for that character, where as if i use
serin2[wait("a"), dat]
is the same.