Broke up new implementation into modules