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 b8290d1debcad0b374ccd9a74a70ce9ebd68335a..eba7bcc27f1a624b86d776829e47641caa9e8da5 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
@@ -53,12 +53,26 @@ public class SchemaModels {
             String[] tapSchemaModelFiles = getXMLModelFileNames(properties, "tap_schema_models");
             String[] ivoaModelFiles = getXMLModelFileNames(properties, "ivoa_schema_models");
 
-            TAP_SCHEMA_MODELS = new XMLModelsLoader(tapSchemaModelFiles).load();
+            TAP_SCHEMA_MODELS = new XMLModelsLoader(tapSchemaModelFiles, getTapSchemaModelsFromExternalFolder()).load();
             IVOA_SCHEMA_MODELS = new XMLModelsLoader(ivoaModelFiles).load();
         } catch (IOException e) {
             throw new ExceptionInInitializerError(e);
         }
     }
+    
+    private static File[] getTapSchemaModelsFromExternalFolder() {
+
+        String tasmanConfigFolder = System.getenv("TASMAN_CONFIG_FOLDER");
+
+        if (tasmanConfigFolder != null) {
+            File tapSchemaModelsExternalFolder = new File(tasmanConfigFolder).toPath().resolve("schema_definition").toFile();
+            if (tapSchemaModelsExternalFolder.exists()) {
+                return tapSchemaModelsExternalFolder.listFiles();
+            }
+        }
+
+        return new File[]{};
+    }
 
     private static Properties getCoreProperties() throws IOException {
         Properties props = new Properties();
diff --git a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/XMLModelsLoader.java b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/XMLModelsLoader.java
index 89a337c57b034e09aa13cdb92a073dfe94daa27f..f4eabb639f48f3f3fbfcf320674243a24cdc0769 100644
--- a/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/XMLModelsLoader.java
+++ b/TASMAN-core/src/main/java/it/inaf/ia2/tsm/model/XMLModelsLoader.java
@@ -22,6 +22,8 @@
  */
 package it.inaf.ia2.tsm.model;
 
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -52,13 +54,19 @@ public class XMLModelsLoader {
     private static final Logger LOG = LoggerFactory.getLogger(XMLModelsLoader.class);
 
     private final String[] xmlModelFileNames;
+    private final File[] xmlModelExternalFiles;
     // key: doc version
     private final Map<String, Document> documents;
     private final Map<String, String> inheritanceGraph;
     private final Map<Integer, List<Document>> inheritanceLevels;
 
     public XMLModelsLoader(String[] xmlModelFileNames) {
+        this(xmlModelFileNames, new File[]{});
+    }
+
+    public XMLModelsLoader(String[] xmlModelFileNames, File[] xmlModelExternalFiles) {
         this.xmlModelFileNames = xmlModelFileNames;
+        this.xmlModelExternalFiles = xmlModelExternalFiles;
         this.documents = new HashMap<>();
         inheritanceGraph = new HashMap<>();
         inheritanceLevels = new HashMap<>();
@@ -110,19 +118,29 @@ public class XMLModelsLoader {
 
         for (String xmlModelFileName : xmlModelFileNames) {
             try (InputStream in = classLoader.getResourceAsStream(xmlModelFileName)) {
-                Document doc = builder.parse(in);
-                Element root = doc.getDocumentElement();
-                String version = root.getAttribute("version");
-                // TODO: XML Model validation
-
-                // Documents loaded in a single XMLModelsLoader instance must
-                // have different versions.
-                assert documents.get(version) == null;
-                documents.put(version, doc);
+                loadFile(builder, in);
+            }
+        }
+
+        for (File xmlModelExternalFile : xmlModelExternalFiles) {
+            try (FileInputStream fis = new FileInputStream(xmlModelExternalFile)) {
+                loadFile(builder, fis);
             }
         }
     }
 
+    private void loadFile(DocumentBuilder builder, InputStream in) throws IOException, SAXException {
+        Document doc = builder.parse(in);
+        Element root = doc.getDocumentElement();
+        String version = root.getAttribute("version");
+        // TODO: XML Model validation
+
+        // Documents loaded in a single XMLModelsLoader instance must
+        // have different versions.
+        assert documents.get(version) == null;
+        documents.put(version, doc);
+    }
+
     private void buildInheritanceGraph() {
         for (Document document : documents.values()) {
             Element root = document.getDocumentElement();
diff --git a/install_template.sh b/install_template.sh
index 8776febb8348cb20c14c66e27a9940b7df96b6e5..8bfde8e75d977d5d40cc5c25c353ce6d8cc40d78 100644
--- a/install_template.sh
+++ b/install_template.sh
@@ -110,8 +110,8 @@ cd - 1> /dev/null
 
 # Creating executable
 tasman_bin="$install_dir""tasman"
-echo "#!/bin/bash" > $tasman_bin
-echo "java -jar $install_dir""tasman-embedded.jar \$1" >> $tasman_bin
+echo "#!/bin/sh" > $tasman_bin
+echo "TASMAN_CONFIG_FOLDER=$tasman_config_dir java -jar $install_dir""tasman-embedded.jar \$1" >> $tasman_bin
 chmod +x $tasman_bin
 
 # Creating executable symbolic link