diff --git a/src/core/component.builder.ts b/src/core/component.builder.ts
index de19741..8611268 100644
--- a/src/core/component.builder.ts
+++ b/src/core/component.builder.ts
@@ -1,6 +1,6 @@
 import type { Chart, ChartData, ChartDataset, ChartOptions, ChartType, Plugin } from 'chart.js';
 import * as Chartjs from 'chart.js';
-import { cloneDeep, isEmpty, isEqual, isObject } from 'lodash-es';
+import { cloneDeep, cloneDeepWith, isEmpty, isEqual, isObject, isArray } from 'lodash-es';
 import { pascalCase } from '../utils';
 import {
   ComponentOptionsMixin,
@@ -121,7 +121,14 @@ export const defineChartComponent = <TType extends ChartType = ChartType>(
 
                 // Update attributes individually to avoid re-rendering the entire chart
                 for (const attribute in dataset) {
-                  const attrValue = cloneDeep(dataset[attribute as keyof ChartDataset]);
+                  function keepInstancesIntactCloneCustomizer<T extends unknown>(value: T): T|undefined {
+                    if(!isObject(value)) return;
+                    if(value.constructor.name === 'Object') return;
+                    if(isArray(value)) return;
+                    return value;
+                  }
+
+                  const attrValue = cloneDeepWith(dataset[attribute as keyof ChartDataset], keepInstancesIntactCloneCustomizer);
                   let datasetItem = chart.data.datasets[index] as any;
                   if (!datasetItem) {
                     chart.data.datasets[index] = {} as any;