abstracted Object.defineProperty calls for easier inheritance
merge diffs