diff --git a/dataset2rdf/utils.py b/dataset2rdf/utils.py
index 681561285ea65435ee01f1c11f0f5861f2442fda..74850da5e830de63bf513365f19d1a4549beb3e0 100644
--- a/dataset2rdf/utils.py
+++ b/dataset2rdf/utils.py
@@ -2027,7 +2027,8 @@ def apply_type_restrictions(concepts: Dict[str, Concept], properties: Dict[str,
                     print(f"prop {prop.identifier} has MULTIPLE RANGES: {prop_ranges}")
                     print(f"Adding restriction to class {concept.identifier} on prop {prop.identifier} someValuesFrom: {res.some_values_from}")
                     if r_key in concept.restrictions:
-                        concept.restrictions[r_key] = merge_restriction(concept.restrictions[r_key], res)
+                        merged = merge_restriction(concept.restrictions[r_key], res)
+                        concept.restrictions[r_key] = merged
                     else:
                         concept.restrictions[r_key] = res
 
@@ -2045,14 +2046,14 @@ def merge_restriction(r1: Restriction, r2: Restriction) -> Restriction:
         A merged instance of Restriction
 
     """
-    if r1.min_cardinality:
+    if r1.min_cardinality is not None:
         if r2.min_cardinality:
             print(f"[merge_restriction] Merging min cardinality from {r1.min_cardinality} to {r2.min_cardinality}")
             r1.min_cardinality = r2.min_cardinality
     else:
         r1.min_cardinality = r2.min_cardinality
-    if r1.max_cardinality and r2.max_cardinality:
-        if r2.min_cardinality:
+    if r1.max_cardinality is not None:
+        if r2.max_cardinality:
             print(f"[merge_restriction] Merging max cardinality from {r1.max_cardinality} to {r2.max_cardinality}")
             r1.max_cardinality = r2.max_cardinality
     else:
diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py
index b79874b0ec55ff1d08e5861e1dd5417daa8b156e..b7ed6fef9650980d62e98a003f4d3b7e6c402c27 100644
--- a/tests/unit/test_utils.py
+++ b/tests/unit/test_utils.py
@@ -9,6 +9,7 @@ from dataset2rdf.utils import (
     get_reference,
     infer_domain,
     is_curie,
+    merge_restriction,
     parse_active_composed_ofs,
     parse_active_concept,
     parse_active_concepts,
@@ -1750,3 +1751,39 @@ def test_parse_active_composed_ofs(record, expected_properties, expected_individ
 def test_regex(input_string, regex, expected_string):
     extracted_string = extract_code(input_string, regex)
     assert extracted_string == expected_string
+
+
+
+@pytest.mark.parametrize(
+    "r1,r2,expected",
+    [
+        (
+            Restriction(class_identifier="ConceptA", property_identifier="prop1"),
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1),
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1)
+        ),
+        (
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1, max_cardinality=None),
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", max_cardinality=1),
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1, max_cardinality=1)
+        ),
+        (
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1, max_cardinality=None, some_values_from=['snomed:123134', 'snomed:42543']),
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", max_cardinality=1, some_values_from=['snomed:798606', 'snomed:096553']),
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1, max_cardinality=1, some_values_from=['snomed:123134', 'snomed:42543', 'snomed:798606', 'snomed:096553'])
+        ),
+        (
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1, max_cardinality=1, some_values_from=['snomed:123134', 'snomed:42543']),
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1, max_cardinality=1, some_values_from=['snomed:123134', 'snomed:42543']),
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1, max_cardinality=1, some_values_from=['snomed:123134', 'snomed:42543'])
+        ),
+        (
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1, max_cardinality=1, some_values_from=['snomed:123134', 'snomed:42543']),
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1, max_cardinality=1, some_values_from=[]),
+            Restriction(class_identifier="ConceptA", property_identifier="prop1", min_cardinality=1, max_cardinality=1, some_values_from=['snomed:123134', 'snomed:42543'])
+        ),
+    ],
+)
+def test_merge_restriction(r1,r2,expected):
+    r = merge_restriction(r1,r2)
+    assert r == expected