split the integrator out into its own class