diff --git a/backend/metagenedb/utils/dict_operations.py b/backend/metagenedb/utils/dict_operations.py
index f8cf801dcce05ace1743442cb459fa65d2569124..5fab8601326843e3abcd9c2e0f24e22cd80eaa9f 100644
--- a/backend/metagenedb/utils/dict_operations.py
+++ b/backend/metagenedb/utils/dict_operations.py
@@ -4,7 +4,7 @@ logging.basicConfig(level=logging.INFO)
 _LOGGER = logging.getLogger(__name__)
 
 
-def extract_dict(source_dict, keys):
+def extract_dict(source_dict, keys, keep_original_source=False):
     """
     Extract a dict from a given dict based on a given set of keys
     """
@@ -12,7 +12,8 @@ def extract_dict(source_dict, keys):
     for key in keys:
         try:
             extracted_dict[key] = source_dict[key]
-            del source_dict[key]
+            if not keep_original_source:
+                del source_dict[key]
         except KeyError:
             _LOGGER.warning(f"[{key}] is not found in the source dict, extraction skipped for this key.")
     return extracted_dict
diff --git a/backend/metagenedb/utils/test_dict_operations.py b/backend/metagenedb/utils/test_dict_operations.py
index 7de1f3fa04026f637d899b1ebbbb80a42a823cad..155156b2fdda66a4ec443c5a727178a157bda70c 100644
--- a/backend/metagenedb/utils/test_dict_operations.py
+++ b/backend/metagenedb/utils/test_dict_operations.py
@@ -22,3 +22,12 @@ class TestExtractDict(TestCase):
         test_extract_dict = extract_dict(source_dict, extract_keys)
         self.assertDictEqual(source_dict, expected_source_dict)
         self.assertDictEqual(test_extract_dict, expected_extract_dict)
+
+    def test_extract_dict_original_source(self):
+        source_dict = {'a': 1, 'b': 2}
+        extract_keys = ['b']
+        expected_source_dict = {'a': 1, 'b': 2}
+        expected_extract_dict = {'b': 2}
+        test_extract_dict = extract_dict(source_dict, extract_keys, keep_original_source=True)
+        self.assertDictEqual(source_dict, expected_source_dict)
+        self.assertDictEqual(test_extract_dict, expected_extract_dict)