only create instance if needed