diff --git a/docs/clustering.md b/docs/clustering.md
index 1c0c4a71db95b6f0f144ccb4d77ea082846c1be5..526cdb9dd94e405efbe3adf3b9738f7f980c4804 100644
--- a/docs/clustering.md
+++ b/docs/clustering.md
@@ -19,7 +19,7 @@ picodata run --instance-id iN --listen iN --peer i1
 инстансов — одного обычно достаточно, но для подстраховки можно взять
 три. Именно на их основе будет произведена инициализация кластера и
 поиск всех работающих инстансов для их включения в состав кластера
-(discovery). 
+(discovery).
 
 Подробности алгоритма discovery приведены в отдельном
 [документе](discovery.md). В контексте сборки кластера важно лишь
@@ -62,18 +62,19 @@ picodata run --instance-id iN --listen iN --peer i1
 
 ### fn start_discover()
 
-Дочерний процесс начинает свое существование с запуска модуля
-`box.cfg()` и вызова функции `start_discover()`. Возможно, что при этом
-из БД будет ясно, что bootstrap данного инстанса уже был произведен
-ранее и что Raft уже знает о вхождении этого инстанса в кластер — в
-таком случае никакого discovery не будет, инстанс сразу перейдет к этапу
-`postjoin()`. В противном случае, если место инстанса в кластере еще не
-известно, алгоритм discovery определяет значение флага
-`i_am_bootstrap_leader` и адрес лидера Raft-группы. Далее инстанс
-сбрасывает свое состояние (этап rebootstrap), чтобы повторно провести
-инициализацию `box.cfg()`, теперь уже с известными параметрами. Сам
-лидер (единственный с `i_am_bootstrap_leader == true`) выполняет функцию
-`start_boot()`. Остальные инстансы переходят к функции `start_join()`.
+Дочерний процесс начинает свое существование с функции
+[`init_common()`](#fn-init_common), в рамках которой в т.ч.
+инициализируется модуль `box`. Возможно, что при этом из БД будет ясно,
+что bootstrap данного инстанса уже был произведен ранее и что Raft уже
+знает о вхождении этого инстанса в кластер — в таком случае никакого
+discovery не будет, инстанс сразу перейдет к этапу `postjoin()`. В
+противном случае, если место инстанса в кластере еще не известно,
+алгоритм discovery определяет значение флага `i_am_bootstrap_leader` и
+адрес лидера Raft-группы. Далее инстанс сбрасывает свое состояние (этап
+rebootstrap), чтобы повторно провести инициализацию `box.cfg()`, теперь
+уже с известными параметрами. Сам лидер (единственный с
+`i_am_bootstrap_leader == true`) выполняет функцию `start_boot()`.
+Остальные инстансы переходят к функции `start_join()`.
 
 ### fn start_boot()
 
@@ -90,7 +91,7 @@ picodata run --instance-id iN --listen iN --peer i1
 
 Вызову функции `start_join()` всегда предшествует rebootstrap (удаление
 БД и перезапуск процесса), поэтому на данном этапе в БД нет ни модуля
-box, ни пространства хранения. Функция `start_join()` имеет простое
+`box`, ни пространства хранения. Функция `start_join()` имеет простое
 устройство:
 
 Инстанс-клиент отправляет запрос `raft_join` лидеру Raft-группы (он
@@ -99,14 +100,12 @@ box, ни пространства хранения. Функция `start_join(
 - Идентификатор `raft_id` и данные таблицы `raft_group` — для
   инициализации Raft-узла;
 - Идентификаторы  `instance_uuid`, `replicaset_uuid` и параметры
-  `replication`, `read_only` для `box.cfg`.
+  `replication`, `read_only` — для первичного вызова `box.cfg()`.
 
-Получив все настройки, инстанс использует их в `box.cfg()`, и затем
-создает в БД группу `raft_group` с актуальными адресами других
-инстансов. Без этого инстанс не сможет отвечать на  сообщения от других
-членов Raft-группы. Для того чтобы записи в `raft_group` не были
-заменены на менее актуальные из журнала Raft, каждая запись маркируется
-значением `commit_index`.
+Получив все настройки, инстанс использует их в `box.cfg()` (см.
+[`init_common()`](#fn-init_common)), и затем создает в БД группу
+`raft_group` с актуальными адресами других инстансов. Без этого инстанс
+не сможет отвечать на  сообщения от других членов Raft-группы.
 
 По завершении этих манипуляций инстанс также переходит к этапу
 `postjoin()`.
@@ -120,8 +119,7 @@ box, ни пространства хранения. Функция `start_join(
 Raft-группой. В случае, если других кандидатов нет, инстанс тут же
 избирает себя лидером группы.
 
-
-В этом месте также устанавливается `on_shutdown` callback, который
+В этом месте также устанавливается `on_shutdown` триггер, который
 обеспечит [корректное завершение работы инстанса](#Graceful-shutdown).
 Следующим шагом инстанс оповещает кластер о том, что он готов проходить
 настройку необходимых подсистем (репликации, шардинга, и т.д.). Для
@@ -133,6 +131,30 @@ governor](#Topology-governor), также называемый `governor_loop`.
 Как только запись с обновленным грейдом будет зафиксирована в Raft, узел
 готов к использованию.
 
+### fn init_common()
+
+Функция `init_common` обобщает действия, необходимые для инициализации
+инстанса во всех трех вышеописанных сценариях — `start_discover`,
+`start_boot`, `start_join`.
+
+Инициализация инстанса сводится к следующим шагам:
+
+- создание `data_dir`,
+- первичный вызов `box.cfg`,
+- инициализация `package.preload.vshard`,
+- инициализация хранимок (`box.schema.func.create`),
+- создание системных спейсов (`_picodata_raft_log` и т.д).
+
+Параметры первичного вызова `box.cfg` зависят от конкретного сценария:
+
+| param       | `start_discover` | `start_boot` | `start_join`                  |
+|-------------|------------------|--------------|-------------------------------|
+| listen      | None             | None         | _from args_                   |
+| read_only   | false            | false        | from `rpc::join` response     |
+| uuids       | _random_         | _given_      | from `rpc::join` response     |
+| replication | None             | None         | from `rpc::join` response     |
+| data_dir    | _from args_      | ...          | ...                           |
+| log_level   | _from args_      | ...          | ...                           |
 
 ## Обработка запросов
 
@@ -229,7 +251,7 @@ struct Instance {
  `Applied`. Важно помнить, что обновление статуса и сама операция могут
  выполняться не атомарно (если в `Op::on_commit()` происходит передача
  управления другому потоку — yield). В таком случае, следует
- позаботиться хотя бы об идемпотентности операции. 
+ позаботиться хотя бы об идемпотентности операции.
 
 Схема ниже иллюстрирует эту информацию.
 
diff --git a/src/main.rs b/src/main.rs
index d2927466ce2948655e26670220e6ad431ac4f94f..b4e1e7267639a554040441c7dadd392d5bd10e4d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -772,6 +772,14 @@ fn main_run(args: args::Run) -> ! {
     }
 }
 
+/// Performs tarantool initialization calling `box.cfg` for the first time.
+///
+/// This function is called from:
+///
+/// - `start_discover`
+/// - `start_boot`
+/// - `start_join`
+///
 fn init_common(args: &args::Run, cfg: &tarantool::Cfg) -> (Clusterwide, RaftSpaceAccess) {
     std::fs::create_dir_all(&args.data_dir).unwrap();
     tarantool::set_cfg(cfg);