I plan to improve this later to make it self contained into one script file rather than having to separate them yourselves.