refactored split-up