split up core module into parts