refactor first part
refactor part 3
refactor part 4
refactor part 5