diff --git a/TASMAN-core/pom.xml b/TASMAN-core/pom.xml
index 04bee63fc3be504d488409c1d0ca2eaad1c05521..bc78d632e1940ba2d01c52e268e77c6069f7886d 100644
--- a/TASMAN-core/pom.xml
+++ b/TASMAN-core/pom.xml
@@ -3,7 +3,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>it.inaf.ia2.tap</groupId>
     <artifactId>tasman-core</artifactId>
-    <version>1.3.1</version>
+    <version>1.3.2</version>
     <packaging>jar</packaging>
     <name>tasman-core</name>
     <properties>
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 e56b9ced9bd2e27765cf6949232fc3a78f6b9d4c..1f9b5ebe77757177e1bcd398be884ca72cd48831 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
@@ -44,6 +44,7 @@ public class Column extends ChildEntity<Table> {
     public final static String UCD_KEY = "ucd";
     public final static String UNIT_KEY = "unit";
     public final static String COLUMN_INDEX = "column_index"; // TAP version >= 1.1
+    public final static String DBNAME = "dbname";
 
     // Original datatype (computed from information_schema data), used for consistency checking
     public final static String ORIGINAL_DATATYPE_KEY = "original_datatype";
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 3a5e9374ed391f0b35aadb068152b67070d6935a..855e15744897fc037edf75962d780a81a27fedc1 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
@@ -40,6 +40,7 @@ import org.slf4j.LoggerFactory;
 public class Schema extends ChildEntity<TapSchema> implements EntitiesContainer<Table> {
 
     public final static String SCHEMA_NAME_KEY = "schema_name";
+    public final static String DBNAME = "dbname";
 
     private static final long serialVersionUID = 8828583158332877855L;
     private static final Logger LOG = LoggerFactory.getLogger(Schema.class);
@@ -61,7 +62,7 @@ public class Schema extends ChildEntity<TapSchema> implements EntitiesContainer<
         tables = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
         tablesTypes = broker.getAllTableTypes(name);
 
-        for (String tableName : broker.getAllTablesNames(name)) {
+        for (String tableName : broker.getAllTablesNames(getRealSchemaName())) {
             tables.put(tableName, null);
         }
         LOG.debug("Schema {} contains {} tables", name, tables.size());
@@ -69,6 +70,13 @@ public class Schema extends ChildEntity<TapSchema> implements EntitiesContainer<
         setStatus(Status.LOADED);
     }
 
+    public String getRealSchemaName() {
+        if (tapSchema.getDBName() != null && this.getName().equals(tapSchema.getName())) {
+            return tapSchema.getDBName();
+        }
+        return getName();
+    }
+
     /**
      * {@inheritDoc} The value in the {@code schema_name} column.
      */
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 ed0d8c409000b4f9b4685ec5f7ab361322976dc7..207bd74601fd0cb5ab3f1ace1008054e5adcc54a 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
@@ -42,6 +42,7 @@ public class Table extends ChildEntity<Schema> implements EntitiesContainer<Colu
     public final static String SCHEMA_NAME_KEY = "schema_name";
     public final static String TABLE_NAME_KEY = "table_name";
     public final static String TABLE_TYPE_KEY = "table_type";
+    public final static String DBNAME = "dbname";
 
     private static final long serialVersionUID = 8265331530960896871L;
     private static final Logger LOG = LoggerFactory.getLogger(Table.class);
@@ -98,7 +99,7 @@ public class Table extends ChildEntity<Schema> implements EntitiesContainer<Colu
 
         DBBroker broker = tapSchema.getDBBroker(schema.getName());
         tableTableModel = getTableTableModel();
-        columnsMetadata = broker.getAllColumnsMetadata(schema.getName(), tableSimpleName, tableTableModel, tapSchema.getDataTypeMode());
+        columnsMetadata = broker.getAllColumnsMetadata(schema.getRealSchemaName(), tableSimpleName, tableTableModel, tapSchema.getDataTypeMode());
         fixIndexedMetadataValues();
 
         for (Map.Entry<String, Map<String, Object>> entry : columnsMetadata.entrySet()) {
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 bac34d5e496dd2f42812d5da31717276cc237731..9783cd8870cb6d5a90864a77cae9cf1996218ff2 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
@@ -47,6 +47,8 @@ import org.slf4j.LoggerFactory;
  */
 public class TapSchema implements EntitiesContainer<Schema>, Serializable {
 
+    public static final String STANDARD_NAME = "TAP_SCHEMA";
+
     // Mandatory tables constants
     public static final String TABLES_TABLE = "tables";
     public static final String SCHEMAS_TABLE = "schemas";
@@ -65,6 +67,8 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
 
     private boolean loading;
     private DBWrapper dbWrapper;
+    private String dbName;
+    private String name;
     private boolean exists;
     private TapSchemaSettings settings;
     private DataTypeMode dataTypeMode;
@@ -101,12 +105,32 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
         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();
+        }
+    }
+
+    private void loadName() {
+        if (dbName != null) {
+            name = STANDARD_NAME;
+        } else {
+            name = settings.getTapSchemaName();
+        }
+    }
+
     public final void load() throws SQLException {
 
         loading = true;
@@ -115,7 +139,7 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
         for (String schemaName : getSourceDBBroker().getAllSchemaNames()) {
             schemas.put(schemaName, null);
         }
-        schemas.put(settings.getTapSchemaName(), null); // the TAP_SCHEMA contains itself
+        schemas.put(getName(), null); // the TAP_SCHEMA contains itself
 
         if (exists) {
             consistencyChecks = TapSchemaLoader.loadExistingTapSchema((this));
@@ -138,7 +162,7 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
      * The name of the TAP_SCHEMA schema.
      */
     public final String getName() {
-        return settings.getTapSchemaName();
+        return name;
     }
 
     /**
@@ -153,7 +177,8 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
     }
 
     private void loadSchemaKeysMetadata(String schemaName) throws SQLException {
-        allKeys.addAll(getDBBroker(schemaName).getKeys(this, schemaName));
+        allKeys.addAll(getDBBroker(schemaName)
+                .getKeys(this, schemaName, getRealSchemaName(schemaName)));
     }
 
     public Set<Key> getAllKeys() {
@@ -307,7 +332,7 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
 
         if (!exists) {
             SchemaModel tapSchemaModel = getTapSchemaModel();
-            broker.createTapSchemaStructure(getName(), tapSchemaModel);
+            broker.createTapSchemaStructure(getRealName(), tapSchemaModel);
 
             // Adding TAP_SCHEMA into TAP_SCHEMA
             addEntireSchema(getName());
@@ -525,6 +550,11 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
     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)) {
+            dbNameMetadata = dbName;
+        }
+        metadata.put(Schema.DBNAME, dbNameMetadata);
         return metadata;
     }
 
@@ -585,4 +615,25 @@ public class TapSchema implements EntitiesContainer<Schema>, Serializable {
     public void fillColumnsProperties(SchemaModel schemaModel) {
         fillColumnProperties(schemaModel, schemaModel.getName());
     }
+
+    /**
+     * Allows to name the TAP_SCHEMA using the standard name, but referring to a
+     * differently named schema. This value is null if the TAP_SCHEMA version
+     * doesn't support the dbname column or if the schema name is already the
+     * standard value.
+     */
+    public String getDBName() {
+        return dbName;
+    }
+
+    public String getRealName() {
+        return getRealSchemaName(getName());
+    }
+
+    public String getRealSchemaName(String schemaName) {
+        if (dbName != null && STANDARD_NAME.equals(schemaName)) {
+            return dbName;
+        }
+        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 4020c0f2055cb47537e36f91fc53d2c2e6ec42c7..f7ccfd32e9b7a66b3a1b8ff9fb2625f5cc35c625 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
@@ -241,7 +241,7 @@ public class TapSchemaLoader {
     }
 
     private void loadAndCheckSchemata() throws SQLException {
-        for (Map<String, Object> schemaProps : tapSchemaDBBroker.getSavedItems(tapSchema.getName(), tapSchema.getTableModel(SCHEMAS_TABLE))) {
+        for (Map<String, Object> schemaProps : tapSchemaDBBroker.getSavedItems(tapSchema.getRealName(), tapSchema.getTableModel(SCHEMAS_TABLE))) {
             String schemaName = (String) schemaProps.get(Schema.SCHEMA_NAME_KEY);
             Schema schema = tapSchema.addChild(schemaName);
             if (schema == null) {
@@ -254,7 +254,7 @@ public class TapSchemaLoader {
     }
 
     private void loadAndCheckTables() throws SQLException {
-        for (Map<String, Object> tableProps : tapSchemaDBBroker.getSavedItems(tapSchema.getName(), tapSchema.getTableModel(TABLES_TABLE))) {
+        for (Map<String, Object> tableProps : tapSchemaDBBroker.getSavedItems(tapSchema.getRealName(), tapSchema.getTableModel(TABLES_TABLE))) {
             String tableCompleteName = (String) tableProps.get(Table.TABLE_NAME_KEY);
             String[] tableNameSplit = tableCompleteName.split(Pattern.quote("."));
             String schemaName = tableNameSplit[0];
@@ -275,7 +275,7 @@ public class TapSchemaLoader {
     }
 
     private void loadAndCheckColumns() throws SQLException {
-        for (Map<String, Object> columnProps : tapSchemaDBBroker.getSavedItems(tapSchema.getName(), tapSchema.getTableModel(COLUMNS_TABLE))) {
+        for (Map<String, Object> columnProps : tapSchemaDBBroker.getSavedItems(tapSchema.getRealName(), tapSchema.getTableModel(COLUMNS_TABLE))) {
             String tableCompleteName = (String) columnProps.get(Column.TABLE_NAME_KEY);
             String[] tableNameSplit = tableCompleteName.split(Pattern.quote("."));
             String schemaName = tableNameSplit[0];
@@ -302,8 +302,8 @@ public class TapSchemaLoader {
     }
 
     private void loadAndCheckKeys() throws SQLException {
-        List<Map<String, Object>> keysProps = tapSchemaDBBroker.getSavedItems(tapSchema.getName(), tapSchema.getTableModel(KEYS_TABLE));
-        List<Map<String, Object>> keysColumnsProps = tapSchemaDBBroker.getSavedItems(tapSchema.getName(), tapSchema.getTableModel(KEY_COLUMNS_TABLE));
+        List<Map<String, Object>> keysProps = tapSchemaDBBroker.getSavedItems(tapSchema.getRealName(), tapSchema.getTableModel(KEYS_TABLE));
+        List<Map<String, Object>> keysColumnsProps = tapSchemaDBBroker.getSavedItems(tapSchema.getRealName(), tapSchema.getTableModel(KEY_COLUMNS_TABLE));
         for (Map<String, Object> keyProp : keysProps) {
 
             String fromTable = (String) keyProp.get(Key.FROM_TABLE_KEY);
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaMender.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaMender.java
index 9a8c4240a03a351213001679f953aed755cdbd5c..40402e12800cf192e5a80e007ace21804908c5bf 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaMender.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/TapSchemaMender.java
@@ -152,7 +152,7 @@ public class TapSchemaMender {
 
     private void fixInconsistentValues() throws SQLException {
         for (InconsistentColumnProperty inconsistency : consistencyChecks.getInconsistencies()) {
-            tapSchema.getTapSchemaDBBroker().updateTapSchemaColumnValue(tapSchema.getName(),
+            tapSchema.getTapSchemaDBBroker().updateTapSchemaColumnValue(tapSchema.getRealName(),
                     inconsistency.getTableCompleteName(), inconsistency.getColumnName(),
                     inconsistency.getKey(), inconsistency.getCorrectValue());
         }
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 e60eea63fabb4bc25904daf0072b2fbac14bb335..222854e53c565808818a40fda63e19dca220d66e 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
@@ -58,7 +58,7 @@ public interface DBBroker {
 
     Map<String, Map<String, Object>> getAllColumnsMetadata(String schemaName, String tableSimpleName, TableModel tableModel, DataTypeMode dataTypeMode) throws SQLException;
 
-    List<Key> getKeys(TapSchema tapSchema, String schemaName) throws SQLException;
+    List<Key> getKeys(TapSchema tapSchema, String schemaName, String realSchemaName) throws SQLException;
 
     List<Map<String, Object>> getSavedItems(String tapSchemaName, TableModel tableModel, String whereCondition, Object[] whereParams) 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 af964c8f813b14203aad04e94a908e3f321ce786..65b1e8cef128e4925dc4fe5f579e3cda88e14eba 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
@@ -210,7 +210,7 @@ public abstract class DBBrokerTemplate implements DBBroker {
             connection.setAutoCommit(false); // start transaction
             transactionStarted = true;
 
-            String tapSchemaNameEscaped = escape(tapSchema.getName());
+            String tapSchemaNameEscaped = escape(tapSchema.getRealName());
 
             // REMOVE ELEMENTS
             if (tapSchema.exists()) {
@@ -265,21 +265,21 @@ public abstract class DBBrokerTemplate implements DBBroker {
                 LOG.debug("Inserting {} new schemas", operations.getSchemasToAdd().size());
             }
             for (Schema schema : operations.getSchemasToAdd()) {
-                insertItem(tapSchema.getName(), schema, connection);
+                insertItem(tapSchema.getRealName(), schema, connection);
             }
 
             if (!operations.getTablesToAdd().isEmpty()) {
                 LOG.debug("Inserting {} new tables", operations.getTablesToAdd().size());
             }
             for (Table table : operations.getTablesToAdd()) {
-                insertItem(tapSchema.getName(), table, connection);
+                insertItem(tapSchema.getRealName(), table, connection);
             }
 
             if (!operations.getColumnsToAdd().isEmpty()) {
                 LOG.debug("Inserting {} new columns", operations.getColumnsToAdd().size());
             }
             for (Column column : operations.getColumnsToAdd()) {
-                insertItem(tapSchema.getName(), column, connection);
+                insertItem(tapSchema.getRealName(), column, connection);
             }
 
             if (!operations.getKeysToAdd().isEmpty()) {
@@ -287,9 +287,9 @@ public abstract class DBBrokerTemplate implements DBBroker {
             }
             for (Key key : operations.getKeysToAdd()) {
                 // insert new keys and their key columns
-                insertItem(tapSchema.getName(), key, connection);
+                insertItem(tapSchema.getRealName(), key, connection);
                 for (KeyColumn keyColumn : key.getKeyColumns()) {
-                    insertItem(tapSchema.getName(), keyColumn, connection);
+                    insertItem(tapSchema.getRealName(), keyColumn, connection);
                 }
             }
 
@@ -298,26 +298,26 @@ public abstract class DBBrokerTemplate implements DBBroker {
                 for (Key key : operations.getKeysToUpdate()) {
                     // update keys and their key columns
                     String whereCond = String.format("%s = ?", escape(Key.ID_KEY));
-                    updateItem(tapSchema.getName(), key, connection, whereCond, key.getId());
+                    updateItem(tapSchema.getRealName(), key, connection, whereCond, key.getId());
                     for (KeyColumn keyColumn : key.getKeyColumns()) {
                         whereCond = String.format("%s = ?", escape(KeyColumn.KEY_ID_KEY));
-                        updateItem(tapSchema.getName(), keyColumn, connection, whereCond, keyColumn.getKeyId());
+                        updateItem(tapSchema.getRealName(), keyColumn, connection, whereCond, keyColumn.getKeyId());
                     }
                 }
 
                 for (Schema schema : operations.getSchemasToUpdate()) {
                     String whereCond = String.format("%s = ?", escape(Schema.SCHEMA_NAME_KEY));
-                    updateItem(tapSchema.getName(), schema, connection, whereCond, schema.getName());
+                    updateItem(tapSchema.getRealName(), schema, connection, whereCond, schema.getName());
                 }
 
                 for (Table table : operations.getTablesToUpdate()) {
                     String whereCond = String.format("%s = ?", escape(Table.TABLE_NAME_KEY));
-                    updateItem(tapSchema.getName(), table, connection, whereCond, table.getCompleteName());
+                    updateItem(tapSchema.getRealName(), table, connection, whereCond, table.getCompleteName());
                 }
 
                 for (Column column : operations.getColumnsToUpdate()) {
                     String whereCond = String.format("%s = ? AND %s = ?", escape(Column.TABLE_NAME_KEY), escape(Column.COLUMN_NAME_KEY));
-                    updateItem(tapSchema.getName(), column, connection, whereCond, column.getTableCompleteName(), column.getName());
+                    updateItem(tapSchema.getRealName(), column, connection, whereCond, column.getTableCompleteName(), column.getName());
                 }
             }
 
@@ -1050,4 +1050,11 @@ public abstract class DBBrokerTemplate implements DBBroker {
             }
         }
     }
+
+    protected String getExposedSchemaName(String schemaName, String realSchemaName, String keySchemaName) {
+        if (keySchemaName.equals(realSchemaName)) {
+            return schemaName;
+        }
+        return keySchemaName;
+    }
 }
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 816e0028a81f4a473efcdbaacd6bad5087940d2a..ab1d5af90cdc3eaeaa36558cec4cb0aeeac7516a 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,7 +132,7 @@ public class MySQLDBBroker extends DBBrokerTemplate {
                 cm.put(Column.DATATYPE_KEY, datatype);
                 cm.put(Column.SIZE_KEY, size);
 
-                String arraySize = null;
+                String arraySize = "*";
                 if (size != null) {
                     arraySize = String.valueOf(size);
                     // variable length columns must have a "*" symbol on arraysize
@@ -219,7 +219,7 @@ public class MySQLDBBroker extends DBBrokerTemplate {
     }
 
     @Override
-    public List<Key> getKeys(TapSchema tapSchema, String schemaName) throws SQLException {
+    public List<Key> getKeys(TapSchema tapSchema, String schemaName, String realSchemaName) throws SQLException {
         StringBuilder sb = new StringBuilder();
 
         sb.append("SELECT\n");
@@ -235,9 +235,9 @@ public class MySQLDBBroker extends DBBrokerTemplate {
         sb.append("ON c.CONSTRAINT_NAME = k.CONSTRAINT_NAME AND c.TABLE_SCHEMA = k.TABLE_SCHEMA\n");
         sb.append("WHERE c.CONSTRAINT_TYPE = 'FOREIGN KEY' \n");
         sb.append("AND k.TABLE_SCHEMA = '");
-        sb.append(schemaName);
+        sb.append(realSchemaName);
         sb.append("' OR k.REFERENCED_TABLE_SCHEMA = '");
-        sb.append(schemaName);
+        sb.append(realSchemaName);
         sb.append("'");
 
         String query = sb.toString();
@@ -258,8 +258,10 @@ public class MySQLDBBroker extends DBBrokerTemplate {
                 String targetTableName = resultSet.getString("target_table");
 
                 Map<String, Object> keyMetadata = new HashMap<>();
-                keyMetadata.put(Key.FROM_TABLE_KEY, fromSchemaName + "." + fromTableName);
-                keyMetadata.put(Key.TARGET_TABLE_KEY, targetSchemaName + "." + targetTableName);
+                String exposedFromSchemaName = getExposedSchemaName(schemaName, realSchemaName, fromSchemaName);
+                keyMetadata.put(Key.FROM_TABLE_KEY, String.format("%s.%s", exposedFromSchemaName, fromTableName));
+                String exposedTargetSchemaName = getExposedSchemaName(schemaName, realSchemaName, targetSchemaName);
+                keyMetadata.put(Key.TARGET_TABLE_KEY, String.format("%s.%s", exposedTargetSchemaName, targetTableName));
 
                 Key key = null;
                 // Searching for a partial built key
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 028a1929936f03b7a082e1588005d4d8d92b7b75..59008dea9985779a29d1c4f0e8ba35cceb00557a 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
@@ -131,7 +131,7 @@ public class PostgresDBBroker extends DBBrokerTemplate {
                 }
                 first = false;
 
-                querySb.append(cm.getName());
+                querySb.append(escape(cm.getName()));
                 querySb.append(" ");
 
                 if (cm.getEnumValues() == null) {
@@ -283,19 +283,13 @@ public class PostgresDBBroker extends DBBrokerTemplate {
                 cm.put(Column.DATATYPE_KEY, datatype);
                 cm.put(Column.SIZE_KEY, size);
 
-                String arraySize = null;
+                String arraySize = "*";
                 if (isArray) {
                     arraySize = formatArraySize(arraydimension);
-                } else {
-                    if (size != null) {
-                        arraySize = String.valueOf(size);
-                    }
-
+                } else if (size != null) {
+                    arraySize = String.valueOf(size);
                     // variable length columns must have a "*" symbol on arraysize
                     if (adqlType != null && ADQL.isVariable(adqlType)) {
-                        if (arraySize == null) {
-                            arraySize = "";
-                        }
                         arraySize += "*";
                     }
                 }
@@ -310,7 +304,7 @@ public class PostgresDBBroker extends DBBrokerTemplate {
     }
 
     @Override
-    public List<Key> getKeys(TapSchema tapSchema, String schemaName) throws SQLException {
+    public List<Key> getKeys(TapSchema tapSchema, String schemaName, String realSchemaName) throws SQLException {
 
         StringBuilder queryKeysSb = new StringBuilder();
 
@@ -321,10 +315,10 @@ public class PostgresDBBroker extends DBBrokerTemplate {
         queryKeysSb.append("FROM pg_catalog.pg_constraint\n");
         queryKeysSb.append("WHERE contype = 'f'\n");
         queryKeysSb.append("AND ((conrelid::regclass || '' LIKE '");
-        queryKeysSb.append(schemaName);
+        queryKeysSb.append(realSchemaName);
         queryKeysSb.append(".%')\n");
         queryKeysSb.append("OR (confrelid::regclass || '' LIKE '");
-        queryKeysSb.append(schemaName);
+        queryKeysSb.append(realSchemaName);
         queryKeysSb.append(".%'))");
 
         String queryKeys = queryKeysSb.toString();
@@ -341,14 +335,21 @@ public class PostgresDBBroker extends DBBrokerTemplate {
                 String constraintName = resultSet.getString("constraint_name");
 
                 String fromTableCompleteName = resultSet.getString("from_table");
+                String[] splitFrom = fromTableCompleteName.split(Pattern.quote("."));
                 String targetTableCompleteName = resultSet.getString("target_table");
+                String[] splitTarget = targetTableCompleteName.split(Pattern.quote("."));
+
+                String fromSchema = splitFrom[0];
+                String fromTable = splitFrom[1];
+                String targetSchema = splitTarget[0];
+                String targetTable = splitTarget[1];
 
-                String fromSchema = fromTableCompleteName.split(Pattern.quote("."))[0];
-                String targetSchema = targetTableCompleteName.split(Pattern.quote("."))[0];
+                String exposedFromSchemaName = getExposedSchemaName(schemaName, realSchemaName, fromSchema);
+                String exposedTargetSchemaName = getExposedSchemaName(schemaName, realSchemaName, targetSchema);
 
                 Map<String, Object> keyMetadata = new HashMap<>();
-                keyMetadata.put(Key.FROM_TABLE_KEY, fromTableCompleteName);
-                keyMetadata.put(Key.TARGET_TABLE_KEY, targetTableCompleteName);
+                keyMetadata.put(Key.FROM_TABLE_KEY, String.format("%s.%s", exposedFromSchemaName, fromTable));
+                keyMetadata.put(Key.TARGET_TABLE_KEY, String.format("%s.%s", exposedTargetSchemaName, targetTable));
 
                 Key key = new Key(tapSchema, keyMetadata);
                 keys.add(key);
diff --git a/TASMAN-core/src/main/resources/core.properties b/TASMAN-core/src/main/resources/core.properties
index 04ce0c68cf2d0fe3bea40de4d4b41c90718f49b1..6e2c892d52ff777481bf607c5ed6086c70bdaa00 100644
--- a/TASMAN-core/src/main/resources/core.properties
+++ b/TASMAN-core/src/main/resources/core.properties
@@ -3,5 +3,5 @@
 # Comma separated list of files inside schema_definition folder.
 # (It is necessary to put this list here because, unfortunately, there is no
 # easy way to read an entire resource folder using the ClassLoader API).
-tap_schema_models = tap_schema-1-IA2.xml,tap_schema-1.xml,tap_schema-1_1.xml
+tap_schema_models = tap_schema-1-IA2.xml,tap_schema-1.xml,tap_schema-1_1.xml,tap_schema-1_1-IA2.xml
 ivoa_schema_models = ivoa-1_1.xml
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
new file mode 100644
index 0000000000000000000000000000000000000000..346fff7febf352f784f85d1b6fef317a8fd18c72
--- /dev/null
+++ b/TASMAN-core/src/main/resources/schema_definition/tap_schema-1_1-IA2.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+_____________________________________________________________________________
+
+INAF - OATS National Institute for Astrophysics - Astronomical Observatory of
+Trieste INAF - IA2 Italian Center for Astronomical Archives
+_____________________________________________________________________________
+
+Copyright (C) 2016 Istituto Nazionale di Astrofisica
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License Version 3 as published by the
+Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+details.
+
+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">
+    <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>
+            <standard>false</standard>
+        </column>
+        <column name="dbname">
+            <type>VARCHAR</type>
+            <updatable>false</updatable> 
+            <key>dbname</key>
+            <standard>false</standard>
+        </column>
+    </table>
+    <table name="tables">
+        <column name="tableID">
+            <type>BIGINT</type>
+            <updatable>true</updatable>
+            <standard>false</standard>
+        </column>
+        <column name="dbname">
+            <type>VARCHAR</type>
+            <updatable>false</updatable> 
+            <key>dbname</key>
+            <standard>false</standard>
+        </column>
+    </table>
+    <table name="columns">
+        <column name="columnID">
+            <type>BIGINT</type>
+            <updatable>true</updatable>
+            <standard>false</standard>
+        </column>
+        <column name="id">
+            <type>INTEGER</type>
+            <updatable>true</updatable>
+            <standard>false</standard>
+        </column>
+        <column name="dbname">
+            <type>VARCHAR</type>
+            <updatable>false</updatable> 
+            <key>dbname</key>
+            <standard>false</standard>
+        </column>
+    </table>
+    <table name="keys">
+        <column name="keyID">
+            <type>BIGINT</type>
+            <updatable>true</updatable>
+            <standard>false</standard>
+        </column>
+    </table>
+    <table name="key_columns">
+        <column name="key_columnID">
+            <type>BIGINT</type>
+            <updatable>true</updatable>
+            <standard>false</standard>
+        </column>
+    </table>
+</schema>
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 6a1c902f0fd3d05336e837b2ea35baf63ae6f345..a4bad2d5c01c357ef0ee3a05f40a2f5067ada349 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
@@ -92,7 +92,7 @@ public class TestAll {
 
         settings = new TapSchemaSettings();
         settings.setTapSchemaName("test_tap_schema");
-        settings.setTapSchemaVersion("1.1");
+        settings.setTapSchemaVersion("1.1-IA2");
         settings.setHasObscore(true);
         settings.setObscoreVersion("1.1");
 
@@ -460,17 +460,23 @@ public class TestAll {
                 assertFalse(operations.getHasOperations());
 
                 // Checking size and arraysize detection
-                Column descriptionColumn = tapSchema.getChild(tapSchema.getName()).getChild("columns").getChild("utype");
-                assertEquals("char", descriptionColumn.getValue("datatype", String.class));
-                Integer size = descriptionColumn.getValue("size", Integer.class);
-                String arraySize = descriptionColumn.getValue("arraysize", String.class);
+                Schema tapSchemaSchema = tapSchema.getChild(TapSchema.STANDARD_NAME);
+                assertEquals(tapSchema.getDBName(), tapSchemaSchema.getValue(Schema.DBNAME));
+                assertEquals(TapSchema.STANDARD_NAME, tapSchemaSchema.getName());
+
+                Table columnsTable = tapSchemaSchema.getChild("columns");
+
+                Column utypeColumn = columnsTable.getChild("utype");
+                assertEquals("char", utypeColumn.getValue("datatype", String.class));
+                Integer size = utypeColumn.getValue("size", Integer.class);
+                String arraySize = utypeColumn.getValue("arraysize", String.class);
                 assertTrue(size == null || size == 255); // null -> Postgres, 255 -> MySQL
                 assertTrue("*".equals(arraySize) || "255*".equals(arraySize)); // * -> Postgres, 255* -> MySQL
 
                 // reloading
                 LOG.debug("----- Reloading saved TAP_SCHEMA -----");
                 tapSchema = new TapSchema(dbWrapper, settings, true);
-                assertEquals("1.1", tapSchema.getTapSchemaDBBroker().detectVersion(tapSchema.getName()));
+                assertEquals("1.1-IA2", tapSchema.getTapSchemaDBBroker().detectVersion(tapSchema.getRealName()));
                 LOG.debug(tapSchema.toString());
 
                 assertNotNull(sch0 = tapSchema.getChild("sch0", Status.ADDED_PERSISTED));
diff --git a/TASMAN-webapp/pom.xml b/TASMAN-webapp/pom.xml
index 8e5655763549f0734b4bef532636605c500fb563..5e07fba4219bf801aadc60089e5a320ec2487c1e 100644
--- a/TASMAN-webapp/pom.xml
+++ b/TASMAN-webapp/pom.xml
@@ -4,7 +4,7 @@
 
     <groupId>it.inaf.ia2.tap</groupId>
     <artifactId>tasman-webapp</artifactId>
-    <version>1.3.1</version>
+    <version>1.3.2</version>
     <packaging>war</packaging>
 
     <name>tasman-webapp</name>
@@ -124,7 +124,7 @@
         <dependency>
             <groupId>it.inaf.ia2.tap</groupId>
             <artifactId>tasman-core</artifactId>
-            <version>1.3.1</version>
+            <version>1.3.2</version>
         </dependency>
         <dependency>
             <groupId>ari.ucidy</groupId>
diff --git a/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml b/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml
index 054ef85fb37632297e916675ec837bd839f4ab25..f075831b485e7afad2d50a31f884a492f7d7d004 100644
--- a/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml
+++ b/TASMAN-webapp/src/main/webapp/tapSchemaEditing.xhtml
@@ -80,6 +80,9 @@
                         <li role="presentation" class="removable-tab #{tapSchemaEditing.isSchemaRemovable(schema) ? '': 'unremovable-tab'} #{tapSchemaEditing.selectedSchema.name eq schema.name ? 'active': ''} #{tapSchemaEditing.toRemove(schema) ? 'to-remove' : ''}">
                             <h:commandLink role="tab" action="#{tapSchemaEditing.setSelectedSchema(schema)}">
                                 <span class="#{tapSchemaEditing.toRemove(schema) ? 'strikeout':''}">#{schema.name}</span>
+                                <h:panelGroup rendered="#{schema.name eq tapSchemaEditing.tapSchema.name and tapSchemaEditing.tapSchema.DBName ne null}">
+                                    <small>(#{tapSchemaEditing.tapSchema.DBName})</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" />