diff --git a/modules/configuration-annotation-processor/pom.xml b/modules/configuration-annotation-processor/pom.xml
index a986a59..f74d5fd 100644
--- a/modules/configuration-annotation-processor/pom.xml
+++ b/modules/configuration-annotation-processor/pom.xml
@@ -64,6 +64,18 @@
             <groupId>com.google.testing.compile</groupId>
             <artifactId>compile-testing</artifactId>
             <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>junit</groupId>
+                    <artifactId>junit</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>org.hamcrest</groupId>
+            <artifactId>hamcrest-library</artifactId>
+            <scope>test</scope>
         </dependency>
 
         <dependency>
diff --git a/modules/configuration-annotation-processor/src/main/java/org/apache/ignite/configuration/processor/internal/Processor.java b/modules/configuration-annotation-processor/src/main/java/org/apache/ignite/configuration/processor/internal/Processor.java
index 50d10c9..b86a3c5 100644
--- a/modules/configuration-annotation-processor/src/main/java/org/apache/ignite/configuration/processor/internal/Processor.java
+++ b/modules/configuration-annotation-processor/src/main/java/org/apache/ignite/configuration/processor/internal/Processor.java
@@ -55,6 +55,7 @@
 import org.apache.ignite.configuration.ConfigurationTree;
 import org.apache.ignite.configuration.ConfigurationValue;
 import org.apache.ignite.configuration.Configurator;
+import org.apache.ignite.configuration.RootKey;
 import org.apache.ignite.configuration.annotation.Config;
 import org.apache.ignite.configuration.annotation.ConfigValue;
 import org.apache.ignite.configuration.annotation.NamedConfigValue;
@@ -273,6 +274,9 @@
             // Create VIEW, INIT and CHANGE classes
             createPojoBindings(packageName, fields, schemaClassName, configurationClassBuilder, configurationInterfaceBuilder);
 
+            if (isRoot)
+                createRootKeyField(configInterface, configurationClassBuilder, configDesc);
+
             // Create constructors for configuration class
             createConstructors(configClass, configName, configurationClassBuilder, CONFIGURATOR_TYPE, constructorBodyBuilder, copyConstructorBodyBuilder);
 
@@ -313,6 +317,32 @@
         return true;
     }
 
+    /** */
+    private void createRootKeyField(ClassName configInterface,
+        TypeSpec.Builder configurationClassBuilder,
+        ConfigurationDescription configDesc) {
+
+        ParameterizedTypeName fieldTypeName = ParameterizedTypeName.get(ClassName.get(RootKey.class), configInterface);
+
+        TypeSpec anonymousClass = TypeSpec.anonymousClassBuilder("")
+            .addSuperinterface(fieldTypeName)
+            .addMethod(MethodSpec
+                .methodBuilder("key")
+                .addAnnotation(Override.class)
+                .addModifiers(PUBLIC)
+                .returns(TypeName.get(String.class))
+                .addStatement("return $S", configDesc.getName())
+                .build()).build();
+
+        FieldSpec keyField = FieldSpec.builder(
+            fieldTypeName, "KEY", PUBLIC, STATIC
+            )
+            .initializer("$L", anonymousClass)
+            .build();
+
+        configurationClassBuilder.addField(keyField);
+    }
+
     /**
      * Create getters and setters for configuration class.
      *
@@ -589,7 +619,6 @@
 
                 if (current.getParent() != null) {
                     String newMethodCall = "." + current.getOriginalName() + "()";
-
                     // if config is named, then create a call with name parameter
                     if (isNamed)
                         newMethodCall += ".get(name" + (namedCount - 1) + ")";
@@ -618,7 +647,6 @@
                         .build()
                 );
 
-
                 // Build a list of parameters for statement
                 List<Object> params = new ArrayList<>();
                 params.add(MethodHandle.class);
diff --git a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/HasFieldMatcher.java b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/HasFieldMatcher.java
index 7b729fd..53836cc 100644
--- a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/HasFieldMatcher.java
+++ b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/HasFieldMatcher.java
@@ -54,7 +54,7 @@
 
         List<HasFieldMatcher> matcherList = new ArrayList<>();
 
-        for (int i = 0; i < arguments.length; i+=2)
+        for (int i = 0; i < arguments.length; i += 2)
             matcherList.add(new HasFieldMatcher(arguments[i], arguments[i + 1]));
 
         return new BaseMatcher<ParsedClass>() {
diff --git a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/HasMethodMatcher.java b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/HasMethodMatcher.java
index 385a280..c4642ea 100644
--- a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/HasMethodMatcher.java
+++ b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/HasMethodMatcher.java
@@ -50,7 +50,7 @@
 
         List<HasMethodMatcher> matcherList = new ArrayList<>();
 
-        for (int i = 0; i < arguments.length; i+=2)
+        for (int i = 0; i < arguments.length; i += 2)
             matcherList.add(new HasMethodMatcher(arguments[i], arguments[i + 1]));
 
         return new BaseMatcher<ParsedClass>() {
diff --git a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/ProcessorTest.java b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/ProcessorTest.java
index dc361dc..68b19c6 100644
--- a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/ProcessorTest.java
+++ b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/processor/internal/ProcessorTest.java
@@ -16,14 +16,15 @@
  */
 package org.apache.ignite.configuration.processor.internal;
 
-import com.google.testing.compile.CompilationSubject;
+import com.google.testing.compile.Compilation;
 import com.squareup.javapoet.ClassName;
 import org.hamcrest.MatcherAssert;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 import static org.apache.ignite.configuration.processor.internal.HasFieldMatcher.hasFields;
 import static org.apache.ignite.configuration.processor.internal.HasMethodMatcher.hasMethods;
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -41,7 +42,9 @@
 
         final BatchCompilation batch = batchCompile(testConfigurationSchema);
 
-        CompilationSubject.assertThat(batch.getCompilationStatus()).succeeded();
+        final Compilation status = batch.getCompilationStatus();
+
+        assertNotEquals(Compilation.Status.FAILURE, status);
 
         assertEquals(7, batch.generated().size());
 
diff --git a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/CacheConfigurationSchema.java b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/CacheConfigurationSchema.java
index e6da55b..8d35e66 100644
--- a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/CacheConfigurationSchema.java
+++ b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/CacheConfigurationSchema.java
@@ -20,6 +20,7 @@
 import javax.validation.constraints.Min;
 import org.apache.ignite.configuration.annotation.Config;
 import org.apache.ignite.configuration.annotation.Value;
+
 /**
  * Test cache configuration schema.
  */
diff --git a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/ClusterWideConfigurationSchema.java b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/ClusterWideConfigurationSchema.java
index 2c51d25..8594c87 100644
--- a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/ClusterWideConfigurationSchema.java
+++ b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/ClusterWideConfigurationSchema.java
@@ -20,6 +20,7 @@
 import org.apache.ignite.configuration.annotation.Config;
 import org.apache.ignite.configuration.annotation.ConfigValue;
 import org.apache.ignite.configuration.annotation.NamedConfigValue;
+
 /**
  * Test cluster wide configuration schema.
  */
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/RestConfigurationSchema.java b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/DiscoveryConfigurationSchema.java
similarity index 76%
copy from modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/RestConfigurationSchema.java
copy to modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/DiscoveryConfigurationSchema.java
index d25c61c..289878d 100644
--- a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/RestConfigurationSchema.java
+++ b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/DiscoveryConfigurationSchema.java
@@ -15,19 +15,21 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.configuration.extended;
+package org.apache.ignite.configuration.sample;
 
 import org.apache.ignite.configuration.annotation.Config;
 import org.apache.ignite.configuration.annotation.Value;
 
-/** */
+/**
+ * Test discovery configuration schema.
+ */
 @Config
-public class RestConfigurationSchema {
-    /** */
+public class DiscoveryConfigurationSchema {
+    /** Node failure detection timeout. */
     @Value
-    private int port;
+    private int failureDetectionTimeout;
 
-    /** */
+    /** Node join timeout. */
     @Value
-    private int portRange;
+    private int joinTimeout;
 }
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/LocalConfigurationSchema.java b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/NetworkConfigurationSchema.java
similarity index 73%
copy from modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/LocalConfigurationSchema.java
copy to modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/NetworkConfigurationSchema.java
index 60a1a9f..8f2fb7f 100644
--- a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/LocalConfigurationSchema.java
+++ b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/NetworkConfigurationSchema.java
@@ -15,25 +15,19 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.configuration.extended;
+package org.apache.ignite.configuration.sample;
 
 import org.apache.ignite.configuration.annotation.Config;
 import org.apache.ignite.configuration.annotation.ConfigValue;
 
 /**
- *
+ * Test network configuration schema.
  */
-@Config(value = "local", root = true)
-public class LocalConfigurationSchema {
-    /** */
+@Config(value = "network", root = true)
+public class NetworkConfigurationSchema {
+    /** Discovery. */
     @ConfigValue
-    private RestConfigurationSchema rest;
+    private DiscoveryConfigurationSchema discovery;
 
-    /** */
-    @ConfigValue
-    private BaselineConfigurationSchema baseline;
 
-    /** */
-    @ConfigValue
-    private DataStorageConfigurationSchema dataStorage;
 }
diff --git a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/UsageTest.java b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/UsageTest.java
index d200efc..f1ea2d9 100644
--- a/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/UsageTest.java
+++ b/modules/configuration-annotation-processor/src/test/java/org/apache/ignite/configuration/sample/UsageTest.java
@@ -21,41 +21,41 @@
 import java.util.Collections;
 import java.util.function.Consumer;
 import org.apache.ignite.configuration.Configurator;
+import org.apache.ignite.configuration.ConfigurationRegistry;
 import org.apache.ignite.configuration.internal.NamedList;
 import org.apache.ignite.configuration.storage.ConfigurationStorage;
+import org.apache.ignite.configuration.storage.StorageException;
 import org.apache.ignite.configuration.validation.ConfigurationValidationException;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.apache.ignite.configuration.PublicConfigurator;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 /**
  * Simple usage test of generated configuration schema.
  */
 public class UsageTest {
+    private final ConfigurationStorage storage = new ConfigurationStorage() {
+        @Override public <T extends Serializable> void save(String propertyName, T object) throws StorageException {
+
+        }
+
+        @Override public <T extends Serializable> T get(String propertyName) throws StorageException {
+            return null;
+        }
+
+        @Override
+        public <T extends Serializable> void listen(String key, Consumer<T> listener) throws StorageException {
+
+        }
+    };
 
     /**
      * Test creation of configuration and calling configuration API methods.
      */
     @Test
     public void test() {
-        final ConfigurationStorage storage = new ConfigurationStorage() {
-
-            @Override
-            public <T extends Serializable> void save(String propertyName, T object) {
-
-            }
-
-            @Override
-            public <T extends Serializable> T get(String propertyName) {
-                return null;
-            }
-
-            @Override
-            public <T extends Serializable> void listen(String key, Consumer<T> listener) {
-
-            }
-        };
-
         InitLocal initLocal = new InitLocal().withBaseline(
             new InitBaseline()
                 .withNodes(
@@ -84,7 +84,7 @@
         configurator.getRoot().baseline().autoAdjust().enabled(true);
         configurator.getRoot().baseline().nodes().get("node1").autoAdjustEnabled(true);
 
-        try{
+        try {
             configurator.getRoot().baseline().autoAdjust().enabled(false);
             Assertions.fail();
         } catch (ConfigurationValidationException e) {}
@@ -92,4 +92,44 @@
         PublicConfigurator<LocalConfiguration> con = new PublicConfigurator<>(configurator);
     }
 
+    /**
+     * Test to show an API to work with multiroot configurations.
+     */
+    @Test
+    public void multiRootConfigurationTest() {
+        ConfigurationRegistry sysConf = new ConfigurationRegistry();
+
+        int failureDetectionTimeout = 30_000;
+        int joinTimeout = 10_000;
+
+        long autoAdjustTimeout = 30_000L;
+
+        InitNetwork initNetwork = new InitNetwork().withDiscovery(
+            new InitDiscovery()
+                .withFailureDetectionTimeout(failureDetectionTimeout)
+                .withJoinTimeout(joinTimeout)
+        );
+
+        InitLocal initLocal = new InitLocal().withBaseline(
+            new InitBaseline().withAutoAdjust(
+                new InitAutoAdjust().withEnabled(true)
+                    .withTimeout(autoAdjustTimeout))
+        );
+
+        Configurator<LocalConfigurationImpl> localConf = Configurator.create(storage,
+            LocalConfigurationImpl::new, initLocal);
+
+        sysConf.registerConfigurator(localConf);
+
+        Configurator<NetworkConfigurationImpl> networkConf = Configurator.create(storage,
+            NetworkConfigurationImpl::new, initNetwork);
+
+        sysConf.registerConfigurator(networkConf);
+
+        assertEquals(failureDetectionTimeout,
+            sysConf.getConfiguration(NetworkConfigurationImpl.KEY).discovery().failureDetectionTimeout().value());
+
+        assertEquals(autoAdjustTimeout,
+            sysConf.getConfiguration(LocalConfigurationImpl.KEY).baseline().autoAdjust().timeout().value());
+    }
 }
diff --git a/modules/configuration/src/main/java/org/apache/ignite/configuration/ConfigurationRegistry.java b/modules/configuration/src/main/java/org/apache/ignite/configuration/ConfigurationRegistry.java
new file mode 100644
index 0000000..356d8e5
--- /dev/null
+++ b/modules/configuration/src/main/java/org/apache/ignite/configuration/ConfigurationRegistry.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.configuration;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.ignite.configuration.internal.DynamicConfiguration;
+
+/** */
+public class ConfigurationRegistry {
+    /** */
+    private final Map<String, Configurator<?>> configs = new HashMap<>();
+
+    /** */
+    public <T extends DynamicConfiguration<?, ?, ?>> void registerConfigurator(Configurator<T> unitConfig) {
+        String key = unitConfig.getRoot().key();
+
+        configs.put(key, unitConfig);
+    }
+
+    /** */
+    public <V, C, T extends ConfigurationTree<V, C>> T getConfiguration(RootKey<T> rootKey) {
+        return (T) configs.get(rootKey.key()).getRoot();
+    }
+
+    /** */
+    public Map<String, Configurator<? extends DynamicConfiguration<?, ?, ?>>> getConfigurators() {
+        return Collections.unmodifiableMap(configs);
+    }
+}
diff --git a/modules/configuration/src/main/java/org/apache/ignite/configuration/Configurator.java b/modules/configuration/src/main/java/org/apache/ignite/configuration/Configurator.java
index 6150b60..3e3592a 100644
--- a/modules/configuration/src/main/java/org/apache/ignite/configuration/Configurator.java
+++ b/modules/configuration/src/main/java/org/apache/ignite/configuration/Configurator.java
@@ -18,6 +18,8 @@
 package org.apache.ignite.configuration;
 
 import java.io.Serializable;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -119,6 +121,21 @@
     }
 
     /**
+     * 
+     */
+    public Class<?> getChangeType() {
+        Type sClass = root.getClass().getGenericSuperclass();
+
+        assert sClass instanceof ParameterizedType;
+
+        ParameterizedType pt = (ParameterizedType)sClass;
+
+        assert pt.getActualTypeArguments().length == 3;
+
+        return (Class<?>) pt.getActualTypeArguments()[2];
+    }
+
+    /**
      *
      * @param selector
      * @param newValue
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/RestConfigurationSchema.java b/modules/configuration/src/main/java/org/apache/ignite/configuration/RootKey.java
similarity index 72%
copy from modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/RestConfigurationSchema.java
copy to modules/configuration/src/main/java/org/apache/ignite/configuration/RootKey.java
index d25c61c..488eb03 100644
--- a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/RestConfigurationSchema.java
+++ b/modules/configuration/src/main/java/org/apache/ignite/configuration/RootKey.java
@@ -15,19 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.configuration.extended;
-
-import org.apache.ignite.configuration.annotation.Config;
-import org.apache.ignite.configuration.annotation.Value;
+package org.apache.ignite.configuration;
 
 /** */
-@Config
-public class RestConfigurationSchema {
+public interface RootKey<T extends ConfigurationTree<?, ?>> {
     /** */
-    @Value
-    private int port;
-
-    /** */
-    @Value
-    private int portRange;
+    public String key();
 }
diff --git a/modules/ignite-runner/src/main/resources/bootstrap-config.json b/modules/ignite-runner/src/main/resources/bootstrap-config.json
deleted file mode 100644
index b9fd7a1..0000000
--- a/modules/ignite-runner/src/main/resources/bootstrap-config.json
+++ /dev/null
@@ -1 +0,0 @@
-{"local":{"rest":{"port":10300,"portRange":100},"baseline":{"autoAdjust":{"timeout":10000,"enabled":true}},"dataStorage": {"pageSize":4096,"storagePath":"db/data","walPath":"db/wal"}}}
diff --git a/modules/ignite-runner/pom.xml b/modules/rest/pom.xml
similarity index 84%
copy from modules/ignite-runner/pom.xml
copy to modules/rest/pom.xml
index f527e09..79849e9 100644
--- a/modules/ignite-runner/pom.xml
+++ b/modules/rest/pom.xml
@@ -26,13 +26,12 @@
 
     <parent>
         <groupId>org.apache.ignite</groupId>
-        <artifactId>ignite-parent</artifactId>
-        <version>1</version>
-        <relativePath>../../parent/pom.xml</relativePath>
+        <artifactId>apache-ignite</artifactId>
+        <version>3.0.0-SNAPSHOT</version>
+        <relativePath>../..</relativePath>
     </parent>
 
-    <artifactId>ignite-runner</artifactId>
-    <version>3.0.0-SNAPSHOT</version>
+    <artifactId>ignite-rest</artifactId>
 
     <dependencies>
         <dependency>
@@ -42,14 +41,6 @@
         </dependency>
 
         <dependency>
-            <groupId>org.apache.ignite</groupId>
-            <artifactId>ignite-configuration-annotation-processor</artifactId>
-            <version>${project.version}</version>
-            <scope>compile</scope>
-        </dependency>
-
-        <!-- 3rd party dependencies. -->
-        <dependency>
             <groupId>com.google.code.gson</groupId>
             <artifactId>gson</artifactId>
         </dependency>
@@ -63,6 +54,13 @@
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-simple</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-configuration-annotation-processor</artifactId>
+            <version>${project.version}</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -72,5 +70,13 @@
                 <filtering>true</filtering>
             </resource>
         </resources>
+
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.8.1</version>
+            </plugin>
+        </plugins>
     </build>
-</project>
+</project>
\ No newline at end of file
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/rest/ErrorResult.java b/modules/rest/src/main/java/org/apache/ignite/rest/ErrorResult.java
similarity index 100%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/rest/ErrorResult.java
rename to modules/rest/src/main/java/org/apache/ignite/rest/ErrorResult.java
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/rest/RestModule.java b/modules/rest/src/main/java/org/apache/ignite/rest/RestModule.java
similarity index 65%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/rest/RestModule.java
rename to modules/rest/src/main/java/org/apache/ignite/rest/RestModule.java
index 87fb2e6..7a77b05 100644
--- a/modules/ignite-runner/src/main/java/org/apache/ignite/rest/RestModule.java
+++ b/modules/rest/src/main/java/org/apache/ignite/rest/RestModule.java
@@ -19,16 +19,19 @@
 
 import com.google.gson.JsonSyntaxException;
 import io.javalin.Javalin;
-import org.apache.ignite.configuration.ConfigurationModule;
+import java.io.Reader;
 import org.apache.ignite.configuration.Configurator;
-import org.apache.ignite.configuration.extended.ChangeLocal;
-import org.apache.ignite.configuration.extended.Local;
-import org.apache.ignite.configuration.extended.LocalConfigurationImpl;
-import org.apache.ignite.configuration.extended.Selectors;
+import org.apache.ignite.configuration.ConfigurationRegistry;
 import org.apache.ignite.configuration.internal.selector.SelectorNotFoundException;
-import org.apache.ignite.configuration.presentation.FormatConverter;
-import org.apache.ignite.configuration.presentation.json.JsonConverter;
+import org.apache.ignite.rest.presentation.ConfigurationPresentation;
+import org.apache.ignite.rest.presentation.FormatConverter;
+import org.apache.ignite.rest.presentation.json.JsonConverter;
+import org.apache.ignite.rest.presentation.json.JsonPresentation;
+import org.apache.ignite.configuration.storage.ConfigurationStorage;
 import org.apache.ignite.configuration.validation.ConfigurationValidationException;
+import org.apache.ignite.rest.configuration.InitRest;
+import org.apache.ignite.rest.configuration.RestConfigurationImpl;
+import org.apache.ignite.rest.configuration.Selectors;
 import org.slf4j.Logger;
 
 /**
@@ -48,23 +51,97 @@
     private static final String PATH_PARAM = "selector";
 
     /** */
-    private final ConfigurationModule confModule;
+    private ConfigurationRegistry sysConf;
+
+    /** */
+    private volatile ConfigurationPresentation<String> presentation;
 
     /** */
     private final Logger log;
 
     /** */
-    public RestModule(ConfigurationModule confModule, Logger log) {
-        this.confModule = confModule;
+    public RestModule(Logger log) {
         this.log = log;
     }
 
     /** */
-    public void start() {
-        Configurator<LocalConfigurationImpl> configurator = confModule.localConfigurator();
+    public void prepareStart(ConfigurationRegistry sysConfig, Reader moduleConfReader, ConfigurationStorage storage) {
+        try {
+            Class.forName(Selectors.class.getName());
+        }
+        catch (ClassNotFoundException e) {
+            // No-op.
+        }
 
-        Integer port = configurator.getPublic(Selectors.LOCAL_REST_PORT);
-        Integer portRange = configurator.getPublic(Selectors.LOCAL_REST_PORT_RANGE);
+        sysConf = sysConfig;
+
+        presentation = new JsonPresentation(sysConfig.getConfigurators());
+
+        FormatConverter converter = new JsonConverter();
+
+        Configurator<RestConfigurationImpl> restConf = Configurator.create(storage, RestConfigurationImpl::new,
+            converter.convertFrom(moduleConfReader, "rest", InitRest.class));
+
+        sysConfig.registerConfigurator(restConf);
+    }
+
+    /** */
+    public void start() {
+        Javalin app = startRestEndpoint();
+
+        FormatConverter converter = new JsonConverter();
+
+        app.get(CONF_URL, ctx -> {
+            ctx.result(presentation.represent());
+        });
+
+        app.get(CONF_URL + ":" + PATH_PARAM, ctx -> {
+            String configPath = ctx.pathParam(PATH_PARAM);
+
+            try {
+                ctx.result(presentation.representByPath(configPath));
+            }
+            catch (SelectorNotFoundException | IllegalArgumentException pathE) {
+                ErrorResult eRes = new ErrorResult("CONFIG_PATH_UNRECOGNIZED", pathE.getMessage());
+
+                ctx.status(400).result(converter.convertTo("error", eRes));
+            }
+        });
+
+        app.post(CONF_URL, ctx -> {
+            try {
+                presentation.update(ctx.body());
+            }
+            catch (SelectorNotFoundException | IllegalArgumentException argE) {
+                ErrorResult eRes = new ErrorResult("CONFIG_PATH_UNRECOGNIZED", argE.getMessage());
+
+                ctx.status(400).result(converter.convertTo("error", eRes));
+            }
+            catch (ConfigurationValidationException validationE) {
+                ErrorResult eRes = new ErrorResult("APPLICATION_EXCEPTION", validationE.getMessage());
+
+                ctx.status(400).result(converter.convertTo("error", eRes));
+            }
+            catch (JsonSyntaxException e) {
+                String msg = e.getCause() != null ? e.getCause().getMessage() : e.getMessage();
+
+                ErrorResult eRes = new ErrorResult("VALIDATION_EXCEPTION", msg);
+
+                ctx.status(400).result(converter.convertTo("error", eRes));
+            }
+            catch (Exception e) {
+                ErrorResult eRes = new ErrorResult("VALIDATION_EXCEPTION", e.getMessage());
+
+                ctx.status(400).result(converter.convertTo("error", eRes));
+            }
+        });
+    }
+
+    /** */
+    private Javalin startRestEndpoint() {
+        Integer port = sysConf.getConfiguration(RestConfigurationImpl.KEY).port().value();
+        Integer portRange = sysConf.getConfiguration(RestConfigurationImpl.KEY).portRange().value();
+
         Javalin app = null;
 
         if (portRange == null || portRange == 0) {
@@ -104,57 +181,11 @@
 
         log.info("REST protocol started successfully on port " + app.port());
 
-        FormatConverter converter = new JsonConverter();
+        return app;
+    }
 
-        app.get(CONF_URL, ctx -> {
-            Local local = configurator.getRoot().value();
-
-            ctx.result(converter.convertTo("local", local));
-        });
-
-        app.get(CONF_URL + ":" + PATH_PARAM, ctx -> {
-            try {
-                Object subTree = configurator.getPublic(Selectors.find(ctx.pathParam(PATH_PARAM)));
-
-                String res = converter.convertTo(subTree);
-
-                ctx.result(res);
-            }
-            catch (SelectorNotFoundException selectorE) {
-                ErrorResult eRes = new ErrorResult("CONFIG_PATH_UNRECOGNIZED", selectorE.getMessage());
-
-                ctx.status(400).result(converter.convertTo("error", eRes));
-            }
-        });
-
-        app.post(CONF_URL, ctx -> {
-            try {
-                ChangeLocal local = converter.convertFrom(ctx.body(), "local", ChangeLocal.class);
-
-                configurator.set(Selectors.LOCAL, local);
-            }
-            catch (SelectorNotFoundException selectorE) {
-                ErrorResult eRes = new ErrorResult("CONFIG_PATH_UNRECOGNIZED", selectorE.getMessage());
-
-                ctx.status(400).result(converter.convertTo("error", eRes));
-            }
-            catch (ConfigurationValidationException validationE) {
-                ErrorResult eRes = new ErrorResult("APPLICATION_EXCEPTION", validationE.getMessage());
-
-                ctx.status(400).result(converter.convertTo("error", eRes));
-            }
-            catch (JsonSyntaxException e) {
-                String msg = e.getCause() != null ? e.getCause().getMessage() : e.getMessage();
-
-                ErrorResult eRes = new ErrorResult("VALIDATION_EXCEPTION", msg);
-
-                ctx.status(400).result(converter.convertTo("error", eRes));
-            }
-            catch (Exception e) {
-                ErrorResult eRes = new ErrorResult("VALIDATION_EXCEPTION", e.getMessage());
-
-                ctx.status(400).result(converter.convertTo("error", eRes));
-            }
-        });
+    /** */
+    public String configRootKey() {
+        return "rest";
     }
 }
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/RestConfigurationSchema.java b/modules/rest/src/main/java/org/apache/ignite/rest/configuration/RestConfigurationSchema.java
similarity index 92%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/RestConfigurationSchema.java
rename to modules/rest/src/main/java/org/apache/ignite/rest/configuration/RestConfigurationSchema.java
index d25c61c..e842c9a 100644
--- a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/RestConfigurationSchema.java
+++ b/modules/rest/src/main/java/org/apache/ignite/rest/configuration/RestConfigurationSchema.java
@@ -15,13 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.configuration.extended;
+package org.apache.ignite.rest.configuration;
 
 import org.apache.ignite.configuration.annotation.Config;
 import org.apache.ignite.configuration.annotation.Value;
 
-/** */
-@Config
+@Config(value = "rest", root = true)
 public class RestConfigurationSchema {
     /** */
     @Value
diff --git a/modules/rest/src/main/java/org/apache/ignite/rest/presentation/ConfigurationPresentation.java b/modules/rest/src/main/java/org/apache/ignite/rest/presentation/ConfigurationPresentation.java
new file mode 100644
index 0000000..53b3653
--- /dev/null
+++ b/modules/rest/src/main/java/org/apache/ignite/rest/presentation/ConfigurationPresentation.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.rest.presentation;
+
+/** */
+public interface ConfigurationPresentation<R> {
+    /**
+     * Converts to presentation whole system configuration (all system modules are included).
+     *
+     * @return System configuration presentation converted to a given presentation type.
+     */
+    R represent();
+
+    /**
+     * Converts to presentation only a fraction of system configuration defined by given path.
+     *
+     * If null path is passed method should fall back to returning whole system configuration.
+     *
+     * @param path Path to requested configuration in configuration tree or {@code null}.
+     *
+     * @return Requested configuration fraction or whole configuration if {@code null} was passed.
+     */
+    R representByPath(String path);
+
+    /**
+     * Converts and applies configuration update request to system configuration.
+     *
+     * Note: for simplisity on this stage of development it is supposed that update request
+     * contains only one root to update despite of multiroot configuration is supported.
+     *
+     * To support updating multiple roots at once more logic should be implemented including
+     * support in {@link FormatConverter} subclasses.
+     *
+     * @param configUpdate Configuration update request in representation form.
+     */
+    void update(R configUpdate);
+}
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/presentation/FormatConverter.java b/modules/rest/src/main/java/org/apache/ignite/rest/presentation/FormatConverter.java
similarity index 86%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/configuration/presentation/FormatConverter.java
rename to modules/rest/src/main/java/org/apache/ignite/rest/presentation/FormatConverter.java
index 6bba4cf..eee1d16 100644
--- a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/presentation/FormatConverter.java
+++ b/modules/rest/src/main/java/org/apache/ignite/rest/presentation/FormatConverter.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.configuration.presentation;
+package org.apache.ignite.rest.presentation;
 
 import java.io.Reader;
 
@@ -28,7 +28,10 @@
     String convertTo(String rootName, Object obj);
 
     /** */
-    <T> T convertFrom(String source, String rootName, Class<T> clazz);
+    String rootName(String source);
+
+    /** */
+    Object convertFrom(String source, String rootName, Class<?> clazz);
 
     /** */
     <T> T convertFrom(Reader source, String rootName, Class<T> clazz);
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/presentation/json/JsonConverter.java b/modules/rest/src/main/java/org/apache/ignite/rest/presentation/json/JsonConverter.java
similarity index 74%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/configuration/presentation/json/JsonConverter.java
rename to modules/rest/src/main/java/org/apache/ignite/rest/presentation/json/JsonConverter.java
index 5622e2f..4156f14 100644
--- a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/presentation/json/JsonConverter.java
+++ b/modules/rest/src/main/java/org/apache/ignite/rest/presentation/json/JsonConverter.java
@@ -15,14 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.configuration.presentation.json;
+package org.apache.ignite.rest.presentation.json;
 
 import java.io.Reader;
 
 import com.google.gson.Gson;
 import java.util.HashMap;
 import java.util.Map;
-import org.apache.ignite.configuration.presentation.FormatConverter;
+import java.util.Optional;
+import org.apache.ignite.rest.presentation.FormatConverter;
 
 /** */
 public class JsonConverter implements FormatConverter {
@@ -44,7 +45,17 @@
     }
 
     /** {@inheritDoc} */
-    @Override public <T> T convertFrom(String source, String rootName, Class<T> clazz) {
+    @Override public String rootName(String source) {
+        Map<String, Object> map = gson.fromJson(source, Map.class);
+
+        // Peek only first root for simplicite. See comment in ConfigurationPresentation#update for more context.
+        Optional<String> firstOpt = map.keySet().stream().findFirst();
+
+        return firstOpt.isPresent() ? firstOpt.get() : null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public Object convertFrom(String source, String rootName, Class<?> clazz) {
         Map map = gson.fromJson(source, Map.class);
 
         String root = gson.toJson(map.get(rootName));
diff --git a/modules/rest/src/main/java/org/apache/ignite/rest/presentation/json/JsonPresentation.java b/modules/rest/src/main/java/org/apache/ignite/rest/presentation/json/JsonPresentation.java
new file mode 100644
index 0000000..1d54253
--- /dev/null
+++ b/modules/rest/src/main/java/org/apache/ignite/rest/presentation/json/JsonPresentation.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.rest.presentation.json;
+
+import java.util.Map;
+import java.util.stream.Collectors;
+import org.apache.ignite.configuration.ConfigurationProperty;
+import org.apache.ignite.configuration.Configurator;
+import org.apache.ignite.configuration.internal.DynamicConfiguration;
+import org.apache.ignite.configuration.internal.selector.BaseSelectors;
+import org.apache.ignite.rest.presentation.ConfigurationPresentation;
+
+/** */
+public class JsonPresentation implements ConfigurationPresentation<String> {
+    /** */
+    private final JsonConverter converter = new JsonConverter();
+
+    /** */
+    private final Map<String, Configurator<? extends DynamicConfiguration<?, ?, ?>>> configsMap;
+
+    /** */
+    public JsonPresentation(Map<String, Configurator<? extends DynamicConfiguration<?, ?, ?>>> configsMap) {
+        this.configsMap = configsMap;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String represent() {
+        Map<String, ?> preparedMap = configsMap.entrySet().stream().collect(Collectors.toMap(
+            e -> e.getKey(),
+            e -> e.getValue().getRoot().value()
+        ));
+
+        return converter.convertTo(preparedMap);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String representByPath(String path) {
+        if (path == null || path.isEmpty())
+            return represent();
+
+        String root = path.contains(".") ? path.substring(0, path.indexOf('.')) : path;
+
+        Configurator<? extends DynamicConfiguration<?, ?, ?>> configurator = configsMap.get(root);
+
+        ConfigurationProperty<Object, Object> prop = configurator.getInternal(BaseSelectors.find(path));
+
+        return converter.convertTo(prop.value());
+    }
+
+    /** {@inheritDoc} */
+    @Override public void update(String configUpdate) {
+        String root = converter.rootName(configUpdate);
+
+        if (root == null) {
+            throw new IllegalArgumentException("Invalid request, no root in request: " + configUpdate);
+        }
+
+        Configurator<? extends DynamicConfiguration<?, ?, ?>> configurator = configsMap.get(root);
+
+        if (configurator == null) {
+            throw new IllegalArgumentException("Invalid request, configuration root not found: " + configUpdate);
+        }
+
+        Object updateObj = converter.convertFrom(configUpdate, root, configurator.getChangeType());
+
+        configurator.set(BaseSelectors.find(root), updateObj);
+    }
+}
diff --git a/modules/ignite-runner/pom.xml b/modules/runner/pom.xml
similarity index 91%
rename from modules/ignite-runner/pom.xml
rename to modules/runner/pom.xml
index f527e09..af05830 100644
--- a/modules/ignite-runner/pom.xml
+++ b/modules/runner/pom.xml
@@ -48,6 +48,13 @@
             <scope>compile</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-rest</artifactId>
+            <version>${project.version}</version>
+            <scope>compile</scope>
+        </dependency>
+
         <!-- 3rd party dependencies. -->
         <dependency>
             <groupId>com.google.code.gson</groupId>
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/app/IgniteRunner.java b/modules/runner/src/main/java/org/apache/ignite/app/IgniteRunner.java
similarity index 73%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/app/IgniteRunner.java
rename to modules/runner/src/main/java/org/apache/ignite/app/IgniteRunner.java
index e336292..cb26484 100644
--- a/modules/ignite-runner/src/main/java/org/apache/ignite/app/IgniteRunner.java
+++ b/modules/runner/src/main/java/org/apache/ignite/app/IgniteRunner.java
@@ -17,13 +17,17 @@
 
 package org.apache.ignite.app;
 
+import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.io.Reader;
 import java.util.Arrays;
 import java.util.stream.Collectors;
+import java.io.Serializable;
+import java.io.StringReader;
+import java.util.function.Consumer;
 import org.apache.ignite.configuration.ConfigurationModule;
+import org.apache.ignite.configuration.storage.ConfigurationStorage;
 import org.apache.ignite.rest.RestModule;
 import org.apache.ignite.utils.IgniteProperties;
 import org.slf4j.Logger;
@@ -60,7 +64,25 @@
     private static final String VER_KEY = "version";
 
     /** */
-    private final static Logger log = LoggerFactory.getLogger(IgniteRunner.class);
+    private static final Logger log = LoggerFactory.getLogger(IgniteRunner.class);
+
+    /** */
+    private static final ConfigurationStorage STORAGE = new ConfigurationStorage() {
+        /** {@inheritDoc} */
+        @Override public <T extends Serializable> void save(String propertyName, T object) {
+
+        }
+
+        /** {@inheritDoc} */
+        @Override public <T extends Serializable> T get(String propertyName) {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public <T extends Serializable> void listen(String key, Consumer<T> listener) {
+
+        }
+    };
 
     /**
      * It is possible to start application with a custom configuration in form of json file other than that in resources.
@@ -74,13 +96,15 @@
 
         ConfigurationModule confModule = new ConfigurationModule();
 
-        Reader confReader = null;
+        RestModule restModule = new RestModule(log);
+
+        BufferedReader confReader = null;
 
         try {
             if (args != null) {
                 for (int i = 0; i < args.length; i++) {
                     if (CONF_PARAM_NAME.equals(args[i]) && i + 1 < args.length) {
-                        confReader = new FileReader(args[i + 1]);
+                        confReader = new BufferedReader(new FileReader(args[i + 1]));
 
                         break;
                     }
@@ -88,20 +112,28 @@
             }
 
             if (confReader == null) {
-                confReader = new InputStreamReader(
-                    IgniteRunner.class.getClassLoader().getResourceAsStream(DFLT_CONF_FILE_NAME));
+                confReader = new BufferedReader(new InputStreamReader(
+                    IgniteRunner.class.getClassLoader().getResourceAsStream(DFLT_CONF_FILE_NAME)));
             }
 
-            confModule.bootstrap(confReader);
+            StringBuilder bldr = new StringBuilder();
+
+            String str;
+
+            while ((str = confReader.readLine()) != null) {
+                bldr.append(str);
+            }
+
+            restModule.prepareStart(confModule.configurationRegistry(), new StringReader(bldr.toString()), STORAGE);
+
+            confModule.bootstrap(new StringReader(bldr.toString()), STORAGE);
         }
         finally {
             if (confReader != null)
                 confReader.close();
         }
 
-        RestModule rest = new RestModule(confModule, log);
-
-        rest.start();
+        restModule.start();
 
         ackSuccessStart();
     }
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/ConfigurationModule.java b/modules/runner/src/main/java/org/apache/ignite/configuration/ConfigurationModule.java
similarity index 71%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/configuration/ConfigurationModule.java
rename to modules/runner/src/main/java/org/apache/ignite/configuration/ConfigurationModule.java
index c04f5bf..65c89c7 100644
--- a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/ConfigurationModule.java
+++ b/modules/runner/src/main/java/org/apache/ignite/configuration/ConfigurationModule.java
@@ -18,15 +18,13 @@
 package org.apache.ignite.configuration;
 
 import java.io.Reader;
-import java.io.Serializable;
-import java.util.function.Consumer;
 
 import org.apache.ignite.configuration.extended.InitLocal;
 import org.apache.ignite.configuration.extended.LocalConfigurationImpl;
 import org.apache.ignite.configuration.extended.Selectors;
-import org.apache.ignite.configuration.presentation.FormatConverter;
-import org.apache.ignite.configuration.presentation.json.JsonConverter;
 import org.apache.ignite.configuration.storage.ConfigurationStorage;
+import org.apache.ignite.rest.presentation.FormatConverter;
+import org.apache.ignite.rest.presentation.json.JsonConverter;
 
 /**
  * Module is responsible for preparing configuration when module is started.
@@ -37,7 +35,7 @@
 public class ConfigurationModule {
     static {
         try {
-            Selectors.LOCAL_BASELINE_AUTO_ADJUST_ENABLED.select(null);
+            Selectors.LOCAL_BASELINE.select(null);
         }
         catch (Throwable ignored) {
             // No-op.
@@ -45,38 +43,32 @@
     }
 
     /** */
-    private final ConfigurationStorage storage = new ConfigurationStorage() {
-        /** {@inheritDoc} */
-        @Override public <T extends Serializable> void save(String propertyName, T object) {
-
-        }
-
-        /** {@inheritDoc} */
-        @Override public <T extends Serializable> T get(String propertyName) {
-            return null;
-        }
-
-        /** {@inheritDoc} */
-        @Override public <T extends Serializable> void listen(String key, Consumer<T> listener) {
-
-        }
-    };
-
-    /** */
     private Configurator<LocalConfigurationImpl> localConfigurator;
 
     /** */
-    public void bootstrap(Reader confReader) {
+    private final ConfigurationRegistry confRegistry = new ConfigurationRegistry();
+
+    /** */
+    public void bootstrap(Reader confReader, ConfigurationStorage storage) {
         FormatConverter converter = new JsonConverter();
 
         Configurator<LocalConfigurationImpl> configurator =
             Configurator.create(storage, LocalConfigurationImpl::new, converter.convertFrom(confReader, "local", InitLocal.class));
 
         localConfigurator = configurator;
+
+        String key = configurator.getRoot().key();
+
+        confRegistry.registerConfigurator(configurator);
     }
 
     /** */
     public Configurator<LocalConfigurationImpl> localConfigurator() {
         return localConfigurator;
     }
+
+    /** */
+    public ConfigurationRegistry configurationRegistry() {
+        return confRegistry;
+    }
 }
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/AutoAdjustConfigurationSchema.java b/modules/runner/src/main/java/org/apache/ignite/configuration/extended/AutoAdjustConfigurationSchema.java
similarity index 99%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/AutoAdjustConfigurationSchema.java
rename to modules/runner/src/main/java/org/apache/ignite/configuration/extended/AutoAdjustConfigurationSchema.java
index c0bfaca..69df80d 100644
--- a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/AutoAdjustConfigurationSchema.java
+++ b/modules/runner/src/main/java/org/apache/ignite/configuration/extended/AutoAdjustConfigurationSchema.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.configuration.extended;
 
-
 import javax.validation.constraints.Min;
 import org.apache.ignite.configuration.annotation.Config;
 import org.apache.ignite.configuration.annotation.Value;
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/BaselineConfigurationSchema.java b/modules/runner/src/main/java/org/apache/ignite/configuration/extended/BaselineConfigurationSchema.java
similarity index 100%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/BaselineConfigurationSchema.java
rename to modules/runner/src/main/java/org/apache/ignite/configuration/extended/BaselineConfigurationSchema.java
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/DataStorageConfigurationSchema.java b/modules/runner/src/main/java/org/apache/ignite/configuration/extended/DataStorageConfigurationSchema.java
similarity index 100%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/DataStorageConfigurationSchema.java
rename to modules/runner/src/main/java/org/apache/ignite/configuration/extended/DataStorageConfigurationSchema.java
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/LocalConfigurationSchema.java b/modules/runner/src/main/java/org/apache/ignite/configuration/extended/LocalConfigurationSchema.java
similarity index 94%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/LocalConfigurationSchema.java
rename to modules/runner/src/main/java/org/apache/ignite/configuration/extended/LocalConfigurationSchema.java
index 60a1a9f..08903f8 100644
--- a/modules/ignite-runner/src/main/java/org/apache/ignite/configuration/extended/LocalConfigurationSchema.java
+++ b/modules/runner/src/main/java/org/apache/ignite/configuration/extended/LocalConfigurationSchema.java
@@ -27,10 +27,6 @@
 public class LocalConfigurationSchema {
     /** */
     @ConfigValue
-    private RestConfigurationSchema rest;
-
-    /** */
-    @ConfigValue
     private BaselineConfigurationSchema baseline;
 
     /** */
diff --git a/modules/ignite-runner/src/main/java/org/apache/ignite/utils/IgniteProperties.java b/modules/runner/src/main/java/org/apache/ignite/utils/IgniteProperties.java
similarity index 100%
rename from modules/ignite-runner/src/main/java/org/apache/ignite/utils/IgniteProperties.java
rename to modules/runner/src/main/java/org/apache/ignite/utils/IgniteProperties.java
diff --git a/modules/runner/src/main/resources/bootstrap-config.json b/modules/runner/src/main/resources/bootstrap-config.json
new file mode 100644
index 0000000..1679263
--- /dev/null
+++ b/modules/runner/src/main/resources/bootstrap-config.json
@@ -0,0 +1,19 @@
+{
+  "local": {
+    "baseline": {
+      "autoAdjust": {
+        "timeout":10000,
+        "enabled":true
+      }
+    },
+    "dataStorage": {
+      "pageSize":4096,
+      "storagePath":"db/data",
+      "walPath":"db/wal"
+    }
+  },
+  "rest": {
+    "port":10300,
+    "portRange":100
+  }
+}
\ No newline at end of file
diff --git a/modules/ignite-runner/src/main/resources/ignite.properties b/modules/runner/src/main/resources/ignite.properties
similarity index 100%
rename from modules/ignite-runner/src/main/resources/ignite.properties
rename to modules/runner/src/main/resources/ignite.properties
diff --git a/modules/ignite-runner/src/main/resources/simplelogger.properties b/modules/runner/src/main/resources/simplelogger.properties
similarity index 100%
rename from modules/ignite-runner/src/main/resources/simplelogger.properties
rename to modules/runner/src/main/resources/simplelogger.properties
diff --git a/parent/pom.xml b/parent/pom.xml
index b0129a1..ac1fc7d 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -71,6 +71,7 @@
         <slf4j.version>1.7.30</slf4j.version>
         <spoon.framework.version>8.3.0</spoon.framework.version>
         <typesafe.version>1.4.1</typesafe.version>
+        <hamcrest.version>2.2</hamcrest.version>
 
         <!-- Plugins versions -->
         <apache.rat.plugin.version>0.13</apache.rat.plugin.version>
@@ -233,6 +234,12 @@
                 <artifactId>spoon-core</artifactId>
                 <version>${spoon.framework.version}</version>
             </dependency>
+
+            <dependency>
+                <groupId>org.hamcrest</groupId>
+                <artifactId>hamcrest-library</artifactId>
+                <version>${hamcrest.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
diff --git a/pom.xml b/pom.xml
index 0e6b050..6ce3c26 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,9 +38,10 @@
         <module>modules/cli-common</module>
         <module>modules/configuration</module>
         <module>modules/configuration-annotation-processor</module>
-        <module>modules/ignite-runner</module>
+        <module>modules/rest</module>
+        <module>modules/runner</module>
     </modules>
-    
+
     <build>
         <plugins>
             <!--
