lots of setup, probably some unnecessary