Refactoring - working solution not completely finish