I've been monitoring a few of my imps recently and would like to understand how hardware.wakereason() determines which value to return. I call hardware.wakereason() as part of my device initialisation and log it for later review. If I deploy new FW to an imp by clicking on "Build and Run", I can expect to see an imp restart with the value WAKEREASON_NEW_SQUIRREL (4). If an imp encounters a run-time error that forces a restart, I'll get a WAKEREASON_TIMER (1) instead. However, if I deploy to a single imp when there other other imps using the same "Model" , it seems to be the case that the next restart that occurs for the others will also be logged as a WAKEREASON_NEW_SQUIRREL, rather than the actual reason why it restarted. This is moderately frustrating. I can understand that the OS might want to take advantage of the restart to upgrade the firmware, but it doesn't seem right to mask out the real reason for the restart. Wouldn't it be better to use a single bit in the value hardware.wakereason() return value to indicate the new FW and/or a new OS were downloaded without overwriting the original reason?