split up sysyem initialisation and allow overriding