break this out into its own class