Split everything off into its own class for ease of use. Setup top level instance vars