pull some initializations into their constructors to prevent potential leaking later and document some of our magic properties