public void startup() {
        systems = systemProducer.createSystems();
        for (S system : systems) {
            if (system instanceof LifeCycleSystem) {
                lifeCycleSystems.add((LifeCycleSystem) system);
            }
        }

        for (LifeCycleSystem lifeCycleSystem : lifeCycleSystems) {
            lifeCycleSystem.preInitialize();
        }

        systemMap = systemInitializer.initializeSystems(systems);

        for (S system : systems) {
            if (system instanceof ContextAwareSystem) {
                ((ContextAwareSystem<S>) system).setContext(this);
            }
        }

        for (LifeCycleSystem lifeCycleSystem : lifeCycleSystems) {
            lifeCycleSystem.initialize();
        }
        for (LifeCycleSystem lifeCycleSystem : lifeCycleSystems) {
            lifeCycleSystem.postInitialize();
        }
    }