laid out, client constructor, destructor