At+CGREG IS NEEDED?

From what I’ve seen the module automatically registeres to network on startup. Afterwards, it automatically attaches to GPRS. Meaning, I dont have to send “AT+CGATT=1” to attach to GPRS but only query the status and wait.
Untill yesterday I was waiting for AT+CGREG? To return either CGREG: 0,1 or CGREG: 0,5. When it did, I knew that bringing up the wireless connection (SAPBR=1,1) is possible. Querying CGATT when CGREG is either 1 or 5 always return as 1(attached).
As mentioned before, we saw that even when CGREG is 0, querying CGATT might return 1 (attached) and bringing up the wireless connection is successful.
The bottom line question is whats right here when entering the transmission function?

We are transmitting in approximately 1 hour intervals but the user might request an instant transmission from time to time.
Between transmissions we put the module to sleep using DTR (CSCLK=1) and we dont keep track of its’ registration status until the next time we want to transmit. The maximum transmission size is 2Kbyes by http post request.

I know that the first thing to do after taking the module out of sleep is to wait for network registration (CREG). But whats next?
Should I query only CGATT or CGREG also?
Is there a need to manually attach (CGATT=1) and if so, when is the right time do it? Immidiately after I get registration or after some timeout?
And for last, should I detach from the GPRS (CGATT=0) and PDP context (SAPBR=0,1) at the end of the transmission?

Thank you!