diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Table.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Table.java
index 7dab2cf52c52d58271e80e22dc3ef99e78ab4fda..0f92212ecf19bad212d4393fbb838c77c1d64479 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Table.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Table.java
@@ -23,6 +23,7 @@
 package it.inaf.ia2.tsm;
 
 import it.inaf.ia2.tsm.datalayer.DBBroker;
+import it.inaf.ia2.tsm.model.ColumnModel;
 import it.inaf.ia2.tsm.model.TableModel;
 import java.sql.SQLException;
 import java.util.List;
@@ -148,7 +149,10 @@ public class Table extends ChildEntity<Schema> implements EntitiesContainer<Colu
 
     private boolean isMandatory(String columnName) {
         if (tableTableModel != null) {
-            return tableTableModel.get(columnName).isMandatory();
+            ColumnModel columnModel = tableTableModel.get(columnName);
+            if (columnModel != null) {
+                return columnModel.isMandatory();
+            }
         }
         return false;
     }
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchema.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchema.java
index c8b2a85fb18210dc2eddeef5d4283a83408fe1bb..a6fb6d8c9d4d774637b1e615ed1d84705e66353c 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchema.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchema.java
@@ -627,7 +627,11 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
      * Returns the {@link SchemaModel} for the TAP_SCHEMA schema.
      */
     public final SchemaModel getTapSchemaModel() {
-        return SchemaModels.getTapSchemaModel(getVersion());
+        SchemaModel tapSchemaModel = SchemaModels.getTapSchemaModel(getVersion());
+        if (tapSchemaModel == null) {
+            throw new IllegalStateException("TAP_SCHEMA model is null for version " + getVersion());
+        }
+        return tapSchemaModel;
     }
 
     /**
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaLoader.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaLoader.java
index bf09a081519b8429d65388e736ba4d854d482d9b..a016ed7ca723d7666a8d91ebb977203d57a39a90 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaLoader.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaLoader.java
@@ -159,18 +159,42 @@ public class TapSchemaLoader {
         if (!ep.isUpdatable()) {
             return true;
         }
+
+        // Here we check fixed values for columns having a XML model.
+        // We need to be aware that the user could alter these structures
+        // adding custom tables and columns, so we have to check for null
+        // parts of the models.
+        //
         Schema parentSchema = column.getParent().getParent();
+
+        SchemaModel schemaModel;
         if (parentSchema.getName().equals(tapSchema.getName())) {
-            return equalsOneOf(key, Column.STD_KEY, Column.PRINCIPAL_KEY);
-        } else {
-            SchemaModel ivoaSchemaModel = tapSchema.getIvoaSchemaModel();
-            if (ivoaSchemaModel != null
-                    && parentSchema.getName().equals(ivoaSchemaModel.getName())) {
-                return equalsOneOf(key, Column.STD_KEY, Column.PRINCIPAL_KEY,
-                        Column.UCD_KEY, Column.UNIT_KEY, Column.UTYPE_KEY, Column.DATATYPE_KEY);
+
+            if (parentSchema.getName().equals(tapSchema.getName())) {
+                schemaModel = tapSchema.getTapSchemaModel();
+            } else {
+                schemaModel = tapSchema.getIvoaSchemaModel();
+            }
+
+            if (schemaModel != null) {
+                TableModel tableModel = schemaModel.getTable(column.getParent().getName());
+                if (tableModel != null) {
+                    ColumnModel columnModel = tableModel.get(column.getName());
+                    if (columnModel != null) {
+                        if (parentSchema.getName().equals(tapSchema.getName())) {
+                            // is a TAP_SCHEMA column
+                            return equalsOneOf(key, Column.STD_KEY, Column.PRINCIPAL_KEY);
+                        } else {
+                            // is an obscore column
+                            return equalsOneOf(key, Column.STD_KEY, Column.PRINCIPAL_KEY,
+                                    Column.UCD_KEY, Column.UNIT_KEY, Column.UTYPE_KEY, Column.DATATYPE_KEY);
+                        }
+                    }
+                }
             }
-            return false;
         }
+
+        return false;
     }
 
     private Object getCompatibleIntOrBoolValue(String key, boolean value) {
diff --git a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1-IA2.xml b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1-IA2.xml
index 1cfde662a3a76bf2297408c8d746d358b7e9c37c..0745682232c4af884e777a0ba2fc2585864ca7c0 100644
--- a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1-IA2.xml
+++ b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1-IA2.xml
@@ -23,11 +23,6 @@ Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 -->
 <schema name="TAP_SCHEMA" version="1.1-IA2" extends="1.1" datatype="VOTable">
     <table name="schemas">
-        <column name="schemaID">
-            <type>BIGINT</type>
-            <updatable>true</updatable>
-            <standard>false</standard>
-        </column>
         <column name="schemaID">
             <type>BIGINT</type>
             <updatable>true</updatable>