I've been running my own modifed GSM shield for a year, and as people have discovered the libraries works in the lab. But once out there in the wild, the things fail. If you look really deeply into the M10 datasheets the reset line of the module should be connected to the Arduino. There are some network issues that simply hangs the modem in an unknown state. Typically if a GPRS connection is lost and not disconnected properly.
My take on this is to connect the reset line to an IO pin of the Arduino, then modify the libraries as been posted here, but also to insert a watchdog timer. The built in watchdog is to fast with just 8 seconds maximum so either a software interrupt that makes it longer or a hardware watchdog. I've used both so far...
If I were to do this project again I would not use the Arduino GSM libraries but just raw AT-commands. Every communication step can and will fail and I need to adjust the timeouts on these events.