diff --git a/pkg/spaces/errors.go b/pkg/spaces/errors.go
new file mode 100644
index 0000000000000000000000000000000000000000..c9e66fa698198eb8b01034eb2bad83286d60297f
--- /dev/null
+++ b/pkg/spaces/errors.go
@@ -0,0 +1,12 @@
+package spaces
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/errors"
+	"git.perx.ru/perxis/perxis-go/pkg/service"
+)
+
+var (
+	ErrNotFound      = service.ErrNotFound
+	ErrStateConflict = errors.New("state conflicts with current space state")
+	ErrOrgIDRequired = errors.New("organization id required")
+)
diff --git a/pkg/spaces/space.go b/pkg/spaces/space.go
index 482a953b1e79e8690c58748439ce66dc68430b0e..985cd6c5356b3e519bbcf5a3264ee5ab42053131 100644
--- a/pkg/spaces/space.go
+++ b/pkg/spaces/space.go
@@ -10,9 +10,17 @@ const (
 	StateReady             // Пространство готово к использованию
 	StatePreparing         // Пространство готовится в использованию
 	StateMaintenance       // Пространство находится на обслуживании
-	StateMigration         // Пространство в состоянии выполнения миграций
-	StateDeleting          // Пространство удаляется, данные будут удалены
-	StateError             // Произошла ошибка при конфигурации пространства (см. Space.Error)
+
+	// StateMigrationScheduled Для пространства запланирована миграция
+	// При планировании запуска миграции пространства это состояние выступает в роли Lock'а, который не
+	// позволяет запустить несколько миграций одновременно. Логика планировщика миграций сначала пытается
+	// установить для пространства состояние StateMigrationScheduled, что удается только в двух случаях:
+	// пространство находится в состоянии StateReady или же в состояниях StateMigration, StateMigrationScheduled,
+	// но последнее обновление состояния было более 15-ти минут назад
+	StateMigrationScheduled
+	StateMigration // Пространство в состоянии выполнения миграций
+	StateDeleting  // Пространство удаляется, данные будут удалены
+	StateError     // Произошла ошибка при конфигурации пространства (см. Space.Error)
 )
 
 func (s State) String() string {
@@ -25,6 +33,8 @@ func (s State) String() string {
 		return "Preparing"
 	case StateMaintenance:
 		return "Maintenance"
+	case StateMigrationScheduled:
+		return "MigrationScheduled"
 	case StateMigration:
 		return "Migration"
 	case StateDeleting:
@@ -55,10 +65,10 @@ type Space struct {
 }
 
 type StateInfo struct {
-	State     State     `json:"state" bson:"state"`
-	Info      string    `json:"info" bson:"info"`
+	State     State     `json:"state" bson:"state,omitempty"`
+	Info      string    `json:"info" bson:"info,omitempty"`
 	Time      time.Time `json:"time,omitempty" bson:"time,omitempty"`
-	DBVersion uint32    `json:"db_version" bson:"db_version"`
+	DBVersion uint32    `json:"db_version" bson:"db_version,omitempty"`
 }
 
 func (s Space) Clone() *Space {
diff --git a/pkg/spaces/storage.go b/pkg/spaces/storage.go
index 798dd96bb859e31a6b49ca5a882918519c3e020f..a489c0b56104fdd47c479f1cd89a960f097f4d70 100644
--- a/pkg/spaces/storage.go
+++ b/pkg/spaces/storage.go
@@ -21,4 +21,5 @@ type Filter struct {
 	Name          []string `json:"name,omitempty" bson:"name"`
 	State         []State  `json:"state,omitempty" bson:"state"`
 	TransferToOrg []string `json:"transfer_to_org" bson:"transfer_to_org"`
+	Q             []string `json:"q" bson:"q"`
 }