diff --git a/proto/clients/clients.proto b/proto/clients/clients.proto
index c20c5d4cab1d94fa740458747c01ac0af52f66eb..2720536a47be88a21d8021dbbbc23c536019208a 100644
--- a/proto/clients/clients.proto
+++ b/proto/clients/clients.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "google/protobuf/empty.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/clients;clients";
+option go_package = "git.perx.ru/perxis/perxis-go/clients;clients";
 
 package content.clients;
 
diff --git a/proto/collaborators/collaborators.proto b/proto/collaborators/collaborators.proto
index 263fc8b2058fbde39bc27fcfd1ab844f1c96a822..8964249050477ed4c58d17c443c592f269ac5677 100644
--- a/proto/collaborators/collaborators.proto
+++ b/proto/collaborators/collaborators.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/collaborators;collaborators";
+option go_package = "git.perx.ru/perxis/perxis-go/collaborators;collaborators";
 
 package content.collaborators;
 
diff --git a/proto/collections/collections.proto b/proto/collections/collections.proto
index aafd0704118988dbfed484b6720ee271d3230727..e1ae9b1db9dbcd3f076ea5d4003c252303b7a90f 100644
--- a/proto/collections/collections.proto
+++ b/proto/collections/collections.proto
@@ -4,7 +4,7 @@ import "google/protobuf/empty.proto";
 import "common/common.proto";
 import "google/protobuf/timestamp.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/collections;collections";
+option go_package = "git.perx.ru/perxis/perxis-go/collections;collections";
 
 package content.collections;
 
diff --git a/proto/common/common.proto b/proto/common/common.proto
index 60a918a78edde0584408543f191e3a8fc4ffded3..309772802dcee1c73344f803370f887bc0041916 100644
--- a/proto/common/common.proto
+++ b/proto/common/common.proto
@@ -1,6 +1,6 @@
 syntax = "proto3";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/common;common";
+option go_package = "git.perx.ru/perxis/perxis-go/common;common";
 
 package common;
 
diff --git a/proto/delivery/delivery.proto b/proto/delivery/delivery.proto
index a3543e61624a8c1b9efef4cc3ba725b0c9c90270..abfd148d3fae7bd1f964ef7206a657e9d2625e82 100644
--- a/proto/delivery/delivery.proto
+++ b/proto/delivery/delivery.proto
@@ -4,8 +4,9 @@ import "locales/locales.proto";
 import "environments/environments.proto";
 import "collections/collections.proto";
 import "items/items.proto";
+import "google/protobuf/struct.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/delivery;delivery";
+option go_package = "git.perx.ru/perxis/perxis-go/delivery;delivery";
 
 package delivery;
 
@@ -74,6 +75,21 @@ message FindItemsResponse{
   int32 total = 2;
 }
 
+message  AggregateOptions {
+  map<string, string> fields = 1;
+}
+
+message AggregateRequest {
+  string space_id = 1;
+  string env_id = 2;
+  string collection_id = 3;
+  content.items.Filter filter = 4;
+  AggregateOptions options = 10;
+}
+message  AggregateResponse{
+  google.protobuf.Struct result = 1;
+}
+
 service Delivery  {
   rpc ListLocales(ListLocalesRequest) returns(ListLocalesResponse) {}
 
@@ -85,4 +101,6 @@ service Delivery  {
 
   rpc GetItem(GetItemRequest) returns(GetItemResponse) {}
   rpc FindItems(FindItemsRequest) returns(FindItemsResponse) {}
+
+  rpc Aggregate(AggregateRequest) returns(AggregateResponse) {}
 }
diff --git a/proto/environments/environments.proto b/proto/environments/environments.proto
index d12caccc84168bf39852697f6b0fe50129708ba2..93a173b9720e0985f706dfc0842febb45fb4b77e 100644
--- a/proto/environments/environments.proto
+++ b/proto/environments/environments.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "google/protobuf/empty.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/environments;environments";
+option go_package = "git.perx.ru/perxis/perxis-go/environments;environments";
 
 package content.environments;
 
@@ -74,6 +74,11 @@ message DeleteRequest {
   string env_id = 2;
 }
 
+message MigrateRequest {
+  string space_id = 1;
+  string env_id = 2;
+}
+
 service Environments {
   rpc Create(CreateRequest) returns(CreateResponse) {}
   rpc Get(GetRequest) returns(GetResponse) {}
@@ -82,4 +87,5 @@ service Environments {
   rpc SetAlias(SetAliasRequest) returns(google.protobuf.Empty) {}
   rpc RemoveAlias(RemoveAliasRequest) returns(google.protobuf.Empty) {}
   rpc Delete(DeleteRequest) returns(google.protobuf.Empty) {}
+  rpc Migrate(MigrateRequest) returns(google.protobuf.Empty) {}
 }
\ No newline at end of file
diff --git a/proto/extensions/extension.proto b/proto/extensions/extension.proto
index fa91d9ef45fd72d048fc23ed20881bfbf6dd7d2a..4a2d57fb3f1f8cc01fce80935a773dca752fff84 100644
--- a/proto/extensions/extension.proto
+++ b/proto/extensions/extension.proto
@@ -10,7 +10,7 @@
 */
 syntax = "proto3";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/extensions;extensions";
+option go_package = "git.perx.ru/perxis/perxis-go/extensions;extensions";
 
 package extensions;
 
diff --git a/proto/extensions/manager.proto b/proto/extensions/manager.proto
index 0def40164a520bc46acaf6440608a803944bd937..8b0e289d757273f30d6e0166b78dad5c5f2c647f 100644
--- a/proto/extensions/manager.proto
+++ b/proto/extensions/manager.proto
@@ -27,7 +27,7 @@
 */
 syntax = "proto3";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/extensions;extensions";
+option go_package = "git.perx.ru/perxis/perxis-go/extensions;extensions";
 
 package extensions;
 
diff --git a/proto/files/files.proto b/proto/files/files.proto
index ff3cf8ca7e67a2cf102c901fdbf8900d8cf20ed9..4c00d4983308c3034549d76041cb248f76d95542 100644
--- a/proto/files/files.proto
+++ b/proto/files/files.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "google/protobuf/empty.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/files;files";
+option go_package = "git.perx.ru/perxis/perxis-go/files;files";
 
 package files;
 
diff --git a/proto/images/images.proto b/proto/images/images.proto
index b58c473680bc45b6f8ed2e0c74adcf1c36f5c96b..f22da2ac8a839f8838bf783fe4a72638cd2d07be 100644
--- a/proto/images/images.proto
+++ b/proto/images/images.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "files/files.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/images;images";
+option go_package = "git.perx.ru/perxis/perxis-go/images;images";
 
 package images;
 
diff --git a/proto/invitations/invitations.proto b/proto/invitations/invitations.proto
index c7be5b0145ceb7dbae9982fcb17335403ba4c665..539c1890722349c7422a60dda234771e7427498a 100644
--- a/proto/invitations/invitations.proto
+++ b/proto/invitations/invitations.proto
@@ -4,7 +4,7 @@ import "google/protobuf/timestamp.proto";
 import "google/protobuf/empty.proto";
 import "google/protobuf/wrappers.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/invitations;invitations";
+option go_package = "git.perx.ru/perxis/perxis-go/invitations;invitations";
 
 package content.invitations;
 
diff --git a/proto/items/items.proto b/proto/items/items.proto
index 190eace6cf9d094d72a185044018b393fdc48ed0..c02ab82760f373428b1d8c1363ea2b88c477d4bb 100644
--- a/proto/items/items.proto
+++ b/proto/items/items.proto
@@ -13,7 +13,7 @@ import "common/common.proto";
 import "google/protobuf/timestamp.proto";
 import "google/protobuf/struct.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/items;items";
+option go_package = "git.perx.ru/perxis/perxis-go/items;items";
 
 package content.items;
 
@@ -127,6 +127,25 @@ message ListRevisionsOptions {
   common.FindOptions options = 2;
 }
 
+// Fields - поля которые должны быть возвращены или вычислены в результате.
+// Ключ (string) - имя поля под которым будет добавляться результат.
+// Значение (string) - является выражением, вычисление которого сформирует результат
+// Функции для выражений (для поля F, типа T):
+// - distinct(F) - все значения поля, тип результат []T
+// - min(F) - минимальное значение поля, тип результат T
+// - max(F) - максимальное значение поля, тип результат T
+// - avg(F) - среднее значения поля, тип результат T
+// - sum(F) - сумма значений поля, тип результат T
+// - count() - число записей, тип результат int
+// Пример: {'average C': 'avg(a.b.c)'}
+message  AggregateOptions {
+  map<string, string> fields = 1;
+}
+
+message  AggregatePublishedOptions {
+  map<string, string> fields = 1;
+}
+
 message CreateRequest {
   Item item = 1;
   CreateOptions options = 2;
@@ -218,6 +237,31 @@ message FindPublishedResponse{
   int32 total = 2;
 }
 
+message AggregateRequest {
+  string space_id = 1;
+  string env_id = 2;
+  string collection_id = 3;
+  Filter filter = 4;
+  AggregateOptions options = 10;
+}
+/**
+ * Содержит в себе набор `название:значение`. Название соответствует переданному в AggregateOptions ключу.
+ */
+message  AggregateResponse{
+  google.protobuf.Struct result = 1;
+}
+
+message AggregatePublishedRequest {
+  string space_id = 1;
+  string env_id = 2;
+  string collection_id = 3;
+  Filter filter = 4;
+  AggregatePublishedOptions options = 10;
+}
+message  AggregatePublishedResponse{
+  google.protobuf.Struct result = 1;
+}
+
 message GetRevisionRequest {
   string space_id = 1;
   string env_id = 2;
@@ -295,6 +339,17 @@ service Items {
   rpc GetPublished(GetPublishedRequest) returns(GetPublishedResponse) {}
   rpc FindPublished(FindPublishedRequest) returns(FindPublishedResponse) {}
 
+  /**
+   * Расчет значений по существующим данным. Например, получение среднего значения поля
+   */
+  rpc Aggregate(AggregateRequest) returns(AggregateResponse) {}
+
+
+  /**
+   * Расчет значений по существующим **опубликованным** данным.
+   */
+  rpc AggregatePublished(AggregatePublishedRequest) returns(AggregatePublishedResponse) {}
+
   rpc GetRevision(GetRevisionRequest) returns(GetRevisionResponse) {}
   rpc ListRevisions(ListRevisionsRequest) returns(ListRevisionsResponse) {}
 
diff --git a/proto/locales/locales.proto b/proto/locales/locales.proto
index dd28974ca61552e1211ef67bcc4f4b7437fee158..7c38f42b5fb65b1cf39ee15fe873d63d63800bb7 100644
--- a/proto/locales/locales.proto
+++ b/proto/locales/locales.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "google/protobuf/empty.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/locales;locales";
+option go_package = "git.perx.ru/perxis/perxis-go/locales;locales";
 
 package content.locales;
 
diff --git a/proto/members/members.proto b/proto/members/members.proto
index 430691c382ab20d200687a2fd3a6acbebe2634fd..7e3fcd43404eea80ceae8935adc25879b2850e34 100644
--- a/proto/members/members.proto
+++ b/proto/members/members.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/members;members";
+option go_package = "git.perx.ru/perxis/perxis-go/members;members";
 
 package account.members;
 
diff --git a/proto/organizations/organizations.proto b/proto/organizations/organizations.proto
index a8b039983db55915698248e141f402ba8dac53e3..54f047238d189f5ac6a38c14333b2316162bfcdb 100644
--- a/proto/organizations/organizations.proto
+++ b/proto/organizations/organizations.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/organizations;organizations";
+option go_package = "git.perx.ru/perxis/perxis-go/organizations;organizations";
 
 package account.organizations;
 
diff --git a/proto/references/references.proto b/proto/references/references.proto
index a56d45f9ade1cca2f793affd21e75b7e56b5d83c..2cf54e1202ce4320ece76d2007b227ccfb3baceb 100644
--- a/proto/references/references.proto
+++ b/proto/references/references.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 import "items/items.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/references;references";
+option go_package = "git.perx.ru/perxis/perxis-go/references;references";
 
 package content.references;
 
@@ -10,6 +10,7 @@ package content.references;
 message Reference {
   string id = 1;
   string collection_id = 2;
+  bool disabled = 3;
 }
 
 message GetRequest {
diff --git a/proto/roles/roles.proto b/proto/roles/roles.proto
index 04ad46b59c187b9b3609b582a3a66e9a7143c513..e6803092e0d188544f031d220f15a4ccc449d91c 100644
--- a/proto/roles/roles.proto
+++ b/proto/roles/roles.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/roles;roles";
+option go_package = "git.perx.ru/perxis/perxis-go/roles;roles";
 
 package content.roles;
 
diff --git a/proto/spaces/spaces.proto b/proto/spaces/spaces.proto
index 87cbef95d35660369ba9b08f8d3ed858c4080ff6..2dd63aaa9939cff43c486e90c9732057139a85f4 100644
--- a/proto/spaces/spaces.proto
+++ b/proto/spaces/spaces.proto
@@ -1,6 +1,6 @@
 syntax = "proto3";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/spaces;spaces";
+option go_package = "git.perx.ru/perxis/perxis-go/spaces;spaces";
 
 package content.spaces;
 
diff --git a/proto/users/users.proto b/proto/users/users.proto
index 94b7543231d5f5c43acf86862e5ca9b8bb67a367..283c97d3ea28bc63ee226f3d5afa36c8f92d6543 100644
--- a/proto/users/users.proto
+++ b/proto/users/users.proto
@@ -4,7 +4,7 @@ import "google/protobuf/empty.proto";
 import "google/protobuf/wrappers.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/users;users";
+option go_package = "git.perx.ru/perxis/perxis-go/users;users";
 
 package account.users;
 
diff --git a/proto/versions/account/versions.proto b/proto/versions/account/versions.proto
index 1018795052b251f3a9467c090ac0262411fefb08..bab5e9ee844b8cb0b8f9415e46dfa598946739bc 100644
--- a/proto/versions/account/versions.proto
+++ b/proto/versions/account/versions.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/versions/account;account";
+option go_package = "git.perx.ru/perxis/perxis-go/versions/account;account";
 
 package account;
 
diff --git a/proto/versions/content/versions.proto b/proto/versions/content/versions.proto
index 012eeb1acae3070becda0353653514d704102df1..a3a14d9692712c3f7cf97d7f9ad9c3738e48fed5 100644
--- a/proto/versions/content/versions.proto
+++ b/proto/versions/content/versions.proto
@@ -3,7 +3,7 @@ syntax = "proto3";
 import "google/protobuf/empty.proto";
 import "common/common.proto";
 
-option go_package = "git.perx.ru/perxis/perxis-go/proto/versions/content;content";
+option go_package = "git.perx.ru/perxis/perxis-go/versions/content;content";
 
 package content;