factored into subsystems