diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITLiveSchemaChangeKVViewTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITLiveSchemaChangeKVViewTest.java
index 17c35cd..d10db1b 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITLiveSchemaChangeKVViewTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITLiveSchemaChangeKVViewTest.java
@@ -19,14 +19,13 @@
 
 import java.util.List;
 import org.apache.ignite.app.Ignite;
-import org.apache.ignite.internal.schema.SchemaAware;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.table.SchemaMismatchException;
 import org.apache.ignite.internal.table.TableImpl;
 import org.apache.ignite.schema.SchemaMode;
 import org.apache.ignite.table.KeyValueBinaryView;
 import org.apache.ignite.table.Table;
 import org.apache.ignite.table.Tuple;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -36,7 +35,6 @@
 /**
  * Live schema tests for KV View.
  */
-@Disabled("https://issues.apache.org/jira/browse/IGNITE-14581")
 class ITLiveSchemaChangeKVViewTest extends AbstractSchemaChangeTest {
     /**
      * Check exception for unknown column when STRICT_SCHEMA is enabled.
@@ -47,9 +45,9 @@
 
         createTable(grid);
 
-        KeyValueBinaryView view = grid.get(1).tables().table(TABLE).kvView();
+        KeyValueBinaryView view = grid.get(0).tables().table(TABLE).kvView();
 
-        assertThrows(IllegalArgumentException.class, () -> Tuple.create().set("key", 1L).set("unknownColumn", 10));
+        assertThrows(SchemaMismatchException.class, () -> view.put(Tuple.create().set("key", 1L), Tuple.create().set("unknownColumn", 10)));
     }
 
     /**
@@ -86,7 +84,7 @@
 
         createTable(grid);
 
-        Table tbl = grid.get(1).tables().table(TABLE);
+        Table tbl = grid.get(0).tables().table(TABLE);
 
         ((TableImpl)tbl).schemaType(SchemaMode.LIVE_SCHEMA);
 
@@ -113,7 +111,7 @@
         assertEquals("111", newRes.value("valStrNew"));
         assertEquals(Integer.valueOf(333), newRes.value("valIntNew"));
 
-        assertThrows(IllegalArgumentException.class, () -> Tuple.create().set("key", 1L).set("unknownColumn", 10));
+        assertThrows(SchemaMismatchException.class, () -> kvBinaryView.put(Tuple.create().set("key", 1L), Tuple.create().set("unknownColumn", 10)));
     }
 
     /**
@@ -187,7 +185,7 @@
 
         createTable(grid);
 
-        Table tbl = grid.get(1).tables().table(TABLE);
+        Table tbl = grid.get(0).tables().table(TABLE);
 
         ((TableImpl)tbl).schemaType(SchemaMode.LIVE_SCHEMA);
 
@@ -207,9 +205,7 @@
         assertEquals("111", res.value("valStrNew"));
         assertEquals(Integer.valueOf(333), res.value("valIntNew"));
 
-        Tuple newVerBuilder = Tuple.create();
-
-        SchemaDescriptor schema = ((SchemaAware)newVerBuilder).schema();
+        SchemaDescriptor schema = ((TableImpl)tbl).schemaView().schema();
 
         assertTrue(schema.columnNames().contains("valStrNew"));
         assertTrue(schema.columnNames().contains("valIntNew"));
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITLiveSchemaChangeTableTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITLiveSchemaChangeTableTest.java
index 2ca4904..8b7641d 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITLiveSchemaChangeTableTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITLiveSchemaChangeTableTest.java
@@ -20,16 +20,15 @@
 import java.util.List;
 import java.util.UUID;
 import org.apache.ignite.app.Ignite;
-import org.apache.ignite.internal.schema.SchemaAware;
+import org.apache.ignite.internal.schema.InvalidTypeException;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.table.SchemaMismatchException;
 import org.apache.ignite.internal.table.TableImpl;
 import org.apache.ignite.schema.SchemaMode;
 import org.apache.ignite.table.Table;
 import org.apache.ignite.table.Tuple;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -38,7 +37,6 @@
 /**
  * Live schema tests.
  */
-@Disabled("https://issues.apache.org/jira/browse/IGNITE-14581")
 class ITLiveSchemaChangeTableTest extends AbstractSchemaChangeTest {
     /**
      * Check exception for unknown column when STRICT_SCHEMA is enabled.
@@ -49,9 +47,9 @@
 
         createTable(grid);
 
-        Table tbl = grid.get(1).tables().table(TABLE);
+        Table tbl = grid.get(0).tables().table(TABLE);
 
-        assertThrows(IllegalArgumentException.class, () -> Tuple.create().set("key", 1L).set("unknownColumn", 10));
+        assertThrows(SchemaMismatchException.class, () -> tbl.insert(Tuple.create().set("key", 1L).set("unknownColumn", 10)));
     }
 
     /**
@@ -63,7 +61,7 @@
 
         createTable(grid);
 
-        Table tbl = grid.get(1).tables().table(TABLE);
+        Table tbl = grid.get(0).tables().table(TABLE);
 
         ((TableImpl)tbl).schemaType(SchemaMode.LIVE_SCHEMA);
 
@@ -71,7 +69,7 @@
 
         tbl.insert(row);
 
-        Tuple res = tbl.get(row);
+        Tuple res = tbl.get(Tuple.create().set("key", 1L));
 
         assertEquals("111", res.value("valStrNew"));
         assertEquals(Integer.valueOf(333), res.value("valIntNew"));
@@ -86,7 +84,7 @@
 
         createTable(grid);
 
-        Table tbl = grid.get(1).tables().table(TABLE);
+        Table tbl = grid.get(0).tables().table(TABLE);
 
         Tuple oldSchemaTuple = Tuple.create().set("key", 32L).set("valInt", 111).set("valStr", "str");
 
@@ -98,7 +96,7 @@
 
         tbl.upsert(upsertOldSchemaTuple);
 
-        Tuple oldSchemaRes = tbl.get(upsertOldSchemaTuple);
+        Tuple oldSchemaRes = tbl.get(Tuple.create().set("key", 32L));
 
         assertEquals("111", oldSchemaRes.value("valStrNew"));
         assertEquals(Integer.valueOf(333), oldSchemaRes.value("valIntNew"));
@@ -113,7 +111,7 @@
 
         createTable(grid);
 
-        Table tbl = grid.get(1).tables().table(TABLE);
+        Table tbl = grid.get(0).tables().table(TABLE);
 
         Tuple oldSchemaTuple = Tuple.create().set("key", 32L).set("valInt", 111).set("valStr", "str");
 
@@ -124,14 +122,12 @@
         tbl.insert(row);
         tbl.insert(oldSchemaTuple);
 
-        Tuple res = tbl.get(row);
+        Tuple res = tbl.get(Tuple.create().set("key", 1L));
 
         assertEquals("111", res.value("valStrNew"));
         assertEquals(Integer.valueOf(333), res.value("valIntNew"));
 
-        Tuple newVerBuilder = Tuple.create();
-
-        SchemaDescriptor schema = ((SchemaAware)newVerBuilder).schema();
+        SchemaDescriptor schema = ((TableImpl)tbl).schemaView().schema();
 
         assertTrue(schema.columnNames().contains("valStrNew"));
         assertTrue(schema.columnNames().contains("valIntNew"));
@@ -146,7 +142,7 @@
 
         createTable(grid);
 
-        Table tbl = grid.get(1).tables().table(TABLE);
+        Table tbl = grid.get(0).tables().table(TABLE);
 
         ((TableImpl)tbl).schemaType(SchemaMode.LIVE_SCHEMA);
 
@@ -154,7 +150,7 @@
 
         tbl.insert(val);
 
-        Tuple res = tbl.get(val);
+        Tuple res = tbl.get(Tuple.create().set("key", 1L));
         assertEquals("111", res.value("valStrNew"));
         assertEquals(Integer.valueOf(333), res.value("valIntNew"));
 
@@ -164,12 +160,12 @@
 
         tbl.insert(anotherKey);
 
-        Tuple newRes = tbl.get(anotherKey);
+        Tuple newRes = tbl.get(Tuple.create().set("key", 2L));
 
         assertEquals("111", newRes.value("valStrNew"));
         assertEquals(Integer.valueOf(333), newRes.value("valIntNew"));
 
-        assertThrows(IllegalArgumentException.class, () -> Tuple.create().set("key", 1L).set("unknownColumn", 10));
+        assertThrows(SchemaMismatchException.class, () -> tbl.insert(Tuple.create().set("key", 1L).set("unknownColumn", 10)));
     }
 
     /**
@@ -181,7 +177,7 @@
 
         createTable(grid);
 
-        Table tbl = grid.get(1).tables().table(TABLE);
+        Table tbl = grid.get(0).tables().table(TABLE);
 
         ((TableImpl)tbl).schemaType(SchemaMode.LIVE_SCHEMA);
 
@@ -193,7 +189,7 @@
         tbl.upsert(upsertOldSchemaVal);
         tbl.upsert(secondUpsertOldSchemaVal);
 
-        Tuple oldSchemaRes = tbl.get(secondUpsertOldSchemaVal);
+        Tuple oldSchemaRes = tbl.get(Tuple.create().set("key", 32L));
 
         assertEquals("111", oldSchemaRes.value("valStrNew"));
         assertEquals(Integer.valueOf(333), oldSchemaRes.value("valIntNew"));
@@ -209,7 +205,7 @@
 
         createTable(grid);
 
-        Table tbl = grid.get(1).tables().table(TABLE);
+        Table tbl = grid.get(0).tables().table(TABLE);
 
         ((TableImpl)tbl).schemaType(SchemaMode.LIVE_SCHEMA);
 
@@ -228,7 +224,7 @@
 
         tbl.insert(row);
 
-        Tuple res = tbl.get(row);
+        Tuple res = tbl.get(Tuple.create().set("key", 1L));
 
         assertEquals(Byte.valueOf((byte)10), res.value("valByteNew"));
         assertEquals(Short.valueOf((short)48), res.value("valShortNew"));
@@ -253,8 +249,7 @@
         assertNull(nullRes.value("valFloatNew"));
         assertNull(nullRes.value("valDoubleNew"));
         assertNull(nullRes.value("valUUIDNew"));
-
-        assertEquals("", nullRes.value("valStrNew"));
+        assertNull(nullRes.value("valStrNew"));
     }
 
     /**
@@ -266,7 +261,7 @@
 
         createTable(grid);
 
-        Table tbl = grid.get(1).tables().table(TABLE);
+        Table tbl = grid.get(0).tables().table(TABLE);
 
         ((TableImpl)tbl).schemaType(SchemaMode.LIVE_SCHEMA);
 
@@ -285,9 +280,7 @@
 
         tbl.insert(row);
 
-        Tuple newVerBuilder = Tuple.create();
-
-        SchemaDescriptor schema = ((SchemaAware)newVerBuilder).schema();
+        SchemaDescriptor schema = ((TableImpl)tbl).schemaView().schema();
 
         assertEquals(2, schema.version());
     }
@@ -301,20 +294,16 @@
 
         createTable(grid);
 
-        Table tbl = grid.get(1).tables().table(TABLE);
+        Table tbl = grid.get(0).tables().table(TABLE);
 
         ((TableImpl)tbl).schemaType(SchemaMode.LIVE_SCHEMA);
 
-        assertDoesNotThrow(() -> Tuple.create().set("newBrokenColumn", new Object()));
-        assertThrows(UnsupportedOperationException.class, () -> Tuple.create().set("newBrokenColumn", new Object()));
+        Tuple rowWithObject = Tuple.create().set("key", 1L).set("newBrokenColumn", new Object());
 
-        Tuple row = Tuple.create().set("key", 1L).set("valStrNew", null).set("valIntNew", 333);
+        assertThrows(InvalidTypeException.class, () -> tbl.insert(rowWithObject));
 
-        tbl.insert(row);
+        Tuple rowWithNull = Tuple.create().set("key", 1L).set("valStrNew", null).set("valIntNew", 333);
 
-        Tuple res = tbl.get(Tuple.create().set("key", 1L));
-
-        assertThrows(IllegalArgumentException.class, () -> res.value("valStrNew"));
-        assertEquals(Integer.valueOf(333), res.value("valIntNew"));
+        assertThrows(InvalidTypeException.class, () -> tbl.insert(rowWithNull));
     }
 }
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITSchemaChangeKVViewTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITSchemaChangeKVViewTest.java
index 7853459..ad981ff 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITSchemaChangeKVViewTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITSchemaChangeKVViewTest.java
@@ -21,12 +21,12 @@
 import java.util.List;
 import java.util.function.Supplier;
 import org.apache.ignite.app.Ignite;
+import org.apache.ignite.internal.table.SchemaMismatchException;
 import org.apache.ignite.schema.Column;
 import org.apache.ignite.schema.ColumnType;
 import org.apache.ignite.schema.SchemaBuilders;
 import org.apache.ignite.table.KeyValueBinaryView;
 import org.apache.ignite.table.Tuple;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -36,7 +36,6 @@
 /**
  * Ignition interface tests.
  */
-@Disabled("https://issues.apache.org/jira/browse/IGNITE-14581")
 class ITSchemaChangeKVViewTest extends AbstractSchemaChangeTest {
     /**
      * Check add a new column to table schema.
@@ -47,7 +46,7 @@
 
         createTable(grid);
 
-        KeyValueBinaryView kvView = grid.get(1).tables().table(TABLE).kvView();
+        KeyValueBinaryView kvView = grid.get(0).tables().table(TABLE).kvView();
 
         {
             kvView.put(
@@ -66,7 +65,7 @@
             assertThrows(IllegalArgumentException.class, () -> kvView.get(keyTuple).value("valStr"));
 
             // Check tuple of outdated schema.
-            assertThrows(IllegalArgumentException.class, () -> kvView.put(
+            assertThrows(SchemaMismatchException.class, () -> kvView.put(
                 Tuple.create().set("key", 2L),
                 Tuple.create().set("valInt", -222).set("valStr", "str"))
             );
@@ -91,12 +90,12 @@
 
         createTable(grid);
 
-        KeyValueBinaryView kvView = grid.get(1).tables().table(TABLE).kvView();
+        KeyValueBinaryView kvView = grid.get(0).tables().table(TABLE).kvView();
 
         {
             kvView.put(Tuple.create().set("key", 1L), Tuple.create().set("valInt", 111));
 
-            assertThrows(IllegalArgumentException.class, () -> kvView.put(
+            assertThrows(SchemaMismatchException.class, () -> kvView.put(
                 Tuple.create().set("key", 1L),
                 Tuple.create().set("valInt", -111).set("valStrNew", "str"))
             );
@@ -133,12 +132,12 @@
 
         createTable(grid);
 
-        KeyValueBinaryView kvView = grid.get(1).tables().table(TABLE).kvView();
+        KeyValueBinaryView kvView = grid.get(0).tables().table(TABLE).kvView();
 
         {
             kvView.put(Tuple.create().set("key", 1L), Tuple.create().set("valInt", 111));
 
-            assertThrows(IllegalArgumentException.class, () -> kvView.put(
+            assertThrows(SchemaMismatchException.class, () -> kvView.put(
                 Tuple.create().set("key", 2L),
                 Tuple.create().set("valRenamed", 222))
             );
@@ -156,7 +155,7 @@
             assertThrows(IllegalArgumentException.class, () -> kvView.get(keyTuple1).value("valInt"));
 
             // Check tuple of correct schema.
-            assertThrows(IllegalArgumentException.class, () -> kvView.put(
+            assertThrows(SchemaMismatchException.class, () -> kvView.put(
                 Tuple.create().set("key", 2L),
                 Tuple.create().set("valInt", -222))
             );
@@ -184,12 +183,12 @@
 
         final Column column = SchemaBuilders.column("val", ColumnType.string()).asNullable().withDefaultValue("default").build();
 
-        KeyValueBinaryView kvView = grid.get(1).tables().table(TABLE).kvView();
+        KeyValueBinaryView kvView = grid.get(0).tables().table(TABLE).kvView();
 
         {
             kvView.put(Tuple.create().set("key", 1L), Tuple.create().set("valInt", 111));
 
-            assertThrows(IllegalArgumentException.class, () -> kvView.put(
+            assertThrows(SchemaMismatchException.class, () -> kvView.put(
                 Tuple.create().set("key", 2L),
                 Tuple.create().set("val", "I'not exists"))
             );
@@ -214,7 +213,7 @@
             kvView.put(Tuple.create().set("key", 4L),
                 Tuple.create().set("valInt", 444));
 
-            assertThrows(IllegalArgumentException.class, () -> kvView.put(
+            assertThrows(SchemaMismatchException.class, () -> kvView.put(
                 Tuple.create().set("key", 4L),
                 Tuple.create().set("val", "I'm not exist"))
             );
@@ -263,7 +262,7 @@
 
         createTable(grid);
 
-        KeyValueBinaryView kvView = grid.get(1).tables().table(TABLE).kvView();
+        KeyValueBinaryView kvView = grid.get(0).tables().table(TABLE).kvView();
 
         final String colName = "valStr";
 
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITSchemaChangeTableViewTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITSchemaChangeTableViewTest.java
index 924c843..a42b877 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITSchemaChangeTableViewTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ITSchemaChangeTableViewTest.java
@@ -21,12 +21,12 @@
 import java.util.List;
 import java.util.function.Supplier;
 import org.apache.ignite.app.Ignite;
+import org.apache.ignite.internal.table.SchemaMismatchException;
 import org.apache.ignite.schema.Column;
 import org.apache.ignite.schema.ColumnType;
 import org.apache.ignite.schema.SchemaBuilders;
 import org.apache.ignite.table.Table;
 import org.apache.ignite.table.Tuple;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -36,7 +36,6 @@
 /**
  * Ignition interface tests.
  */
-@Disabled("https://issues.apache.org/jira/browse/IGNITE-14581")
 class ITSchemaChangeTableViewTest extends AbstractSchemaChangeTest {
     /**
      * Check add a new column to table schema.
@@ -64,7 +63,7 @@
             assertThrows(IllegalArgumentException.class, () -> tbl.get(keyTuple).value("valStr"));
 
             // Check tuple of outdated schema.
-            assertThrows(IllegalArgumentException.class,
+            assertThrows(SchemaMismatchException.class,
                 () -> tbl.insert(Tuple.create().set("key", 2L).set("valInt", -222).set("valStr", "str"))
             );
 
@@ -93,7 +92,7 @@
         {
             tbl.insert(Tuple.create().set("key", 1L).set("valInt", 111));
 
-            assertThrows(IllegalArgumentException.class,
+            assertThrows(SchemaMismatchException.class,
                 () -> tbl.insert(Tuple.create().set("key", 1L).set("valInt", -111).set("valStrNew", "str"))
             );
         }
@@ -131,7 +130,7 @@
         {
             tbl.insert(Tuple.create().set("key", 1L).set("valInt", 111));
 
-            assertThrows(IllegalArgumentException.class,
+            assertThrows(SchemaMismatchException.class,
                     () -> tbl.insert(Tuple.create().set("key", 2L).set("valRenamed", -222))
             );
         }
@@ -147,7 +146,7 @@
             assertThrows(IllegalArgumentException.class, () -> tbl.get(keyTuple1).value("valInt"));
 
             // Check tuple of outdated schema.
-            assertThrows(IllegalArgumentException.class,
+            assertThrows(SchemaMismatchException.class,
                     () -> tbl.insert(Tuple.create().set("key", 2L).set("valInt", -222))
             );
 
@@ -176,7 +175,7 @@
         {
             tbl.insert(Tuple.create().set("key", 1L).set("valInt", 111));
 
-            assertThrows(IllegalArgumentException.class,
+            assertThrows(SchemaMismatchException.class,
                 () -> tbl.insert(Tuple.create().set("key", 2L).set("val2", -222))
             );
         }
@@ -222,7 +221,7 @@
         {
             tbl.insert(Tuple.create().set("key", 1L).set("valInt", 111));
 
-            assertThrows(IllegalArgumentException.class, () -> tbl.insert(
+            assertThrows(SchemaMismatchException.class, () -> tbl.insert(
                 Tuple.create().set("key", 2L).set("val", "I'not exists"))
             );
         }
@@ -242,7 +241,7 @@
         {
             tbl.insert(Tuple.create().set("key", 4L).set("valInt", 444));
 
-            assertThrows(IllegalArgumentException.class, () -> tbl.insert(
+            assertThrows(SchemaMismatchException.class, () -> tbl.insert(
                 Tuple.create().set("key", 4L).set("val", "I'm not exist"))
             );
         }
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java
index b99d0db..7d1e35d 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/SchemaUtils.java
@@ -65,7 +65,7 @@
             final ColumnView newColView = newTbl.columns().get(s);
             final ColumnView oldColView = oldTbl.columns().get(s);
 
-            if (oldColView == null) {
+            if (oldColView == null && newColView != null) {
                 final Column newCol = newDesc.column(newColView.name());
 
                 assert !newDesc.isKeyColumn(newCol.schemaIndex());
@@ -75,7 +75,7 @@
 
                 mapper.add(newCol); // New column added.
             }
-            else {
+            else if (newColView != null) {
                 final Column newCol = newDesc.column(newColView.name());
                 final Column oldCol = oldDesc.column(oldColView.name());
 
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverter.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverter.java
index 9b0c5ca..134e0a2 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverter.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaConfigurationConverter.java
@@ -463,9 +463,12 @@
 
         for (String key : colsView.namedListKeys()) {
             ColumnView colView = colsView.get(key);
-            Column col = convert(colView);
 
-            columns.put(Integer.valueOf(key), col);
+            if (colView != null) {
+                Column col = convert(colView);
+
+                columns.put(Integer.valueOf(key), col);
+            }
         }
 
         NamedListView<? extends TableIndexView> idxsView = tblView.indices();
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
index a9d1720..313cb45 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
@@ -534,7 +534,7 @@
                                             );
 
                                             descriptor.columnMapping(SchemaUtils.columnMapper(
-                                                tablesById.get(tblId).schemaRegistry().schema(currTableView.schemas().size() - 1),
+                                                tablesById.get(tblId).schemaRegistry().schema(currTableView.schemas().size()),
                                                 currTableView,
                                                 descriptor,
                                                 tblCh
