Revert some of my previous changes, use defines to build specific implementation (see README)