diff --git a/ivette/src/dome/misc/utils.ts b/ivette/src/dome/misc/utils.ts
index 5b50773ecfb3b0ae659ef7c7a2a5d2b1425c1901..ef42f769067080dc22b7b72d0c3ac8577458bc41 100644
--- a/ivette/src/dome/misc/utils.ts
+++ b/ivette/src/dome/misc/utils.ts
@@ -109,4 +109,24 @@ export function styles(
   return (empty ? undefined : buffer);
 }
 
+
+export type Indexed = { key: unknown; }
+
+export function mergeArrays<A, B>(
+    a1: Array<A>,
+    a2: Array<B>,
+    match: (x1: A, x2: B) => boolean
+): Array<A & Partial<B>> {
+  return a1.map(x1 => ({...x1, ...(a2.find(x2 => match(x1, x2)))}));
+}
+
+export function mergeArraysByKey<A, B>(
+    a1: Array<A & Indexed>,
+    a2: Array<B & Indexed>
+): Array<A & Partial<B>> {
+  return mergeArrays(a1, a2, (x1, x2) => x1.key === x2.key);
+}
+
+
+
 // --------------------------------------------------------------------------
diff --git a/ivette/src/frama-c/kernel/Properties.tsx b/ivette/src/frama-c/kernel/Properties.tsx
index 3cbb14f26fb42e0cef7926e76ddcc372a10b378c..ade4f90ab6d1269c3841c4137f3be3c93d40f507 100644
--- a/ivette/src/frama-c/kernel/Properties.tsx
+++ b/ivette/src/frama-c/kernel/Properties.tsx
@@ -28,6 +28,7 @@ import _ from 'lodash';
 import React, { useEffect } from 'react';
 import * as Dome from 'dome';
 import * as Json from 'dome/data/json';
+import * as Utils from 'dome/misc/utils';
 import * as States from 'frama-c/states';
 import * as Compare from 'dome/data/compare';
 import * as Settings from 'dome/data/settings';
@@ -613,10 +614,7 @@ export default function RenderProperties(): JSX.Element {
 
   useEffect(() => {
     model.removeAllData();
-    const data = kernelData.map(entry1 => ({
-      ...entry1, 
-      ...(evaData.find(entry2 => entry2.key === entry1.key))
-    }));
+    const data = Utils.mergeArraysByKey(kernelData, evaData);
     model.updateData(data);
     model.reload();
   }, [model, kernelData, evaData]);