diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/generics/GenericsTest.java b/src/test/java/org/eclipse/yasson/defaultmapping/generics/GenericsTest.java
index a8a4a92..907eb05 100644
--- a/src/test/java/org/eclipse/yasson/defaultmapping/generics/GenericsTest.java
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/generics/GenericsTest.java
@@ -14,6 +14,7 @@
 
 import static org.eclipse.yasson.Jsonbs.defaultJsonb;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertIterableEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -527,6 +528,8 @@
         // Use a new instance of Jsonb to avoid any caching
         try (var jsonb = JsonbBuilder.create()) {
             assertEquals(expectedJson, jsonb.toJson(container));
+            TreeContainer<TreeElement> result = jsonb.fromJson(expectedJson, new TestTypeToken<TreeContainer<TreeElement>>() {}.getType());
+            assertIterableEquals(container.getTree().getChildren(), result.getTree().getChildren());
         }
 
     }
@@ -542,6 +545,8 @@
         // Use a new instance of Jsonb to avoid any caching
         try (var jsonb = JsonbBuilder.create()) {
             assertEquals(expectedJson, jsonb.toJson(container));
+            ListContainer<TreeElement> result = jsonb.fromJson(expectedJson, new TestTypeToken<ListContainer<TreeElement>>() {}.getType());
+            assertIterableEquals(container.getList(), result.getList());
         }
 
     }
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/generics/model/TreeElement.java b/src/test/java/org/eclipse/yasson/defaultmapping/generics/model/TreeElement.java
index 36a7f71..a8dd238 100644
--- a/src/test/java/org/eclipse/yasson/defaultmapping/generics/model/TreeElement.java
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/generics/model/TreeElement.java
@@ -17,7 +17,10 @@
  */
 public class TreeElement extends TreeTypeContainer<TreeElement> {
 
-    private final String name;
+    private String name;
+
+    public TreeElement() {
+    }
 
     public TreeElement(final String name) {
         this.name = name;
@@ -26,4 +29,25 @@
     public String getName() {
         return name;
     }
-}
+
+    public void setName(final String name) {
+        this.name = name;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        
+        if (!super.equals(o)) {
+            return false;
+        }
+        
+        TreeElement that = (TreeElement) o;
+        return name != null ? name.equals(that.name) : that.name == null;
+    }
+}
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/generics/model/TreeTypeContainer.java b/src/test/java/org/eclipse/yasson/defaultmapping/generics/model/TreeTypeContainer.java
index 824a5e5..f649f7c 100644
--- a/src/test/java/org/eclipse/yasson/defaultmapping/generics/model/TreeTypeContainer.java
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/generics/model/TreeTypeContainer.java
@@ -27,4 +27,21 @@
     public void setChildren(final List<T> children) {
         this.children = children;
     }
-}
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        
+        TreeTypeContainer<?> that = (TreeTypeContainer<?>) o;
+        if (children == null) {
+            return that.children == null;
+        }
+        
+        return children.containsAll(that.children) && that.children.containsAll(children); 
+    }
+}
