diff --git a/pkg/schema/field/field.go b/pkg/schema/field/field.go
index 4d2a6771bbe956f07698e52835aca53a2853bd58..2645730fb33ba7c0913f9a32cd46018851d067f2 100644
--- a/pkg/schema/field/field.go
+++ b/pkg/schema/field/field.go
@@ -380,7 +380,7 @@ func (f *Field) ListFields(filter ...FieldFilterFunc) []*Field {
 // ListFieldsRecursive возвращает массив всех вложенных полей рекурсивно
 func (f *Field) ListFieldsRecursive(filter ...FieldFilterFunc) []*Field {
 	fields := f.ListFields(filter...)
-	for _, fld := range fields {
+	for _, fld := range f.ListFields() {
 		fields = append(fields, fld.ListFieldsRecursive(filter...)...)
 	}
 	return fields
diff --git a/pkg/schema/field/field_test.go b/pkg/schema/field/field_test.go
index d27d74bb473a3303c95d5fb63e927d5b314d9a42..cb0458ed610a428abe84dc038bc4c172c5560bb9 100644
--- a/pkg/schema/field/field_test.go
+++ b/pkg/schema/field/field_test.go
@@ -91,6 +91,26 @@ func TestField_ListFieldsRecursive(t *testing.T) {
 	}
 }
 
+func TestField_ListFieldsRecursive_WithFilter(t *testing.T) {
+	sch := Object(
+		"f1", Object(
+			"b", Object(
+				"c", String().SetSingleLocale(true),
+			),
+		),
+		"f2", Object(
+			"b", Object(
+				"c", String().SetSingleLocale(true),
+			),
+		).SetSingleLocale(true),
+	)
+
+	sch.EnableState()
+
+	fields := sch.ListFieldsRecursive(func(f *Field) bool { return f.SingleLocale == true })
+	assert.Len(t, fields, 3)
+}
+
 func TestField_CloneWithState(t *testing.T) {
 	f := Object("a", String())
 	fld := f.Clone(false)
diff --git a/pkg/schema/schema_test.go b/pkg/schema/schema_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..dbedf48f9667c348c0898b73a3d308312aede6c6
--- /dev/null
+++ b/pkg/schema/schema_test.go
@@ -0,0 +1,18 @@
+package schema
+
+import (
+	"testing"
+
+	"git.perx.ru/perxis/perxis-go/pkg/schema/field"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestSchema_Clone(t *testing.T) {
+	f := New("a", field.String())
+	f.ClearState()
+	fld := f.Clone(false)
+	assert.Nil(t, fld.State)
+	f.EnableState()
+	fld = f.Clone(false)
+	assert.NotNil(t, fld.State)
+}