Broke up the source into several modules.