extracted to separate file and class