This has so many args you might want to consider using a builder pattern