still working on this but came to a good stopping point