here is an option in case someone runs into this same problem: if the process is run within a gen_server / gen_fsm, any method can call the gen_ to obtain or update the state: gen_server:call(self(), Request) gen_fsm:sync_send_all_state_event(self(), Event) then there is no need to lug the state around. not sure if this was mentioned.