Add begetWithDispose, simplify beget