Everything per comments. Tested well. Needs name changing and tests.