new refactored class