Broke out into additional files, improved setup