separated out data into its own struct