split worker functions to 3 types, beta 1