extracted class for single responsibility