fine tune on gen_server and supervisor.