BLF lights on Grandstream GXP2100 timeout

Hi all. This is my first post after a lot of reading so please be gentle!
I have a Freepbx server running The server is hosted on a public IP (and secured thanks to great advice on this board!).
We are running several Grandstream GXP2100 handsets on a couple of different IPs all using NAT.
The phones and the system work fine with virtually no downtime.
The problem I have and can’t seem to find a solution to is that we have BLFs set up for each of the phones on each phone so that we can see who is on their phone and answer their calls. After a while (a day or two sometimes) the BLF lights do not reflect the status of the extensions and so we cannot pick up the calls like we used to.
I have read a lot about the BLF / hint / subscription and they all say that the hints are related to the SIP subscription packets that Freepbx and teh phone sexchange. I cannot work out why the phones stay registered (so the subscription packets) are getting through but the BLF lights do not stay working.
Any helpful words of advice about this would be appreciated as I have been reading so many posts all over the internet but cannot seem to find an answer. If somebody can point me to a definitive solution then I am more than happy to look stupid if I missed it!
Many thanks in advance.