refactors to using more common prototype pattern, instead of Object.create. Also more succinct in many cases