THIS WILL NOT COMPILE!!! i'm still working on it to @cam900: DO NOT PULL TO YOUR ES5506 BRANCH YET - wait until I am done with this refactor to @grauw: DO NOT PULL TO YOUR OPL4 BRANCH YET - wait until I am done with this refactor