diff --git a/vlib/v/table/table.v b/vlib/v/table/table.v
index 1ea61f6b5d..1d831d85a1 100644
--- a/vlib/v/table/table.v
+++ b/vlib/v/table/table.v
@@ -1093,27 +1093,22 @@ pub fn (mut t Table) generic_struct_insts_to_concrete() {
 			}
 			mut parent_info := parent.info as Struct
 			mut fields := parent_info.fields.clone()
-			for i, _ in fields {
-				mut field := fields[i]
-				if field.typ.has_flag(.generic) {
-					if parent_info.generic_types.len != info.generic_types.len {
-						// TODO: proper error
-						panic('generic template mismatch')
-					}
-					for j, gp in parent_info.generic_types {
-						if gp == field.typ {
-							field.typ = info.generic_types[j].derive(field.typ).clear_flag(.generic)
-							break
-						}
+			if parent_info.generic_types.len == info.generic_types.len {
+				for i, _ in fields {
+					mut field := fields[i]
+					if t_typ := t.resolve_generic_by_types(field.typ, parent_info.generic_types,
+						info.generic_types)
+					{
+						field.typ = t_typ
 					}
+					fields[i] = field
 				}
-				fields[i] = field
+				parent_info.generic_types = []
+				parent_info.fields = fields
+				typ.is_public = true
+				typ.kind = .struct_
+				typ.info = parent_info
 			}
-			parent_info.generic_types = []
-			parent_info.fields = fields
-			typ.is_public = true
-			typ.kind = .struct_
-			typ.info = parent_info
 		}
 	}
 }
diff --git a/vlib/v/tests/generics_return_generics_struct_test.v b/vlib/v/tests/generics_return_generics_struct_test.v
index fde0fcb134..e6b669d5f4 100644
--- a/vlib/v/tests/generics_return_generics_struct_test.v
+++ b/vlib/v/tests/generics_return_generics_struct_test.v
@@ -49,3 +49,15 @@ fn test_generics_with_generics_struct_string() {
 	assert ret.contains("data: ['foo', 'bar']")
 	assert ret.contains('index: 11')
 }
+
+fn test_generics_struct_insts_to_concrete() {
+	ai := ArrayIterator<int>{
+		data: [11, 22],
+		index: 22
+	}
+	println(ai)
+	ret := '$ai'
+	assert ret.contains('ArrayIterator<int>{')
+	assert ret.contains('data: [11, 22]')
+	assert ret.contains('index: 22')
+}