--- /dev/null
+diff --git a/icu4c/source/i18n/vtzone.cpp b/icu4c/source/i18n/vtzone.cpp
+index 3035106701..5e738e11fa 100644
+--- a/icu4c/source/i18n/vtzone.cpp
++++ b/icu4c/source/i18n/vtzone.cpp
+@@ -1735,14 +1735,14 @@ VTimeZone::write(VTZWriter& writer, UErrorCode& status) const {
+ }
+ }
+ } else {
+- UnicodeString icutzprop;
+- UVector customProps(nullptr, uhash_compareUnicodeString, status);
++ UVector customProps(uprv_deleteUObject, uhash_compareUnicodeString, status);
+ if (olsonzid.length() > 0 && icutzver.length() > 0) {
+- icutzprop.append(olsonzid);
+- icutzprop.append(u'[');
+- icutzprop.append(icutzver);
+- icutzprop.append(u']');
+- customProps.addElement(&icutzprop, status);
++ LocalPointer<UnicodeString> icutzprop(new UnicodeString(ICU_TZINFO_PROP), status);
++ icutzprop->append(olsonzid);
++ icutzprop->append(u'[');
++ icutzprop->append(icutzver);
++ icutzprop->append(u']');
++ customProps.adoptElement(icutzprop.orphan(), status);
+ }
+ writeZone(writer, *tz, &customProps, status);
+ }