decomposition refactor