diff --git a/src/extensions/dnatco/confal-pyramids/color.ts b/src/extensions/dnatco/confal-pyramids/color.ts
index e13b52ec71f322539dd776f9f68ff2e15ee14361..9f934e0eaa0d4cc43ff0530a13d15d106d5069ba 100644
--- a/src/extensions/dnatco/confal-pyramids/color.ts
+++ b/src/extensions/dnatco/confal-pyramids/color.ts
@@ -181,6 +181,6 @@ export const ConfalPyramidsColorThemeProvider: ColorTheme.Provider<ConfalPyramid
     isApplicable: (ctx: ThemeDataContext) => !!ctx.structure && ctx.structure.models.some(m => ConfalPyramids.isApplicable(m)),
     ensureCustomProperties: {
         attach: (ctx: CustomProperty.Context, data: ThemeDataContext) => data.structure ? ConfalPyramidsProvider.attach(ctx, data.structure.models[0], void 0, true) : Promise.resolve(),
-        detach: (data) => data.structure && data.structure.models[0].customProperties.reference(ConfalPyramidsProvider.descriptor, false)
+        detach: (data) => data.structure && ConfalPyramidsProvider.ref(data.structure.models[0], false)
     }
 };
diff --git a/src/extensions/pdbe/structure-quality-report/color.ts b/src/extensions/pdbe/structure-quality-report/color.ts
index 62af7edf0fa96f76da2271101fec6c9fb5e42c77..2ee57e131af487e02977dda52282156cb239d8c6 100644
--- a/src/extensions/pdbe/structure-quality-report/color.ts
+++ b/src/extensions/pdbe/structure-quality-report/color.ts
@@ -115,6 +115,6 @@ export const StructureQualityReportColorThemeProvider: ColorTheme.Provider<Param
     isApplicable: (ctx: ThemeDataContext) => StructureQualityReport.isApplicable(ctx.structure?.models[0]),
     ensureCustomProperties: {
         attach: (ctx: CustomProperty.Context, data: ThemeDataContext) => data.structure ? StructureQualityReportProvider.attach(ctx, data.structure.models[0], void 0, true) : Promise.resolve(),
-        detach: (data) => data.structure && data.structure.models[0].customProperties.reference(StructureQualityReportProvider.descriptor, false)
+        detach: (data) => data.structure && StructureQualityReportProvider.ref(data.structure.models[0], false)
     }
 };
\ No newline at end of file
diff --git a/src/extensions/rcsb/assembly-symmetry/color.ts b/src/extensions/rcsb/assembly-symmetry/color.ts
index 2540c62862bc6eec6feca84dde0f6b94b4e9791c..d91ada12f359f4c1615ccb0ac8e5366095270df3 100644
--- a/src/extensions/rcsb/assembly-symmetry/color.ts
+++ b/src/extensions/rcsb/assembly-symmetry/color.ts
@@ -109,6 +109,6 @@ export const AssemblySymmetryClusterColorThemeProvider: ColorTheme.Provider<Asse
     isApplicable: (ctx: ThemeDataContext) => AssemblySymmetry.isApplicable(ctx.structure),
     ensureCustomProperties: {
         attach: (ctx: CustomProperty.Context, data: ThemeDataContext) => data.structure ? AssemblySymmetryProvider.attach(ctx, data.structure, void 0, true) : Promise.resolve(),
-        detach: (data) => data.structure && data.structure.customPropertyDescriptors.reference(AssemblySymmetryProvider.descriptor, false)
+        detach: (data) => data.structure && AssemblySymmetryProvider.ref(data.structure, false)
     }
 };
\ No newline at end of file
diff --git a/src/extensions/rcsb/validation-report/color/density-fit.ts b/src/extensions/rcsb/validation-report/color/density-fit.ts
index 70d4b4b0aa1361f61427db01c981213f468561fc..44e92d6d7f453784b4f63882b6376a31f4d618e2 100644
--- a/src/extensions/rcsb/validation-report/color/density-fit.ts
+++ b/src/extensions/rcsb/validation-report/color/density-fit.ts
@@ -77,6 +77,6 @@ export const DensityFitColorThemeProvider: ColorTheme.Provider<{}, ValidationRep
     isApplicable: (ctx: ThemeDataContext) => !!ctx.structure && ValidationReport.isApplicable(ctx.structure.models[0]) && Model.isFromXray(ctx.structure.models[0]) && Model.probablyHasDensityMap(ctx.structure.models[0]),
     ensureCustomProperties: {
         attach: (ctx: CustomProperty.Context, data: ThemeDataContext) => data.structure ? ValidationReportProvider.attach(ctx, data.structure.models[0], void 0, true) : Promise.resolve(),
-        detach: (data) => data.structure && data.structure.models[0].customProperties.reference(ValidationReportProvider.descriptor, false)
+        detach: (data) => data.structure && ValidationReportProvider.ref(data.structure.models[0], false)
     }
 };
\ No newline at end of file
diff --git a/src/extensions/rcsb/validation-report/color/geometry-quality.ts b/src/extensions/rcsb/validation-report/color/geometry-quality.ts
index 9ce9167c69728fb494e6d676a91eecf06150c1fd..6e07f21af635fe576fd5f8c364bc22be70beeb80 100644
--- a/src/extensions/rcsb/validation-report/color/geometry-quality.ts
+++ b/src/extensions/rcsb/validation-report/color/geometry-quality.ts
@@ -115,6 +115,6 @@ export const GeometryQualityColorThemeProvider: ColorTheme.Provider<GeometricQua
     isApplicable: (ctx: ThemeDataContext) => ValidationReport.isApplicable(ctx.structure?.models[0]),
     ensureCustomProperties: {
         attach: (ctx: CustomProperty.Context, data: ThemeDataContext) => data.structure ? ValidationReportProvider.attach(ctx, data.structure.models[0], void 0, true) : Promise.resolve(),
-        detach: (data) => data.structure && data.structure.models[0].customProperties.reference(ValidationReportProvider.descriptor, false)
+        detach: (data) => data.structure && ValidationReportProvider.ref(data.structure.models[0], false)
     }
 };
\ No newline at end of file
diff --git a/src/extensions/rcsb/validation-report/color/random-coil-index.ts b/src/extensions/rcsb/validation-report/color/random-coil-index.ts
index 48f3d918f58dcb9869b95004ebac7bde7536b306..770fde98a92ca2f9cf22eafa495cabd94df5e4ad 100644
--- a/src/extensions/rcsb/validation-report/color/random-coil-index.ts
+++ b/src/extensions/rcsb/validation-report/color/random-coil-index.ts
@@ -68,6 +68,6 @@ export const RandomCoilIndexColorThemeProvider: ColorTheme.Provider<{}, Validati
     isApplicable: (ctx: ThemeDataContext) => !!ctx.structure && ValidationReport.isApplicable(ctx.structure.models[0]) && Model.isFromNmr(ctx.structure.models[0]),
     ensureCustomProperties: {
         attach: (ctx: CustomProperty.Context, data: ThemeDataContext) => data.structure ? ValidationReportProvider.attach(ctx, data.structure.models[0], void 0, true) : Promise.resolve(),
-        detach: (data) => data.structure && data.structure.models[0].customProperties.reference(ValidationReportProvider.descriptor, false)
+        detach: (data) => data.structure && ValidationReportProvider.ref(data.structure.models[0], false)
     }
 };
\ No newline at end of file
diff --git a/src/mol-model-props/computed/themes/accessible-surface-area.ts b/src/mol-model-props/computed/themes/accessible-surface-area.ts
index 2cb2c552a77ed5eeca68626cab8fca260c8dcb03..c7bc1b940c79a76c36cca71af61e2a53f4946459 100644
--- a/src/mol-model-props/computed/themes/accessible-surface-area.ts
+++ b/src/mol-model-props/computed/themes/accessible-surface-area.ts
@@ -83,6 +83,6 @@ export const AccessibleSurfaceAreaColorThemeProvider: ColorTheme.Provider<Access
     isApplicable: (ctx: ThemeDataContext) => !!ctx.structure,
     ensureCustomProperties: {
         attach: (ctx: CustomProperty.Context, data: ThemeDataContext) => data.structure ? AccessibleSurfaceAreaProvider.attach(ctx, data.structure, void 0, true) : Promise.resolve(),
-        detach: (data) => data.structure && data.structure.customPropertyDescriptors.reference(AccessibleSurfaceAreaProvider.descriptor, false)
+        detach: (data) => data.structure && AccessibleSurfaceAreaProvider.ref(data.structure, false)
     }
 };
\ No newline at end of file
diff --git a/src/mol-model-props/computed/themes/interaction-type.ts b/src/mol-model-props/computed/themes/interaction-type.ts
index 8ab22e981f78d9f881261f1824538894595c7ab7..0a40272c59c0c836b327aed5b583905b1397ae1a 100644
--- a/src/mol-model-props/computed/themes/interaction-type.ts
+++ b/src/mol-model-props/computed/themes/interaction-type.ts
@@ -117,6 +117,6 @@ export const InteractionTypeColorThemeProvider: ColorTheme.Provider<InteractionT
     isApplicable: (ctx: ThemeDataContext) => !!ctx.structure,
     ensureCustomProperties: {
         attach: (ctx: CustomProperty.Context, data: ThemeDataContext) => data.structure ? InteractionsProvider.attach(ctx, data.structure, void 0, true) : Promise.resolve(),
-        detach: (data) => data.structure && data.structure.customPropertyDescriptors.reference(InteractionsProvider.descriptor, false)
+        detach: (data) => data.structure && InteractionsProvider.ref(data.structure, false)
     }
 };
\ No newline at end of file
diff --git a/src/mol-model-props/integrative/cross-link-restraint/color.ts b/src/mol-model-props/integrative/cross-link-restraint/color.ts
index 7fad48e5c2e10f27d02f3132629489f95b1b46a5..2b5dea6d1333b02e4d11b947e9b687bd315169d3 100644
--- a/src/mol-model-props/integrative/cross-link-restraint/color.ts
+++ b/src/mol-model-props/integrative/cross-link-restraint/color.ts
@@ -70,6 +70,6 @@ export const CrossLinkColorThemeProvider: ColorTheme.Provider<CrossLinkColorThem
     isApplicable: (ctx: ThemeDataContext) => !!ctx.structure && CrossLinkRestraint.isApplicable(ctx.structure),
     ensureCustomProperties: {
         attach: (ctx: CustomProperty.Context, data: ThemeDataContext) => data.structure ? CrossLinkRestraintProvider.attach(ctx, data.structure, void 0, true) : Promise.resolve(),
-        detach: (data) => data.structure && data.structure.customPropertyDescriptors.reference(CrossLinkRestraintProvider.descriptor, false)
+        detach: (data) => data.structure && CrossLinkRestraintProvider.ref(data.structure, false)
     }
 };
\ No newline at end of file
diff --git a/src/mol-model-props/sequence/themes/best-database-mapping.ts b/src/mol-model-props/sequence/themes/best-database-mapping.ts
index 3f5d3a69c3c2dd47391d0a40ee7cc7282b8d80c3..c4588f43155e17ce0bf17ef8a112c5a35e6d1c51 100644
--- a/src/mol-model-props/sequence/themes/best-database-mapping.ts
+++ b/src/mol-model-props/sequence/themes/best-database-mapping.ts
@@ -98,7 +98,7 @@ export const BestDatabaseSequenceMappingColorThemeProvider: ColorTheme.Provider<
         detach: (data) => {
             if (!data.structure) return;
             for (const m of data.structure.models) {
-                m.customProperties.reference(BestDatabaseSequenceMapping.Provider.descriptor, false);
+                BestDatabaseSequenceMapping.Provider.ref(m, false);
             }
         }
     }
diff --git a/src/mol-theme/color/secondary-structure.ts b/src/mol-theme/color/secondary-structure.ts
index e132168e08128f6ea3fb53647346ef017ac0d734..033c4f134da7d553a5b941061c323b81ff2ea54c 100644
--- a/src/mol-theme/color/secondary-structure.ts
+++ b/src/mol-theme/color/secondary-structure.ts
@@ -123,6 +123,6 @@ export const SecondaryStructureColorThemeProvider: ColorTheme.Provider<Secondary
     isApplicable: (ctx: ThemeDataContext) => !!ctx.structure,
     ensureCustomProperties: {
         attach: (ctx: CustomProperty.Context, data: ThemeDataContext) => data.structure ? SecondaryStructureProvider.attach(ctx, data.structure, void 0, true) : Promise.resolve(),
-        detach: (data) => data.structure && data.structure.customPropertyDescriptors.reference(SecondaryStructureProvider.descriptor, false)
+        detach: (data) => data.structure && SecondaryStructureProvider.ref(data.structure, false)
     }
 };
\ No newline at end of file