separate work from init