split up logic into several files for custom map types