Just use a single gen_server to do all the work