switch to a field wrapper so we don't need the shared_ptr