Introduce a propagator factory and Add an abstract algorithm factory and use that in system_t. This means the actual factory must be passed as argument to the relevant routine.
system_t