split new implementation into modules