diff --git a/pkg/extension/extension.go b/pkg/extension/extension.go
index 0e13061bd5a0256c073576c45ab8f41f40c8cd55..ae7878d56de53f423ea86c28fa2f263cef6cbd03 100644
--- a/pkg/extension/extension.go
+++ b/pkg/extension/extension.go
@@ -68,7 +68,7 @@ type Extension interface {
 }
 
 func CheckInstalled(ctx context.Context, content *content.Content, spaceID, envID, extension string) (bool, error) {
-	status, err := NewStorage(content).GetExtension(ctx, spaceID, envID, extension)
+	status, err := NewStorage(content, nil).GetExtension(ctx, spaceID, envID, extension)
 	if err != nil {
 		return false, err
 	}
diff --git a/pkg/extension/schema.go b/pkg/extension/schema.go
index c2ad5dfd3efb87008167089c97d68b06b1d3d402..6b1ff266422d0d80605fb4460a0041f42f7769ff 100644
--- a/pkg/extension/schema.go
+++ b/pkg/extension/schema.go
@@ -74,9 +74,9 @@ func NewActionsCollection(spaceID, envID string) *collections.Collection {
 
 	// UI
 	sch.Field.UI.ListView = &field.View{Options: map[string]interface{}{
-		"fields":    []string{"name", "action", "kind", "target", "updated_at", "updated_by"},
-		"sort":      []string{"name"},
-		"page_size": 50,
+		"fields":    []interface{}{"name", "action", "kind", "target", "updated_at", "updated_by"},
+		"sort":      []interface{}{"name"},
+		"page_size": float64(50),
 	}}
 
 	sch.Field.UI.Options["title"] = "name"
@@ -130,9 +130,9 @@ func NewExtensionsCollection(spaceID, envID string) *collections.Collection {
 
 	//UI
 	sch.Field.UI.ListView = &field.View{Options: map[string]interface{}{
-		"fields":    []string{"id", "title", "updated_at", "updated_by"},
-		"sort":      []string{"title"},
-		"page_size": 50,
+		"fields":    []interface{}{"id", "title", "updated_at", "updated_by"},
+		"sort":      []interface{}{"title"},
+		"page_size": float64(50),
 	}}
 
 	sch.Field.UI.Options["title"] = "title"
diff --git a/pkg/extension/schema_test.go b/pkg/extension/schema_test.go
index 7d33a4b5ef724ad2e2a9dc98723b39f8139a46b2..9892ba109597aac89bad74fc7f504d0a351de495 100644
--- a/pkg/extension/schema_test.go
+++ b/pkg/extension/schema_test.go
@@ -1,10 +1,14 @@
 package extension
 
 import (
+	"encoding/json"
 	"reflect"
 	"testing"
 
+	"git.perx.ru/perxis/perxis-go/pkg/collections"
+	"git.perx.ru/perxis/perxis-go/pkg/schema"
 	"git.perx.ru/perxis/perxis-go/pkg/schema/validate"
+	"github.com/stretchr/testify/require"
 )
 
 func Test_getEnumOpt(t *testing.T) {
@@ -32,3 +36,17 @@ func Test_getEnumOpt(t *testing.T) {
 		})
 	}
 }
+
+func TestEqualSchema(t *testing.T) {
+	for _, collection := range []*collections.Collection{
+		NewActionsCollection("", ""),
+		NewExtensionsCollection("", ""),
+	} {
+		s1 := collection.Schema
+		b, err := s1.MarshalJSON()
+		require.NoError(t, err)
+		s2 := schema.New()
+		err = json.Unmarshal(b, s2)
+		require.Equal(t, s1.Field, s2.Field)
+	}
+}
diff --git a/pkg/extension/storage.go b/pkg/extension/storage.go
index 0d8479c1b39ddc508c79280222b4e22df0d79ee7..3da54fec9223a0eb53ce5a88a59133be860425bb 100644
--- a/pkg/extension/storage.go
+++ b/pkg/extension/storage.go
@@ -10,6 +10,7 @@ import (
 	"git.perx.ru/perxis/perxis-go/pkg/errors"
 	"git.perx.ru/perxis/perxis-go/pkg/setup"
 	pb "git.perx.ru/perxis/perxis-go/proto/extensions"
+	"go.uber.org/zap"
 
 	"git.perx.ru/perxis/perxis-go/pkg/content"
 	"git.perx.ru/perxis/perxis-go/pkg/items"
@@ -29,10 +30,14 @@ type Storage interface {
 
 type storage struct {
 	content *content.Content
+	logger  *zap.Logger
 }
 
-func NewStorage(content *content.Content) Storage {
-	return &storage{content: content}
+func NewStorage(content *content.Content, logger *zap.Logger) Storage {
+	if logger == nil {
+		logger = zap.NewNop()
+	}
+	return &storage{content: content, logger: logger}
 }
 
 func infoFromItem(extension string, item *items.Item) *Info {
@@ -137,7 +142,7 @@ func (s *storage) DeleteExtension(ctx context.Context, spaceID, envID string, ex
 func (s *storage) init(ctx context.Context, spaceID, envID string) error {
 	// миграция окружения не должна запуститься, поскольку окружение может быть сломано
 	// расширениями - нужно дать возможность восстановиться
-	stp := setup.NewSetup(s.content, spaceID, envID, nil).AddCollections([]*collections.Collection{
+	stp := setup.NewSetup(s.content, spaceID, envID, s.logger).AddCollections([]*collections.Collection{
 		NewExtensionsCollection(spaceID, envID),
 		NewActionsCollection(spaceID, envID),
 	}, setup.SkipMigration())