split out builder and config to keep the interface clean