diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Column.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Column.java
index 1f9b5ebe77757177e1bcd398be884ca72cd48831..a85d678c394daf8271b701a120ee26ee262e686d 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Column.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Column.java
@@ -33,6 +33,7 @@ public class Column extends ChildEntity<Table> {
 
     public final static String TABLE_NAME_KEY = "table_name";
     public final static String COLUMN_NAME_KEY = "column_name";
+    public final static String DESCRIPTION_KEY = "description";
     public final static String DATATYPE_KEY = "datatype";
     public final static String SIZE_KEY = "size";
     public final static String ARRAYSIZE_KEY = "arraysize";
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Schema.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Schema.java
index 855e15744897fc037edf75962d780a81a27fedc1..e168d97235a6186d3120fe795ccb22ec95deab0b 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Schema.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/Schema.java
@@ -60,7 +60,7 @@ public class Schema extends ChildEntity<TapSchema> implements EntitiesContainer<
         DBBroker broker = tapSchema.getDBBroker(name);
 
         tables = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-        tablesTypes = broker.getAllTableTypes(name);
+        tablesTypes = broker.getAllTableTypes(getRealSchemaName());
 
         for (String tableName : broker.getAllTablesNames(getRealSchemaName())) {
             tables.put(tableName, null);
@@ -70,10 +70,13 @@ public class Schema extends ChildEntity<TapSchema> implements EntitiesContainer<
         setStatus(Status.LOADED);
     }
 
-    public String getRealSchemaName() {
+    public final String getRealSchemaName() {
         if (tapSchema.getDBName() != null && this.getName().equals(tapSchema.getName())) {
             return tapSchema.getDBName();
         }
+        if (tapSchema.getIvoaSchemaDBName() != null && this.getName().equals(tapSchema.getIvoaSchemaName())) {
+            return tapSchema.getIvoaSchemaDBName();
+        }
         return getName();
     }
 
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 207bd74601fd0cb5ab3f1ace1008054e5adcc54a..1ecb213e4c890cae0ed41ad04340e3d5016521a1 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
@@ -65,7 +65,7 @@ public class Table extends ChildEntity<Schema> implements EntitiesContainer<Colu
         if (tapSchema.getName().equals(parentSchema.getName())) {
             return tapSchema.getTapSchemaModel().getTable(simpleName);
         }
-        if (tapSchema.isHasObscore() && parentSchema.getName().equals("ivoa")
+        if (tapSchema.isHasObscore() && parentSchema.getName().equals(TapSchema.STANDARD_IVOA_SCHEMA_NAME)
                 && simpleName.equals("obscore")) {
             return tapSchema.getIvoaSchemaModel().getTable(simpleName);
         }
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 9783cd8870cb6d5a90864a77cae9cf1996218ff2..61de723ccbba3160822ccf6ddcd9b8f41fc087b3 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
@@ -46,8 +46,9 @@ import org.slf4j.LoggerFactory;
  * @author Sonia Zorba {@literal <zorba at oats.inaf.it>}
  */
 public class TapSchema implements EntitiesContainer<Schema>, Serializable {
-
-    public static final String STANDARD_NAME = "TAP_SCHEMA";
+    
+    public static final String STANDARD_TAP_SCHEMA_NAME = "TAP_SCHEMA";
+    public static final String STANDARD_IVOA_SCHEMA_NAME = "ivoa";
 
     // Mandatory tables constants
     public static final String TABLES_TABLE = "tables";
@@ -55,84 +56,95 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
     public static final String COLUMNS_TABLE = "columns";
     public static final String KEYS_TABLE = "keys";
     public static final String KEY_COLUMNS_TABLE = "key_columns";
-
+    
     public static final String DESCRIPTION_KEY = "description";
-
+    
     private static final long serialVersionUID = 1678083091602571256L;
-
+    
     private static final Logger LOG = LoggerFactory.getLogger(TapSchema.class);
-
+    
     private final Map<String, Schema> schemas;
     private final Set<Key> allKeys;
-
+    
     private boolean loading;
     private DBWrapper dbWrapper;
     private String dbName;
     private String name;
+    private String ivoaSchemaDBName;
+    private String ivoaSchemaName;
     private boolean exists;
     private TapSchemaSettings settings;
     private DataTypeMode dataTypeMode;
-
+    
     private transient DBBroker sourceDBBroker;
     private transient DBBroker tapSchemaDBBroker;
-
+    
     private ConsistencyChecks consistencyChecks;
-
+    
     public final DBBroker getSourceDBBroker() {
         if (sourceDBBroker == null) {
             sourceDBBroker = DBBrokerFactory.getDBBroker(dbWrapper.getSourceDataSourceWrapper(), dataTypeMode);
         }
         return sourceDBBroker;
     }
-
+    
     public final DBBroker getTapSchemaDBBroker() {
         if (tapSchemaDBBroker == null) {
             tapSchemaDBBroker = DBBrokerFactory.getDBBroker(dbWrapper.getTapSchemaDataSourceWrapper(), dataTypeMode);
         }
         return tapSchemaDBBroker;
     }
-
+    
     private TapSchema() {
         // for serialization
         schemas = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
         allKeys = new HashSet<>();
-        //consistencyChecks = new ConsistencyChecks();
     }
-
+    
     public TapSchema(DBWrapper dbWrapper, TapSchemaSettings settings, boolean exists) throws SQLException {
         this();
-
+        
         this.dbWrapper = dbWrapper;
         this.exists = exists;
         this.settings = settings;
         // Don't change the instructions order!
         loadDBName();
         loadName();
-
+        
         dataTypeMode = getTapSchemaModel().getDataTypeMode();
-
+        
         load();
     }
-
+    
     private void loadDBName() {
         // Detect if the TAP_SCHEMA version supports dbmodel
         SchemaModel tapSchemaModel = SchemaModels.getTapSchemaModel(settings.getTapSchemaVersion());
         boolean hasDBName = tapSchemaModel.getTable(SCHEMAS_TABLE).get("dbname") != null;
-        if (hasDBName && !STANDARD_NAME.equals(settings.getTapSchemaName())) {
-            dbName = settings.getTapSchemaName();
+        if (hasDBName) {
+            if (!STANDARD_TAP_SCHEMA_NAME.equals(settings.getTapSchemaName())) {
+                dbName = settings.getTapSchemaName();
+            }
+            if (!STANDARD_IVOA_SCHEMA_NAME.equals(settings.getIvoaSchemaName())) {
+                ivoaSchemaDBName = settings.getIvoaSchemaName();
+            }
         }
     }
-
+    
     private void loadName() {
         if (dbName != null) {
-            name = STANDARD_NAME;
+            name = STANDARD_TAP_SCHEMA_NAME;
         } else {
             name = settings.getTapSchemaName();
         }
+        if (ivoaSchemaDBName != null) {
+            ivoaSchemaName = STANDARD_IVOA_SCHEMA_NAME;
+        } else {
+            ivoaSchemaName = settings.getIvoaSchemaName();
+        }
     }
-
+    
     public final void load() throws SQLException {
-
+        
         loading = true;
         // Initializing schemas map
         schemas.clear();
@@ -140,16 +152,19 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
             schemas.put(schemaName, null);
         }
         schemas.put(getName(), null); // the TAP_SCHEMA contains itself
-
+        if (settings.isHasObscore() && ivoaSchemaDBName != null) {
+            schemas.put(getIvoaSchemaName(), null);
+        }
+        
         if (exists) {
             consistencyChecks = TapSchemaLoader.loadExistingTapSchema((this));
         }
-
+        
         loading = false;
-
+        
         checkKeys();
     }
-
+    
     public DBBroker getDBBroker(String schemaName) {
         if (schemaName.equals(getName())) {
             return getTapSchemaDBBroker();
@@ -171,16 +186,16 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
     public String getVersion() {
         return settings.getTapSchemaVersion();
     }
-
+    
     public DataTypeMode getDataTypeMode() {
         return dataTypeMode;
     }
-
+    
     private void loadSchemaKeysMetadata(String schemaName) throws SQLException {
         allKeys.addAll(getDBBroker(schemaName)
                 .getKeys(this, schemaName, getRealSchemaName(schemaName)));
     }
-
+    
     public Set<Key> getAllKeys() {
         return allKeys;
     }
@@ -191,15 +206,15 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
     @Override
     public final Schema addChild(String schemaName) throws SQLException {
         LOG.debug("Adding schema {}", schemaName);
-
+        
         Schema schema;
-
+        
         if (!schemas.containsKey(schemaName)) {
             schema = null;
         } else {
-
+            
             schema = schemas.get(schemaName);
-
+            
             if (schema == null) {
                 schema = new Schema(this, schemaName);
                 schema.setStatus(Status.ADDED_NOT_PERSISTED);
@@ -217,10 +232,10 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
                         throw new IllegalArgumentException("Cannot add the schema " + schemaName + ". Invalid status. Schema status is " + schema.getStatus());
                 }
             }
-
+            
             checkKeys();
         }
-
+        
         return schema;
     }
 
@@ -230,22 +245,22 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
     @Override
     public void removeChild(String schemaName) {
         LOG.debug("Removing schema {}", schemaName);
-
+        
         if (!schemas.containsKey(schemaName)) {
             throw new IllegalArgumentException("The database doesn't contains a schema named " + schemaName);
         }
-
+        
         Schema schema = schemas.get(schemaName);
         if (schema == null || schema.getStatus() == Status.LOADED) {
             throw new IllegalArgumentException("Cannot remove the schema " + schemaName + ". It has never been added.");
         }
-
+        
         if (schema.getStatus() == Status.ADDED_NOT_PERSISTED) {
             schema.setStatus(Status.REMOVED_NOT_PERSISTED);
         } else if (schema.getStatus() == Status.ADDED_PERSISTED) {
             schema.setStatus(Status.TO_REMOVE);
         }
-
+        
         checkKeys();
     }
 
@@ -272,7 +287,7 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
     public List<String> getAddableChildrenNames() {
         return TSMUtil.getAddableChildrenNames(schemas);
     }
-
+    
     @Override
     public boolean isAddable(String childName) {
         return schemas.containsKey(childName);
@@ -305,14 +320,14 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
         }
         schemas.put(schemaName, null);
     }
-
+    
     public SchemaModel getIvoaSchemaModel() {
         if (settings.isHasObscore()) {
             return SchemaModels.getIvoaSchemaModel(settings.getObscoreVersion());
         }
         return null;
     }
-
+    
     public void addEntireSchema(String schemaName) throws SQLException {
         Schema schema = addChild(schemaName);
         for (String tableName : schema.getAddableChildrenNames()) {
@@ -327,9 +342,9 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
      * Save or update the TAP_SCHEMA changes into the database.
      */
     public void save() throws SQLException {
-
+        
         DBBroker broker = getTapSchemaDBBroker();
-
+        
         if (!exists) {
             SchemaModel tapSchemaModel = getTapSchemaModel();
             broker.createTapSchemaStructure(getRealName(), tapSchemaModel);
@@ -337,26 +352,26 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
             // Adding TAP_SCHEMA into TAP_SCHEMA
             addEntireSchema(getName());
             fillColumnProperties(tapSchemaModel, getName());
-
+            
             if (settings.isHasObscore()) {
                 createAndAddIvoaSchema();
             }
         }
-
+        
         fillKeyIds();
-
+        
         broker.save(this);
         exists = true;
 
         // Clean inconsistency
         consistencyChecks = null;
     }
-
+    
     public void createAndAddIvoaSchema() throws SQLException {
         SchemaModel ivoaSchemaModel = getIvoaSchemaModel();
 
         // ivoa schema has to be created into source database
-        getSourceDBBroker().createIvoaSchemaStructure(ivoaSchemaModel);
+        getSourceDBBroker().createIvoaSchemaStructure(ivoaSchemaModel, getRealSchemaName(ivoaSchemaModel.getName()));
         // Initializing ivoa schema slot in schemata maps
         schemas.put(ivoaSchemaModel.getName(), null);
 
@@ -383,20 +398,20 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
         }
         return maxKeyId;
     }
-
+    
     private void fillKeyIds() {
-
+        
         List<Key> newKeys = new ArrayList<>();
         for (Key key : allKeys) {
-            if (key.isVisible()) {
+            if (key.isVisible() && key.getId() == null) {
                 newKeys.add(key);
             }
         }
-
+        
         int maxKeyId = getMaxKeyId();
         for (Key newKey : newKeys) {
             maxKeyId++;
-            newKey.setId(maxKeyId + "");
+            newKey.setId(String.valueOf(maxKeyId));
         }
     }
 
@@ -407,12 +422,12 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
      */
     public final void checkKeys() {
         if (!loading) {
-
+            
             for (Key key : allKeys) {
 
                 // Check if key should be exposed in TAP_SCHEMA
                 boolean keyVisible = true;
-
+                
                 for (KeyColumn keyColumn : key.getKeyColumns()) {
                     String schemaName = keyColumn.getParent().getFromSchemaName();
                     String tableName = keyColumn.getParent().getFromTableSimpleName();
@@ -421,7 +436,7 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
                         keyVisible = false;
                         break;
                     }
-
+                    
                     schemaName = keyColumn.getParent().getTargetSchemaName();
                     tableName = keyColumn.getParent().getTargetTableSimpleName();
                     columnName = keyColumn.getTargetColumn();
@@ -442,11 +457,11 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
      */
     @Override
     public String toString() {
-
+        
         StringBuilder sb = new StringBuilder("\n");
-
+        
         sb.append(String.format(">> TAP_SCHEMA %s <<\n", getName()));
-
+        
         for (Schema schema : getChildren()) {
             sb.append("--");
             sb.append(schema.getName());
@@ -459,9 +474,9 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
                 sb.append(table.getName());
                 sb.append(String.format(" [%s]", table.getStatus()));
                 sb.append("\n");
-
+                
                 String padder = i < tables.size() - 1 ? "   |   " : "       ";
-
+                
                 for (Column column : table.getChildren()) {
                     sb.append(padder);
                     sb.append("|--");
@@ -469,20 +484,20 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
                     sb.append(String.format(" [%s]", column.getStatus()));
                     sb.append("\n");
                 }
-
+                
                 sb.append("\n");
             }
         }
-
+        
         sb.append("** Keys **\n");
         for (Key key : getVisibileKeys()) {
             sb.append(key);
             sb.append("\n");
         }
-
+        
         return sb.toString();
     }
-
+    
     public boolean isSchemaVisible(String schemaName) {
         Schema schema = schemas.get(schemaName);
         if (schema == null) {
@@ -491,40 +506,40 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
         return schema.getStatus() == Status.ADDED_PERSISTED
                 || schema.getStatus() == Status.ADDED_NOT_PERSISTED;
     }
-
+    
     public boolean isTableVisible(String schemaName, String tableName) {
         if (!isSchemaVisible(schemaName)) {
             return false;
         }
-
+        
         Table table = schemas.get(schemaName).getChild(tableName);
         if (table == null) {
             return false;
         }
-
+        
         if (table.getStatus() == Status.ADDED_PERSISTED
                 || table.getStatus() == Status.ADDED_NOT_PERSISTED) {
             return isSchemaVisible(schemaName);
         }
-
+        
         return false;
     }
-
+    
     public boolean isColumnVisible(String schemaName, String tableName, String columnName) {
         if (!isTableVisible(schemaName, tableName)) {
             return false;
         }
-
+        
         Column column = schemas.get(schemaName).getChild(tableName).getChild(columnName);
         if (column == null) {
             return false;
         }
-
+        
         if (column.getStatus() == Status.ADDED_PERSISTED
                 || column.getStatus() == Status.ADDED_NOT_PERSISTED) {
             return isTableVisible(schemaName, tableName);
         }
-
+        
         return false;
     }
 
@@ -534,30 +549,30 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
     public boolean exists() {
         return exists;
     }
-
+    
     public ConsistencyChecks getConsistencyChecks() {
         return consistencyChecks;
     }
-
+    
     public final SchemaModel getTapSchemaModel() {
         return SchemaModels.getTapSchemaModel(getVersion());
     }
-
+    
     public final TableModel getTableModel(String tableName) {
         return getTapSchemaModel().getTable(tableName);
     }
-
+    
     public Map<String, Object> getSchemaMetadata(String schemaName) {
         Map<String, Object> metadata = new HashMap<>();
         metadata.put(Schema.SCHEMA_NAME_KEY, schemaName);
         String dbNameMetadata = null;
-        if (dbName != null && schemaName.equals(STANDARD_NAME)) {
+        if (dbName != null && schemaName.equals(STANDARD_TAP_SCHEMA_NAME)) {
             dbNameMetadata = dbName;
         }
         metadata.put(Schema.DBNAME, dbNameMetadata);
         return metadata;
     }
-
+    
     public List<Key> getVisibileKeys() {
         List<Key> visibleKeys = new ArrayList<>();
         for (Key key : allKeys) {
@@ -567,14 +582,14 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
         }
         return visibleKeys;
     }
-
+    
     private Integer getIntAsBool(Boolean value) {
         if (value == null) {
             return null;
         }
         return value ? 1 : 0;
     }
-
+    
     public boolean isHasObscore() {
         return settings.isHasObscore();
     }
@@ -587,7 +602,7 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
 
         // check only on std, but valid also for principal (it depends on TS version)
         boolean useIntegerAsBool = getTapSchemaModel().getTable(COLUMNS_TABLE).get(Column.STD_KEY).getJavaType() == Integer.class;
-
+        
         Schema schema = getChild(schemaName);
         schema.setValue(DESCRIPTION_KEY, schemaModel.getDescription());
         for (TableModel tableModel : schemaModel.getTables()) {
@@ -603,7 +618,7 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
                 column.setValue(Column.UCD_KEY, columnModel.getUcd());
                 column.setValue(Column.UNIT_KEY, columnModel.getUnit());
                 column.setValue(Column.UTYPE_KEY, columnModel.getUtype());
-
+                
                 Object compatibleStd = useIntegerAsBool ? getIntAsBool(columnModel.isStandard()) : columnModel.isStandard();
                 Object compatiblePrincipal = useIntegerAsBool ? getIntAsBool(columnModel.isPrincipal()) : columnModel.isPrincipal();
                 column.setValue(Column.STD_KEY, compatibleStd);
@@ -611,7 +626,7 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
             }
         }
     }
-
+    
     public void fillColumnsProperties(SchemaModel schemaModel) {
         fillColumnProperties(schemaModel, schemaModel.getName());
     }
@@ -625,15 +640,26 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
     public String getDBName() {
         return dbName;
     }
-
+    
+    public String getIvoaSchemaDBName() {
+        return ivoaSchemaDBName;
+    }
+    
+    public String getIvoaSchemaName() {
+        return ivoaSchemaName;
+    }
+    
     public String getRealName() {
         return getRealSchemaName(getName());
     }
-
+    
     public String getRealSchemaName(String schemaName) {
-        if (dbName != null && STANDARD_NAME.equals(schemaName)) {
+        if (dbName != null && STANDARD_TAP_SCHEMA_NAME.equals(schemaName)) {
             return dbName;
         }
+        if (ivoaSchemaDBName != null && STANDARD_IVOA_SCHEMA_NAME.equals(schemaName)) {
+            return ivoaSchemaDBName;
+        }
         return schemaName;
     }
 }
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 f7ccfd32e9b7a66b3a1b8ff9fb2625f5cc35c625..bf09a081519b8429d65388e736ba4d854d482d9b 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
@@ -78,9 +78,9 @@ public class TapSchemaLoader {
 
     private void checkObscore() {
         if (tapSchema.isHasObscore()) {
-            String ivoaSchemaName = tapSchema.getIvoaSchemaModel().getName();
+            String ivoaSchemaName = tapSchema.getIvoaSchemaName();
             if (tapSchema.getChild(ivoaSchemaName) == null) {
-                if (tapSchema.isAddable(ivoaSchemaName)) {
+                if (tapSchema.isAddable(tapSchema.getRealSchemaName(ivoaSchemaName))) {
                     consistencyChecks.setObscoreToAdd(true);
                 } else {
                     consistencyChecks.setMissingObscore(true);
@@ -94,7 +94,7 @@ public class TapSchemaLoader {
     private void checkModel(SchemaModel schemaModel) {
 
         String schemaName = schemaModel.getName();
-        if ("tap_schema".equals(schemaName)) {
+        if (TapSchema.STANDARD_TAP_SCHEMA_NAME.equals(schemaName)) {
             schemaName = tapSchema.getName();
         }
 
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaSettings.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaSettings.java
index fd85ec534697c4df2105c276eb4d868b454d2da5..386a991da86c4b3ccc52c4fc2bc720772a5a840d 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaSettings.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaSettings.java
@@ -22,7 +22,6 @@
  */
 package it.inaf.ia2.tsm;
 
-import it.inaf.ia2.tsm.datalayer.DataTypeMode;
 import java.io.Serializable;
 
 /**
@@ -37,6 +36,12 @@ public class TapSchemaSettings implements Serializable {
     private String tapSchemaName;
     private boolean hasObscore;
     private String obscoreVersion;
+    private String ivoaSchemaName;
+
+    public TapSchemaSettings() {
+        tapSchemaName = TapSchema.STANDARD_TAP_SCHEMA_NAME;
+        ivoaSchemaName = TapSchema.STANDARD_IVOA_SCHEMA_NAME;
+    }
 
     public String getTapSchemaVersion() {
         return tapSchemaVersion;
@@ -69,4 +74,12 @@ public class TapSchemaSettings implements Serializable {
     public void setObscoreVersion(String obscoreVersion) {
         this.obscoreVersion = obscoreVersion;
     }
+
+    public String getIvoaSchemaName() {
+        return ivoaSchemaName;
+    }
+
+    public void setIvoaSchemaName(String ivoaSchemaName) {
+        this.ivoaSchemaName = ivoaSchemaName;
+    }
 }
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/UpdateOperations.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/UpdateOperations.java
index 235a0792099cc9dc7ff4d3db6005932f144cb591..68fc839857f50f088ea59138da5083c2198f813f 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/UpdateOperations.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/UpdateOperations.java
@@ -115,8 +115,13 @@ public class UpdateOperations {
 
                         // children tables can have the following status:
                         // ADDED_NOT_PERSISTED, REMOVED_NOT_PERSISTED, LOADED
-                        if (table.getStatus() == Status.ADDED_NOT_PERSISTED) {
-                            manageAddedNotPersistedTable(table);
+                        switch (table.getStatus()) {
+                            case ADDED_NOT_PERSISTED:
+                                manageAddedNotPersistedTable(table);
+                                break;
+                            case REMOVED_NOT_PERSISTED:
+                                tablesToClean.add(table);
+                                break;
                         }
                     }
 
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/ADQL.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/ADQL.java
index 49001db4e2534ad1b968933f4755f4ba85b699ca..38392e36af4d16c20255924624e2e202e8c497cb 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/ADQL.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/ADQL.java
@@ -28,7 +28,7 @@ package it.inaf.ia2.tsm.datalayer;
  * @author Sonia Zorba {@literal <zorba at oats.inaf.it>}
  */
 public enum ADQL {
-
+    
     VARCHAR,
     CHAR,
     BOOLEAN,
@@ -52,8 +52,8 @@ public enum ADQL {
         // removing size from datatype.
         return dataType.toUpperCase().replaceAll("\\(.+\\)", "");
     }
-
+    
     public static boolean isVariable(ADQL adql) {
-        return adql.equals(VARCHAR) || adql.equals(VARBINARY);
+        return adql.equals(VARCHAR) || adql.equals(VARBINARY) || adql.equals(CLOB) || adql.equals(BLOB);
     }
 }
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBroker.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBroker.java
index 222854e53c565808818a40fda63e19dca220d66e..1c723f361300053ced074b8abad3d717276a251a 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBroker.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBroker.java
@@ -70,7 +70,7 @@ public interface DBBroker {
 
     void createTapSchemaStructure(String tapSchemaName, SchemaModel tapSchemaModel) throws SQLException;
 
-    void createIvoaSchemaStructure(SchemaModel ivoaSchemaModel) throws SQLException;
+    void createIvoaSchemaStructure(SchemaModel ivoaSchemaModel, String realIvoaSchemaName) throws SQLException;
 
     void save(TapSchema tapSchema) throws SQLException;
 
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerTemplate.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerTemplate.java
index 65b1e8cef128e4925dc4fe5f579e3cda88e14eba..311e0d9f7edd45e7590db840abede4e457996632 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerTemplate.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/DBBrokerTemplate.java
@@ -182,11 +182,11 @@ public abstract class DBBrokerTemplate implements DBBroker {
     }
 
     @Override
-    public void createIvoaSchemaStructure(SchemaModel ivoaSchemaModel) throws SQLException {
+    public void createIvoaSchemaStructure(SchemaModel ivoaSchemaModel, String realIvoaSchemaName) throws SQLException {
         try (Connection conn = dataSource.getConnection()) {
-            execute(getCreateDatabaseQuery(ivoaSchemaModel.getName()), conn);
+            execute(getCreateDatabaseQuery(realIvoaSchemaName), conn);
             for (TableModel tableModel : ivoaSchemaModel.getTables()) {
-                createTable(ivoaSchemaModel.getName(), tableModel, conn);
+                createTable(realIvoaSchemaName, tableModel, conn);
             }
         }
     }
@@ -1057,4 +1057,22 @@ public abstract class DBBrokerTemplate implements DBBroker {
         }
         return keySchemaName;
     }
+
+    protected String getArraysize(ADQL adqlType, Integer size) {
+        String arraySize = null;
+
+        if (size != null) {
+            arraySize = String.valueOf(size);
+        }
+        if (adqlType != null && ADQL.isVariable(adqlType)) {
+            // variable length columns must have a "*" symbol on arraysize
+            if (arraySize == null) {
+                arraySize = "*";
+            } else {
+                arraySize += "*";
+            }
+        }
+
+        return arraySize;
+    }
 }
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/mysql/MySQLDBBroker.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/mysql/MySQLDBBroker.java
index ab1d5af90cdc3eaeaa36558cec4cb0aeeac7516a..2cc1204f91d62281779f38b466ae847fe3c7fed1 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/mysql/MySQLDBBroker.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/mysql/MySQLDBBroker.java
@@ -132,15 +132,7 @@ public class MySQLDBBroker extends DBBrokerTemplate {
                 cm.put(Column.DATATYPE_KEY, datatype);
                 cm.put(Column.SIZE_KEY, size);
 
-                String arraySize = "*";
-                if (size != null) {
-                    arraySize = String.valueOf(size);
-                    // variable length columns must have a "*" symbol on arraysize
-                    if (adqlType != null && ADQL.isVariable(adqlType)) {
-                        arraySize += "*";
-                    }
-                }
-                cm.put(Column.ARRAYSIZE_KEY, arraySize);
+                cm.put(Column.ARRAYSIZE_KEY, getArraysize(adqlType, size));
 
                 allColumnsMetadata.put(columnName, cm);
             }
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/pgsql/PostgresDBBroker.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/pgsql/PostgresDBBroker.java
index 59008dea9985779a29d1c4f0e8ba35cceb00557a..e4237e12557dacea82cb39aa22cf334ae9588dcb 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/pgsql/PostgresDBBroker.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/datalayer/pgsql/PostgresDBBroker.java
@@ -214,11 +214,16 @@ public class PostgresDBBroker extends DBBrokerTemplate {
 
         StringBuilder querySb = new StringBuilder();
 
+        String tableNameOid = "('\"' || t.schemaname || '\".\"' || t.tablename || '\"')::regclass::oid";
+
         querySb.append("SELECT c.column_name, c.data_type, pg_catalog.format_type(a.atttypid, a.atttypmod), r.contype AS column_type, c.character_maximum_length, c.numeric_precision, a.attndims AS arraydim\n");
         querySb.append("FROM information_schema.columns c\n");
         querySb.append("JOIN pg_catalog.pg_tables t ON c.table_schema = t.schemaname AND c.table_name = t.tablename\n");
-        querySb.append("LEFT JOIN pg_catalog.pg_constraint r ON c.ordinal_position = ANY(r.conkey) AND r.conrelid = (t.schemaname || '.' || t.tablename)::regclass::oid\n");
-        querySb.append("LEFT JOIN pg_catalog.pg_attribute a ON a.attrelid = (t.schemaname || '.' || t.tablename)::regclass::oid and a.attname = c.column_name\n");
+        querySb.append("LEFT JOIN pg_catalog.pg_constraint r ON c.ordinal_position = ANY(r.conkey) AND r.conrelid = ");
+        querySb.append(tableNameOid);
+        querySb.append("\nLEFT JOIN pg_catalog.pg_attribute a ON a.attrelid = ");
+        querySb.append(tableNameOid);
+        querySb.append(" and a.attname = c.column_name\n");
         querySb.append("WHERE t.schemaname = '");
         querySb.append(schemaName);
         querySb.append("' AND t.tablename = '");
@@ -283,15 +288,11 @@ public class PostgresDBBroker extends DBBrokerTemplate {
                 cm.put(Column.DATATYPE_KEY, datatype);
                 cm.put(Column.SIZE_KEY, size);
 
-                String arraySize = "*";
+                String arraySize;
                 if (isArray) {
                     arraySize = formatArraySize(arraydimension);
-                } else if (size != null) {
-                    arraySize = String.valueOf(size);
-                    // variable length columns must have a "*" symbol on arraysize
-                    if (adqlType != null && ADQL.isVariable(adqlType)) {
-                        arraySize += "*";
-                    }
+                } else {
+                    arraySize = getArraysize(adqlType, size);
                 }
 
                 cm.put(Column.ARRAYSIZE_KEY, arraySize);
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/SchemaModels.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/SchemaModels.java
index 29bdcb40781ab4bab9dbfbc686cc6045f0ef9f5c..6a6fcf315f056e0d936fec264448810400f586df 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/SchemaModels.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/SchemaModels.java
@@ -37,8 +37,6 @@ import java.util.Properties;
 public class SchemaModels {
 
     private static final String SCHEMA_DEFINITION_FOLDER = "schema_definition";
-    private static final String TAP_SCHEMA_NAME = "tap_schema";
-    private static final String IVOA_SCHEMA_NAME = "ivoa";
 
     // Map keys are version numbers
     private static final Map<String, SchemaModel> TAP_SCHEMA_MODELS;
diff --git a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1-IA2.xml b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1-IA2.xml
index 1d53e01bf88ec6d096ecbecea8402238dc0709ca..0ba5fe90bb8b5398417907774f264feb9e4e0841 100644
--- a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1-IA2.xml
+++ b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1-IA2.xml
@@ -21,7 +21,7 @@ You should have received a copy of the GNU General Public License along with
 this program; if not, write to the Free Software Foundation, Inc., 51
 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 -->
-<schema name="tap_schema" version="1.0-IA2" extends="1.0">
+<schema name="TAP_SCHEMA" version="1.0-IA2" extends="1.0">
     <table name="schemas">
         <column name="schemaID">
             <type>BIGINT</type>
diff --git a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1.xml b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1.xml
index 85d28d9bc2f1cdd4e83b9f04fcc7199ba843a4c1..288ae36cc8830aa5f451ee66902aad50a23d86d5 100644
--- a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1.xml
+++ b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1.xml
@@ -21,7 +21,7 @@ You should have received a copy of the GNU General Public License along with
 this program; if not, write to the Free Software Foundation, Inc., 51
 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 -->
-<schema name="tap_schema" version="1.0" description="a special schema to describe a TAP tableset" datatype="ADQL">
+<schema name="TAP_SCHEMA" version="1.0" description="a special schema to describe a TAP tableset" datatype="ADQL">
     <table name="schemas" description="description of schemas in this tableset">
         <column name="schema_name">
             <type>VARCHAR</type>
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 346fff7febf352f784f85d1b6fef317a8fd18c72..1cfde662a3a76bf2297408c8d746d358b7e9c37c 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
@@ -21,7 +21,7 @@ You should have received a copy of the GNU General Public License along with
 this program; if not, write to the Free Software Foundation, Inc., 51
 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 -->
-<schema name="tap_schema" version="1.1-IA2" extends="1.1" datatype="VOTable">
+<schema name="TAP_SCHEMA" version="1.1-IA2" extends="1.1" datatype="VOTable">
     <table name="schemas">
         <column name="schemaID">
             <type>BIGINT</type>
diff --git a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1.xml b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1.xml
index ca0050a0bb4305503566238b7a3e304b84c1e46f..c3470b537abe146db6b728c6981c40d1c2210142 100644
--- a/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1.xml
+++ b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1.xml
@@ -21,7 +21,7 @@ You should have received a copy of the GNU General Public License along with
 this program; if not, write to the Free Software Foundation, Inc., 51
 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 -->
-<schema name="tap_schema" version="1.1" extends="1.0" datatype="VOTable">
+<schema name="TAP_SCHEMA" version="1.1" extends="1.0" datatype="VOTable">
     <table name="tables">
         <column name="table_index">
             <type>INTEGER</type>
diff --git a/TASMAN-core/src/test/java/it/inaf/ia2/tsm/TestAll.java b/TASMAN-core/src/test/java/it/inaf/ia2/tsm/TestAll.java
index a4bad2d5c01c357ef0ee3a05f40a2f5067ada349..d68c4e6a15b246fc67b7994f515de8f8b5241236 100644
--- a/TASMAN-core/src/test/java/it/inaf/ia2/tsm/TestAll.java
+++ b/TASMAN-core/src/test/java/it/inaf/ia2/tsm/TestAll.java
@@ -94,6 +94,7 @@ public class TestAll {
         settings.setTapSchemaName("test_tap_schema");
         settings.setTapSchemaVersion("1.1-IA2");
         settings.setHasObscore(true);
+        settings.setIvoaSchemaName("test_ivoa");
         settings.setObscoreVersion("1.1");
 
         // Mix!
@@ -166,11 +167,11 @@ public class TestAll {
                         switch (dbType) {
                             case MYSQL:
                                 stat.executeUpdate("DROP DATABASE IF EXISTS test_tap_schema");
-                                stat.executeUpdate("DROP DATABASE IF EXISTS ivoa");
+                                stat.executeUpdate("DROP DATABASE IF EXISTS test_ivoa");
                                 break;
                             case POSTGRES:
                                 stat.executeUpdate("DROP SCHEMA IF EXISTS test_tap_schema CASCADE");
-                                stat.executeUpdate("DROP SCHEMA IF EXISTS ivoa CASCADE");
+                                stat.executeUpdate("DROP SCHEMA IF EXISTS test_ivoa CASCADE");
                                 break;
                             default:
                                 throw new UnsupportedOperationException("Database type " + dbType + " not supported");
@@ -460,9 +461,9 @@ public class TestAll {
                 assertFalse(operations.getHasOperations());
 
                 // Checking size and arraysize detection
-                Schema tapSchemaSchema = tapSchema.getChild(TapSchema.STANDARD_NAME);
+                Schema tapSchemaSchema = tapSchema.getChild(TapSchema.STANDARD_TAP_SCHEMA_NAME);
                 assertEquals(tapSchema.getDBName(), tapSchemaSchema.getValue(Schema.DBNAME));
-                assertEquals(TapSchema.STANDARD_NAME, tapSchemaSchema.getName());
+                assertEquals(TapSchema.STANDARD_TAP_SCHEMA_NAME, tapSchemaSchema.getName());
 
                 Table columnsTable = tapSchemaSchema.getChild("columns");
 
diff --git a/TASMAN-embedded/src/main/resources/app.properties b/TASMAN-embedded/src/main/resources/app.properties
index 7eebcf0f5d09d9f41e438b2aa86ba79e7e6434f1..086a164d6b7b30c04cfbed40326db687137e123a 100644
--- a/TASMAN-embedded/src/main/resources/app.properties
+++ b/TASMAN-embedded/src/main/resources/app.properties
@@ -1,2 +1,2 @@
-warFilePath=/home/sonia/git/TASMAN/TASMAN-webapp/target/tasman-webapp-1.3.0.war
+warFilePath=/home/sonia/git/TASMAN/TASMAN-webapp/target/tasman-webapp-1.3.2.war
 defaultPort=8080
\ No newline at end of file
diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/CredentialsEditing.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/CredentialsEditing.java
index 48e1b0fd7bd3f6c722aca898d207b21aa507b2d3..1b9520fbd52ad7f1d4b8e51a1f42ddfb36c5d703 100644
--- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/CredentialsEditing.java
+++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/CredentialsEditing.java
@@ -22,6 +22,7 @@
  */
 package it.inaf.ia2.tsm.webapp;
 
+import it.inaf.ia2.tsm.TapSchema;
 import it.inaf.ia2.tsm.webapp.xmlconfig.SeparatedCredentials;
 import it.inaf.ia2.tsm.datalayer.Credentials;
 import it.inaf.ia2.tsm.model.SchemaModels;
@@ -75,6 +76,7 @@ public class CredentialsEditing implements Serializable {
     private String tapSchemaVersion;
     private boolean hasObscore;
     private String obscoreVersion;
+    private String ivoaSchemaName;
 
     @PostConstruct
     public void init() {
@@ -110,6 +112,7 @@ public class CredentialsEditing implements Serializable {
         tapSchemaVersion = credentials.getTapSchemaVersion();
         hasObscore = credentials.isHasObscore();
         obscoreVersion = credentials.getObscoreVersion();
+        ivoaSchemaName = credentials.getIvoaSchemaName();
     }
 
     public void addNewCredentialsInEditing() {
@@ -117,10 +120,11 @@ public class CredentialsEditing implements Serializable {
         separateCredentials = false;
         sourceCredentials = new Credentials();
         tapSchemaCredentials = new Credentials();
-        tapSchemaName = "";
+        tapSchemaName = TapSchema.STANDARD_TAP_SCHEMA_NAME;
         tapSchemaVersion = "";
         hasObscore = false;
         obscoreVersion = "";
+        ivoaSchemaName = TapSchema.STANDARD_IVOA_SCHEMA_NAME;
     }
 
     public void loadTapSchema(TapCredentials tapCredentials) throws SQLException {
@@ -168,6 +172,11 @@ public class CredentialsEditing implements Serializable {
                     & validateNotNull(ctx, tapSchemaCredentials.getHostname(), "main:tap_schema_username", "Username is required");
         }
 
+        if (hasObscore) {
+            validationOk = validationOk
+                    & validateNotNull(ctx, ivoaSchemaName, "main:ivoa_schema_name", "IVOA schema name is required");
+        }
+
         if (!validationOk) {
             return;
         }
@@ -183,6 +192,7 @@ public class CredentialsEditing implements Serializable {
         editedCredentials.setTapSchemaVersion(tapSchemaVersion);
         editedCredentials.setHasObscore(hasObscore);
         editedCredentials.setObscoreVersion(obscoreVersion);
+        editedCredentials.setIvoaSchemaName(ivoaSchemaName);
 
         if (credentialsInEditing == null) {
             // New credentials
@@ -264,4 +274,12 @@ public class CredentialsEditing implements Serializable {
     public void setObscoreVersion(String obscoreVersion) {
         this.obscoreVersion = obscoreVersion;
     }
+
+    public String getIvoaSchemaName() {
+        return ivoaSchemaName;
+    }
+
+    public void setIvoaSchemaName(String ivoaSchemaName) {
+        this.ivoaSchemaName = ivoaSchemaName;
+    }
 }
diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaEditingBean.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaEditingBean.java
index 851ac0c068cba2b0e16f18659795288b2df6456a..26e4c36a28300aa8243da12d721cb3653ae83462 100644
--- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaEditingBean.java
+++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaEditingBean.java
@@ -277,10 +277,17 @@ public class TapSchemaEditingBean implements Serializable {
         this.currentAddingContainer = currentAddingContainer;
         this.currentAddables = new ArrayList<>();
         for (String name : currentAddingContainer.getAddableChildrenNames()) {
-            if (currentAddingContainer instanceof TapSchema && !tapSchema.exists() && name.equals(tapSchema.getName())) {
-                // we can't add the TAP_SCHEMA into itself when it doesn't
-                // created yet.
-                continue;
+            if (currentAddingContainer instanceof TapSchema) {
+                if (name.equals(tapSchema.getRealSchemaName(tapSchema.getName()))
+                        && tapSchema.getChild(tapSchema.getName()) != null) {
+                    // we can manually add the TAP_SCHEMA schema into itself only if it has been accidentally removed
+                    // Note: adding of TAP_SCHEMA schema should be fully managed by TASMAN during the consistency checking phase.
+                    continue;
+                }
+                if (name.equals(tapSchema.getRealSchemaName(tapSchema.getIvoaSchemaName()))) {
+                    // Ivoa schema adding/removal is fully managed by TASMAN
+                    continue;
+                }
             }
             currentAddables.add(new AddableItem(name));
         }
@@ -313,7 +320,7 @@ public class TapSchemaEditingBean implements Serializable {
         for (AddableItem item : currentAddables) {
             if (item.isSelected()) {
                 lastAddedEntity = currentAddingContainer.addChild(item.getName());
-                if (lastAddedEntity != null && canAddChildren) {
+                if (lastAddedEntity != null && canAddChildren && addAlsoAllChildren) {
                     addAllChildren(lastAddedEntity);
                 }
             }
diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaLoader.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaLoader.java
index 9461743f8329c85a6b4f6419cd224b091f856bf8..1f8ecb0c75314deaaf60ae0e9c0a1229453b8906 100644
--- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaLoader.java
+++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/TapSchemaLoader.java
@@ -91,7 +91,7 @@ public class TapSchemaLoader implements Serializable {
                 tapSchemaExists = true;
             }
             // Check for ivoa schema existence only if the user wants obscore
-            if (tapCredentials.isHasObscore() && schemaName.equals("ivoa")) {
+            if (tapCredentials.isHasObscore() && schemaName.equals(tapCredentials.getIvoaSchemaName())) {
                 ivoaSchemaExists = true;
             }
             if (tapSchemaExists && ivoaSchemaExists) {
@@ -114,6 +114,7 @@ public class TapSchemaLoader implements Serializable {
         settings.setTapSchemaVersion(tapCredentials.getTapSchemaVersion());
         settings.setHasObscore(tapCredentials.isHasObscore());
         settings.setObscoreVersion(tapCredentials.getObscoreVersion());
+        settings.setIvoaSchemaName(tapCredentials.getIvoaSchemaName());
         return settings;
     }
 
diff --git a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/TapCredentials.java b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/TapCredentials.java
index d615b0a75e312bc00f115779ce717bccd06f246f..4bb35db1d47561a173225a0ce1e3a5cdf264d03f 100644
--- a/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/TapCredentials.java
+++ b/TASMAN-webapp/src/main/java/it/inaf/ia2/tsm/webapp/xmlconfig/TapCredentials.java
@@ -37,6 +37,7 @@ public abstract class TapCredentials implements Serializable {
     private String tapSchemaVersion;
     private boolean hasObscore;
     private String obscoreVersion;
+    private String ivoaSchemaName;
 
     public TapCredentials() {
     }
@@ -46,6 +47,8 @@ public abstract class TapCredentials implements Serializable {
         this.tapSchemaName = tapCredentials.getTapSchemaName();
         this.tapSchemaVersion = tapCredentials.getTapSchemaVersion();
         this.hasObscore = tapCredentials.isHasObscore();
+        this.obscoreVersion = tapCredentials.getObscoreVersion();
+        this.ivoaSchemaName = tapCredentials.getIvoaSchemaName();
     }
 
     @XmlElement(name = "tap_schema_name")
@@ -83,4 +86,13 @@ public abstract class TapCredentials implements Serializable {
     public void setObscoreVersion(String obscoreVersion) {
         this.obscoreVersion = obscoreVersion;
     }
+
+    @XmlElement(name = "ivoa_schema_name")
+    public String getIvoaSchemaName() {
+        return ivoaSchemaName;
+    }
+
+    public void setIvoaSchemaName(String ivoaSchemaName) {
+        this.ivoaSchemaName = ivoaSchemaName;
+    }
 }
diff --git a/TASMAN-webapp/src/main/webapp/credentialsEditing.xhtml b/TASMAN-webapp/src/main/webapp/credentialsEditing.xhtml
index f20e2aebea19eb32eea300d62b45ec513868b99c..66d62def09c098ab9b1d1a59a06c31284282a8e0 100644
--- a/TASMAN-webapp/src/main/webapp/credentialsEditing.xhtml
+++ b/TASMAN-webapp/src/main/webapp/credentialsEditing.xhtml
@@ -39,6 +39,7 @@
                                     <th>Version</th>
                                     <th>Obscore</th>
                                     <th>Obscore version</th>
+                                    <th>IVOA schema name</th>
                                     <th>Login</th>
                                 </tr>
                             </thead>
@@ -69,6 +70,7 @@
                                         <td>#{c.tapSchemaVersion}</td>
                                         <td><span class="glyphicon glyphicon-#{c.hasObscore ? 'ok':'remove'}"></span></td>
                                         <td><h:panelGroup rendered="#{c.hasObscore}">#{c.obscoreVersion}</h:panelGroup></td>
+                                        <td><h:panelGroup rendered="#{c.hasObscore}">#{c.ivoaSchemaName}</h:panelGroup></td>
                                         <td>
                                             <h:commandLink  action="#{credentialsInsertion.loadTapSchema(c)}" title="Login" immediate="true">
                                                 <span class="glyphicon glyphicon-log-in"></span>
@@ -88,7 +90,7 @@
                         <h:commandLink class="btn btn-success" action="#{credentialsInsertion.addNewCredentialsInEditing()}">
                             <span class="glyphicon glyphicon-plus"></span>
                             Add new database credentials
-                            <f:ajax execute="@this" render="credentials-modal-body" onevent="credentials.editClicked" />
+                            <f:ajax execute="@this" render=":main:credentials-modal-body" onevent="credentials.editClicked" />
                         </h:commandLink>
                     </div>
                 </h:panelGroup>
@@ -244,18 +246,27 @@
                                     <div class="form-group">
                                         <label class="col-xs-6 col-xs-offset-4">
                                             <h:selectBooleanCheckbox value="#{credentialsInsertion.hasObscore}" id="has-obscore">
-                                                <f:ajax execute="@form" render=":main:credentials-modal-body" />
+                                                <f:ajax execute="@this" render="obscore_settings" />
                                             </h:selectBooleanCheckbox>
                                             Has obscore
                                         </label>
                                     </div>
-                                    <h:panelGroup class="form-group" rendered="#{credentialsInsertion.hasObscore}" layout="block">
-                                        <h:outputLabel for="obscore_version" class="control-label col-xs-4">ObsCore version</h:outputLabel>
-                                        <div class="col-xs-6">
-                                            <h:selectOneMenu value="#{credentialsInsertion.obscoreVersion}" class="form-control">
-                                                <f:selectItems value="#{credentialsInsertion.obscoreVersions}" var="version" itemLabel="#{version}" itemDescription="#{version}" id="obscore_version" />
-                                            </h:selectOneMenu>
-                                        </div>
+                                    <h:panelGroup id="obscore_settings">
+                                        <h:panelGroup class="form-group" rendered="#{credentialsInsertion.hasObscore}" layout="block">
+                                            <h:outputLabel for="obscore_version" class="control-label col-xs-4">ObsCore version</h:outputLabel>
+                                            <div class="col-xs-6">
+                                                <h:selectOneMenu value="#{credentialsInsertion.obscoreVersion}" class="form-control" id="obscore_version">
+                                                    <f:selectItems value="#{credentialsInsertion.obscoreVersions}" var="version" itemLabel="#{version}" itemDescription="#{version}" />
+                                                </h:selectOneMenu>
+                                            </div>
+                                        </h:panelGroup>
+                                        <h:panelGroup class="form-group" rendered="#{credentialsInsertion.hasObscore}" layout="block">
+                                            <h:outputLabel for="ivoa_schema_name" class="control-label col-xs-4">IVOA schema name</h:outputLabel>
+                                            <div class="col-xs-6">
+                                                <h:inputText value="#{credentialsInsertion.ivoaSchemaName}" id="ivoa_schema_name" class="form-control" />
+                                                <h:message for="ivoa_schema_name" class="text-danger" />
+                                            </div>
+                                        </h:panelGroup>
                                     </h:panelGroup>
                                 </div>
                             </h:panelGroup>
diff --git a/TASMAN-webapp/src/main/webapp/resources/js/common.js b/TASMAN-webapp/src/main/webapp/resources/js/common.js
index bedc21ee150122659183aaaa3f05dfeb4d00d837..c5667061ca498e5966ac81f833f01f1349ba9f0d 100644
--- a/TASMAN-webapp/src/main/webapp/resources/js/common.js
+++ b/TASMAN-webapp/src/main/webapp/resources/js/common.js
@@ -78,8 +78,8 @@
                 $('.modal').modal('hide');
 
                 $('#errorModal .errorName').text(error.errorName);
-                $('#errorModal .errorMessage').text(error.errorMessage);
-                if (error.errorName.indexOf('ViewExpiredException') !== -1) {
+                $('#errorModal .errorMessage').text(error.errorMessage || error.description);
+                if (error.errorName && error.errorName.indexOf('ViewExpiredException') !== -1) {
                     // If view has expired reload the page to display error message
                     location.reload();
                 } else {
diff --git a/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml b/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml
index f075831b485e7afad2d50a31f884a492f7d7d004..688077c7b1fc86facffb4453ea4247623c16d971 100644
--- a/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml
+++ b/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml
@@ -83,6 +83,9 @@
                                 <h:panelGroup rendered="#{schema.name eq tapSchemaEditing.tapSchema.name and tapSchemaEditing.tapSchema.DBName ne null}">
                                     <small>(#{tapSchemaEditing.tapSchema.DBName})</small>
                                 </h:panelGroup>
+                                <h:panelGroup rendered="#{schema.name eq tapSchemaEditing.tapSchema.ivoaSchemaName and tapSchemaEditing.tapSchema.ivoaSchemaDBName ne null}">
+                                    <small>(#{tapSchemaEditing.tapSchema.ivoaSchemaDBName})</small>
+                                </h:panelGroup>
                                 <f:ajax execute="@form" render="@form" />
                                 <h:commandButton class="remove-btn" rendered="#{!tapSchemaEditing.toRemove(schema) and tapSchemaEditing.isSchemaRemovable(schema)}" action="#{tapSchemaEditing.tapSchema.removeChild(schema.name)}" value="&#215;" onclick="TSM.stopPropagation(event)">
                                     <f:ajax execute="@form" render="@form" />
diff --git a/install.sh b/install.sh
index 8e54c85fb05723eded5a68aa3df690a920a1b12b..4135e2d512e514b1c75fcad0a596d115b260a070 100755
--- a/install.sh
+++ b/install.sh
@@ -104,7 +104,7 @@ cd - 1> /dev/null
 # Creating executable
 tasman_bin="$install_dir""tasman"
 echo "#!/bin/bash" > $tasman_bin
-echo "java -jar $install_dir""tasman-embedded.jar" >> $tasman_bin
+echo "java -jar $install_dir""tasman-embedded.jar \$1" >> $tasman_bin
 chmod +x $tasman_bin
 
 # Creating executable symbolic link