refactored object composition