refactoring part 2
refactoring part 3
refactoring part 4
refactoring part 5
refactoring part 6
refactoring part 7