As it turns out I did not understand the documenation for load/upgrade/unload correctly. load/upgrade are called conditionally if there's code in the VM for the NIF. Ie, no code means load is called, where as if code exists, upgrade is called. unload is called regardless once per load/unload. This means that load/upgrade in Jiffy's case will each create a state object and unload will free it each time. I was missing the fact that unload is called every time and hence I don't need to clear the state in upgrade.pull/29/head 0.5.2