generator separated to single responsibility (in progress)