abstract worker implementation