object hierarchy refactoring