moving core into its own project and including here