tiny decomposition refactor