using ES6 here makes this so much nicer!
OK! Class-based rewrite looking good!
got the hard flag working. Need a better name.