diff --git a/LCS/PyCommon/util.py b/LCS/PyCommon/util.py
index 4177e3454671a9479aa14d41586159acdf9546af..470015ab1da8a0f553ad4b5b52e8d9fbaaa3849e 100644
--- a/LCS/PyCommon/util.py
+++ b/LCS/PyCommon/util.py
@@ -27,6 +27,7 @@ This package contains different utilities that are common for LOFAR software
 import sys
 import os, os.path
 import time
+from copy import deepcopy
 
 
 def check_bit(value, bit):
@@ -220,15 +221,15 @@ def find_free_port(preferred_port: int=0, allow_reuse_of_lingering_port: bool=Tr
         return s.getsockname()[1]
 
 
-def dict_search_and_replace(d: dict, key, value):
-    '''perform an in-place search-and-replace to replace all items for the given key by the given value'''
-    if key in d:
-        d[key] = value
-    # recurse over nested items.
-    for k in d:
-        if isinstance(d[k], dict):
-            dict_search_and_replace(d[k], key, value)
-        elif isinstance(d[k], list):
-            for i in d[k]:
-                if isinstance(i, dict):
-                    dict_search_and_replace(i, key, value)
+def dict_with_overrides(org_dict: dict, overrides_dict: dict) -> dict:
+    '''return a copy of the original (nested) org_dict with all (nested) key/value pairs in the overrides_dict applied'''
+    new_dict = deepcopy(org_dict)
+    for override_key, override_value in overrides_dict.items():
+        # recurse
+        if isinstance(override_value, dict):
+            new_dict[override_key] = dict_with_overrides(org_dict.get(override_key,{}), override_value)
+        else:
+            new_dict[override_key] = override_value
+
+    return new_dict
+