rewriting to get rid of new constructor. planning on removing all the property descriptor cruft into a function