diff --git a/README.md b/README.md
index 74f028f09749f9b761f2201dd3b24edc6496ae8f..072fe523033c8637532ab7419afd12e778bf1912 100644
--- a/README.md
+++ b/README.md
@@ -2,12 +2,14 @@
 
 Application extraction
 
-## Install dev version (linux)
+## Install dev version
 
 To install the dev version of this project run the following steps:
 
 - Install the app via the VAI setup on var/www/[app name]
-- Clone this repo on var/wwww/[app name]\_dev
-- Run install.sh and give the var/www/[app name] path when asked to build your tree structure
-- Now you have the correct versioned tree structure, rename var/www/[app name] as var/www/[app name]\_vai and var/www/[app name]\_dev as var/www/[app name]
-- Run `git pull` and `git push` to update/post the project and his dependencies
+- Rename var/www/[app name] by var/www/[app name]\_vai
+- Clone this repo on var/wwww/[app name]
+- Run install.sh (linux) or install.bat (windows) and give the var/www/[app name]\_vai path when asked
+- Now you have the correct versioned tree structure, and your app should run
+- Linux : run `git pull` and `git push` to update/post the project and his dependencies
+- Windows : run update.bat to update the app
diff --git a/conf/properties.json b/conf/properties.json
new file mode 100644
index 0000000000000000000000000000000000000000..d0372b37ced0c76d29147fe36fb5fbb70ad5d059
--- /dev/null
+++ b/conf/properties.json
@@ -0,0 +1,11 @@
+{
+    "services_alias": "rest[ENV]",
+    "web_server_name": "https://[hostname]:[PORT]/",
+    "proxy_url": "https://[hostname]:[PORT]/proxy[ENV]/proxy.php",
+    "version": "[VERSION]",
+	"build": "[BUILD]",
+    "status": "unstable",
+	"month_year": "[MONTH_YEAR]",
+    "application": "extraction",
+    "environment": "[ENV]"
+}
diff --git a/src/module_extraction/module/forms/extraction/extraction_extraction_extraction.js b/src/module_extraction/module/forms/extraction/extraction_extraction_extraction.js
index 2589e36082a4f0a4e83c27a9229e84018294ecc8..d83bebed77076de627a373d23da07dd8ebf5b03e 100755
--- a/src/module_extraction/module/forms/extraction/extraction_extraction_extraction.js
+++ b/src/module_extraction/module/forms/extraction/extraction_extraction_extraction.js
@@ -24,7 +24,7 @@ var constructor_form = function (scope, s_url) {
     //////////////////////////////////////////////////////////
     //Ne pas toucher
     console.log("Constructor");
-    
+
     oFormRequired.sUrl = s_url;
     oFormRequired.scope_ = scope;
     //console.log(scope);
@@ -36,8 +36,8 @@ var constructor_form = function (scope, s_url) {
     var oElemDefCt = formSrvc["getFormElementDefinition"]("id_conseil", envSrvc["sFormDefinitionName"], envSrvc["oFormDefinition"]);
     var oElemDefCom = formSrvc["getFormElementDefinition"]("id_com", envSrvc["sFormDefinitionName"], envSrvc["oFormDefinition"]);
     var oElemDefExtent = formSrvc["getFormElementDefinition"]("extent", envSrvc["sFormDefinitionName"], envSrvc["oFormDefinition"]);
-    
-    
+
+
     //Comportements différents selon le mode (insert, update, search, display) (GTF : accés uniquement au mode insert)
     //if (oFormRequired.scope_.sFormDefinitionName.indexOf("insert") > -1 || (oFormRequired.scope_.sFormDefinitionName.indexOf("update") > -1)) {
     oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".extent_method.selectedOption", function (value) {
@@ -69,7 +69,7 @@ var constructor_form = function (scope, s_url) {
                 oElemDefCt["visible"] = false;
                 oElemDefCom["visible"] = false;
             }
-            
+
         }
     }));
     //Evènement lorsqu'on choisie un CT
@@ -90,9 +90,9 @@ var constructor_form = function (scope, s_url) {
                     "collapseIcon": "glyphicon glyphicon-folder-open",
                     "highlightSelected": false,
                     "multiSelect": true});
-                scope.$applyAsync();   
+                scope.$applyAsync();
             });
-            
+
             getStatsTree(oFormRequired.scope_.oFormValues[oFormRequired.scope_.sFormDefinitionName]).then( function(aNodes){
                 var oTreeview = $("#statistique_9_1_treeview")["treeview"](true);
                 $("statistique_9_1_treeview")["treeview"](true);
@@ -107,10 +107,10 @@ var constructor_form = function (scope, s_url) {
                     "collapseIcon": "glyphicon glyphicon-folder-open",
                     "highlightSelected": false,
                     "multiSelect": true});
-                scope.$applyAsync();   
+                scope.$applyAsync();
             });
         }
-        
+
     }));
     //Evènement lorsqu'on choisie une commune
     oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".id_com.selectedOption", function (value) {
@@ -131,9 +131,9 @@ var constructor_form = function (scope, s_url) {
                     "highlightSelected": false,
                     "multiSelect": true});
                 scope.$applyAsync();
-                
+
             });
-            
+
             getStatsTree(oFormRequired.scope_.oFormValues[oFormRequired.scope_.sFormDefinitionName]).then( function(aNodes){
                 var oTreeview = $("#statistique_9_1_treeview")["treeview"](true);
                 $("statistique_9_1_treeview")["treeview"](true);
@@ -148,7 +148,7 @@ var constructor_form = function (scope, s_url) {
                     "collapseIcon": "glyphicon glyphicon-folder-open",
                     "highlightSelected": false,
                     "multiSelect": true});
-                scope.$applyAsync();   
+                scope.$applyAsync();
             });
         }
     }));
@@ -161,7 +161,7 @@ var constructor_form = function (scope, s_url) {
                 //console.log(aNodes);
                 //layers_9_1_treeview
                 var oTreeview = $("#layers_9_1_treeview")["treeview"](true);
-                //$("layers_9_1_treeview")["treeview"]({"data":aNodes});
+                $("layers_9_1_treeview")["treeview"]({"data":aNodes});
                 //On recréer un arbre
                 oTreeview["init"]({"data": aNodes,
                     "onNodeChecked": oTreeview.options.onNodeChecked,
@@ -174,9 +174,9 @@ var constructor_form = function (scope, s_url) {
                     "highlightSelected": false,
                     "multiSelect": true});
                 scope.$applyAsync();
-                
+
             });
-            
+
             getStatsTree(oFormRequired.scope_.oFormValues[oFormRequired.scope_.sFormDefinitionName]).then( function(aNodes){
                 var oTreeview = $("#statistique_9_1_treeview")["treeview"](true);
                 $("statistique_9_1_treeview")["treeview"](true);
@@ -191,10 +191,10 @@ var constructor_form = function (scope, s_url) {
                     "collapseIcon": "glyphicon glyphicon-folder-open",
                     "highlightSelected": false,
                     "multiSelect": true});
-                scope.$applyAsync();   
+                scope.$applyAsync();
             });
-            
-            
+
+
         }
     }));
 };
@@ -210,8 +210,8 @@ function getLayerTree(oFormValues) {
     var $q = angular.element(vitisApp.appHtmlFormDrtv).injector().get(["$q"]);
     //
     $log.info("getLayerTree");
-    // Charge la liste des couches.    
-    
+    // Charge la liste des couches.
+
     var deferred = $q.defer();
     var promise = deferred.promise;
     if (oFormValues.extent_method.selectedOption["value"] != "") {
@@ -228,7 +228,7 @@ function getLayerTree(oFormValues) {
                     var aLayers = response["data"]["layers"];
                     var aNodes = [];
                     var stats = true;
-                    
+
                     if (typeof(aLayers) != "undefined") {
                         var aCategories = Object.keys(aLayers);
                         for (var i in aCategories) {
@@ -247,7 +247,7 @@ function getLayerTree(oFormValues) {
                             stats = true;
                         }
                     }
-                    
+
                     this["setTreeviewNodesState"] = function (aNodes) {
                         for (var i in aNodes) {
                             if (typeof (aNodes[i]["nodes"]) != "undefined")
@@ -307,8 +307,8 @@ function getStatsTree(oFormValues) {
     var $q = angular.element(vitisApp.appHtmlFormDrtv).injector().get(["$q"]);
     //
     $log.info("getLayerTree");
-    // Charge la liste des couches.    
-    
+    // Charge la liste des couches.
+
     var deferred = $q.defer();
     var promise = deferred.promise;
     if (oFormValues.extent_method.selectedOption["value"] != "") {
@@ -325,7 +325,7 @@ function getStatsTree(oFormValues) {
                     var aLayers = response["data"]["layers"];
                     var aNodes = [];
                     var stats = false;
-                    
+
                     if (typeof(aLayers) != "undefined") {
                         var aCategories = Object.keys(aLayers);
                         for (var i in aCategories) {
@@ -344,7 +344,7 @@ function getStatsTree(oFormValues) {
                             stats = false;
                         }
                     }
-                    
+
                     this["setTreeviewNodesState"] = function (aNodes) {
                         for (var i in aNodes) {
                             if (typeof (aNodes[i]["nodes"]) != "undefined")
@@ -403,7 +403,7 @@ function getUrlParams() {
     var sColumn = "";
     var aValue = [];
     var aValeur = [];
-    
+
     if (oFormValues.extent_method.selectedOption["value"] == "id_conseil")
     {
         sTable = "ct";
@@ -418,7 +418,7 @@ function getUrlParams() {
         sCompare_operator = "IN";
         aValue = oFormValues.id_com.selectedOption;
     }
-    
+
     if (oFormValues.extent_method.selectedOption["value"] == "extent")
     {
         sTable = "ct";
@@ -431,8 +431,8 @@ function getUrlParams() {
     {
         if(aValue)
         {
-            for (var i = 0; i < aValue.length; i++) 
-            {     
+            for (var i = 0; i < aValue.length; i++)
+            {
                 //Si c'est une sélection vide
                 if(aValue[i]["value"] == "")
                 {
@@ -458,7 +458,7 @@ function getUrlParams() {
             aValeur[0] = "-1";
         }
     }
-    
+
     var oUrlParams = {
         "schema": propertiesSrvc["schema_extraction"],
         "table": sTable,
@@ -479,22 +479,22 @@ function getUrlParams() {
  */
 var destructor_form = function () {
     console.log("Destructor");
-    
+
     for (var i = 0; i < oFormRequired.toDestructor.length; i++) {
         oFormRequired.toDestructor[i] = undefined;
         delete oFormRequired.toDestructor[i];
     }
-    
+
     //supprimer la balise script du js pour pouvoir le recharger si on reviens sur le formulaire plus tard
     angular.element('[src="' + oFormRequired.sUrl + '?version=' + oFormRequired.scope_["oProperties"]["build"] + '"]').remove();
-    
+
     oFormRequired = undefined;
     delete oFormRequired;
-    
+
     constructor_form = undefined;
     delete constructor_form;
     destructor_form = undefined;
     delete destructor_form;
 };
 
-/**********************************************************************************/
\ No newline at end of file
+/**********************************************************************************/
diff --git a/src/module_extraction/module/forms/extraction_depot/extraction_depot_extraction_extraction_depot.js b/src/module_extraction/module/forms/extraction_depot/extraction_depot_extraction_extraction_depot.js
index b0b587e3d9efe94d43508b605c639499751b96ac..3f2fd830bdda95ed2619d9a2e8aea9418090dd04 100755
--- a/src/module_extraction/module/forms/extraction_depot/extraction_depot_extraction_extraction_depot.js
+++ b/src/module_extraction/module/forms/extraction_depot/extraction_depot_extraction_extraction_depot.js
@@ -24,7 +24,7 @@ var constructor_form = function (scope, s_url) {
     //////////////////////////////////////////////////////////
     //Ne pas toucher
     console.log("Constructor");
-    
+
     oFormRequired.sUrl = s_url;
     oFormRequired.scope_ = scope;
     //console.log(scope);
@@ -33,11 +33,11 @@ var constructor_form = function (scope, s_url) {
     var envSrvc = angular.element(vitisApp.appWorkspaceListDrtv).injector().get(["envSrvc"]);
     var formSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["formSrvc"]);
     var propertiesSrvc = angular.element(vitisApp.appMainDrtv).injector().get(["propertiesSrvc"]);
-    
+
     /*oFormRequired.toDestructor.push(oFormRequired.scope_.$watch("oFormValues." + oFormRequired.scope_.sFormDefinitionName + ".btn_refresh_treeview", function (value) {
         console.log("DJFHVHJCHSJCJH");
     }*/
-    
+
     /**
      * loadTreeview function.
      * Crée le treeview des fichiers du projet fme.
@@ -46,7 +46,7 @@ var constructor_form = function (scope, s_url) {
         var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
         //
         $log.info("loadTreeviewDepot");
-        
+
         // Charge l'arborescence des logs.
         ajaxRequest({
             "method": "GET",
@@ -59,7 +59,7 @@ var constructor_form = function (scope, s_url) {
                     scope["aSelectedWorkspaceFile"] = [];
                     scope["aTreeviewLogs"] = data;
                     // Crée l'arborescence dans l'élément.
-                    
+
                     for (var i in response["data"]["content"]) {
                         var aNode = {"text": response["data"]["content"][i]["filename"].split("/").pop(), "nodes": []}
                         for (var j in response["data"]["content"][i]["content"]) {
@@ -67,7 +67,7 @@ var constructor_form = function (scope, s_url) {
                         }
                         aNodes.push(aNode);
                     }
-                    
+
                     $("#Element_0_2_1_treeview")["treeview"]({
                         "showBorder": false,
                         "expandIcon": "glyphicon glyphicon-folder-close",
@@ -81,16 +81,16 @@ var constructor_form = function (scope, s_url) {
             }
         });
     };
-    
+
     scope["deleteFileDepot"] = function () {
         var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
         //
         $log.info("deleteFileDepot");
-        
+
         var aSelectedNode = $("#Element_0_2_1_treeview")["treeview"]('getSelected')
-        
+
         if (aSelectedNode.length > 0)
-        {       
+        {
             var aNodeParent = $("#Element_0_2_1_treeview")["treeview"]('getNode', aSelectedNode[0]["parentId"]);
             ajaxRequest({
                 "method": "DELETES",
@@ -117,18 +117,19 @@ var constructor_form = function (scope, s_url) {
             scope.$root["modalWindow"]("dialog", "EXTRACTION_DEPORT_DELETE_NO_SELECTED", oOptions);
             //$('#myModal').modal('hide');
         }
-        
+
     }
     scope["loadTreeviewDepot"]();
-    
+
     scope["downloadFileDepot"] = function () {
         var $log = angular.element(vitisApp.appMainDrtv).injector().get(["$log"]);
         //
         $log.info("downloadFileDepot");
-        
+
         var aSelectedNode = $("#Element_0_2_1_treeview")["treeview"]('getSelected');
         var sFileName = aSelectedNode[0]["text"];
         var aNodeParent = $("#Element_0_2_1_treeview")["treeview"]('getNode', aSelectedNode[0]["parentId"]);
+
         if (aSelectedNode[0]["parentId"] == "")
         {
             if (sFileName != "")
@@ -162,7 +163,7 @@ var constructor_form = function (scope, s_url) {
         }
     }
     //var iMaxUploadFileSize = parseInt(propertiesSrvc["max_upload_file_size"]);
-    
+
     /**
      * beforeProjectDirectory function.
      * Traitement avant l'envoi du formulaire de la section "Répertoire Projet" (publication > Projet FME).
@@ -205,7 +206,7 @@ var constructor_form = function (scope, s_url) {
         //
         return promise;
     };
-    
+
     /**
      * afterProjectDirectory function.
      * Actions à effectuer après l'upload d'un fichier dans le répertoire d'un projet fme.
@@ -232,22 +233,22 @@ var constructor_form = function (scope, s_url) {
  */
 var destructor_form = function () {
     console.log("Destructor");
-    
+
     for (var i = 0; i < oFormRequired.toDestructor.length; i++) {
         oFormRequired.toDestructor[i] = undefined;
         delete oFormRequired.toDestructor[i];
     }
-    
+
     //supprimer la balise script du js pour pouvoir le recharger si on reviens sur le formulaire plus tard
     angular.element('[src="' + oFormRequired.sUrl + '?version=' + oFormRequired.scope_["oProperties"]["build"] + '"]').remove();
-    
+
     oFormRequired = undefined;
     delete oFormRequired;
-    
+
     constructor_form = undefined;
     delete constructor_form;
     destructor_form = undefined;
     delete destructor_form;
 };
 
-/**********************************************************************************/
\ No newline at end of file
+/**********************************************************************************/
diff --git a/src/module_extraction/module/javascript/script_module.js b/src/module_extraction/module/javascript/script_module.js
index db7ca4c3c78f80cf00ae18e3f5255f805a0246e2..512ddc9aa81c30066e88837b1822c7ce22144fe1 100755
--- a/src/module_extraction/module/javascript/script_module.js
+++ b/src/module_extraction/module/javascript/script_module.js
@@ -45,7 +45,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
             "sUrl": "modules/extraction/forms/" + envSrvc["oSelectedMode"]["mode_id"] + "/" + sTable + "_" + envSrvc["oSectionForm"][sTable]["sections"][envSrvc["oSectionForm"][sTable]["iSelectedSectionIndex"]]["name"] + ".json"
         };
     };
-    
+
     /**
      * initExtractionExtractionForm function.
      * Traitements avant l'affichage du formulaire de l'onglet "Extraction".
@@ -95,7 +95,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
             }
         });
     };
-    
+
     /**
      * getExtractionLayersTree function.
      * Retourne l'arborescence pour le champ treeview "layers".
@@ -139,7 +139,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
                             stats = true;
                         }
                     }
-                    
+
                     this["setTreeviewNodesState"] = function (aNodes) {
                         for (var i in aNodes) {
                             if (typeof (aNodes[i]["nodes"]) != "undefined")
@@ -158,7 +158,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
                         }
                     }
                     this["setTreeviewNodesState"](aNodes);
-                    
+
                     deferred.resolve(aNodes);
                 } else {
                     //
@@ -174,8 +174,8 @@ vitisApp.on('appMainDrtvLoaded', function () {
         });
         return promise;
     };
-    
-    
+
+
     /**
      * getExtractionLayersTree function.
      * Retourne l'arborescence pour le champ treeview "layers".
@@ -219,7 +219,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
                             stats = false;
                         }
                     }
-                    
+
                     this["setTreeviewNodesState"] = function (aNodes) {
                         for (var i in aNodes) {
                             if (typeof (aNodes[i]["nodes"]) != "undefined")
@@ -238,7 +238,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
                         }
                     }
                     this["setTreeviewNodesState"](aNodes);
-                    
+
                     deferred.resolve(aNodes);
                 } else {
                     //
@@ -254,7 +254,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
         });
         return promise;
     };
-    
+
     /**
      * appExtractionLayersColumn directive.
      * Mise en forme de la colonne "layers" dans la liste de l'onglet "Extraction".
@@ -305,7 +305,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
         }
     };
     vitisApp["compileProvider"].directive('appExtractionLayersColumn', vitisApp.appExtractionLayersColumnDrtv);
-    
+
     /**
      * appExtractionRefUnusedAttributesColumn directive.
      * Mise en forme de la colonne "unused_attributes" dans la liste de l'onglet "Extraction".
@@ -356,10 +356,10 @@ vitisApp.on('appMainDrtvLoaded', function () {
         }
     };
     vitisApp["compileProvider"].directive('appExtractionRefUnusedAttributesColumn', vitisApp.appExtractionRefUnusedAttributesColumnDrtv);
-    
+
     angular.element(vitisApp.appMainDrtv).scope()["showModalSignUp"] = function () {
         $("#modal_sign_up").modal('open');
-        
+
         var oFormValues = {};
         oFormValues["search"] = {};
         ajaxRequest({
@@ -367,7 +367,7 @@ vitisApp.on('appMainDrtvLoaded', function () {
             'url': propertiesSrvc["web_server_name"] + '/' + propertiesSrvc["application"] + "/modules/extraction/forms/sign_up.json",
             'success': function (response) {
                 hideAjaxLoader();
-                
+
                 var oFormReaderScope = angular.element($("#modal_sign_up_form_container").children()).scope();
                 oFormReaderScope.$evalAsync(function () {
                     oFormReaderScope['ctrl']['setDefinitionName']("search");
@@ -375,11 +375,11 @@ vitisApp.on('appMainDrtvLoaded', function () {
                     oFormReaderScope['ctrl']['setFormDefinition'](response["data"]);
                     oFormReaderScope['ctrl']['loadForm']();
                 });
-                
+
                 $this.$timeout_(function () {
                     //Materialize.updateTextFields();
                     $(".checkbox").removeClass("checkbox checkbox-margin");
-                    
+
                     //$this.cssSelectFormDefinitionListener(oFormReaderScope);
                 }, 100);
             },
@@ -409,4 +409,4 @@ vitisApp.on('appInitCtrlLoaded', function () {
         $translatePartialLoader["addPart"]("modules/extraction/lang");
         $translate["refresh"]();
     });
-});
\ No newline at end of file
+});
diff --git a/src/module_extraction/module/lang/lang-fr.json b/src/module_extraction/module/lang/lang-fr.json
index 883753687e6651af63d7cce0c7dfbbf188fa1a91..792ea68fc746e0212183148b9bce44d9e3013326 100755
--- a/src/module_extraction/module/lang/lang-fr.json
+++ b/src/module_extraction/module/lang/lang-fr.json
@@ -120,4 +120,4 @@
 		"EXTRACTION_EXTRACTION_EXTRACTION_FORM_SCHEMA_CONSTRAINT" : "Schéma des contraintes",
 		"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_SIG" : "Extensions SIG (séparées par |)",
 		"CONFIGURATION_VITIS_CONFIGURATION_EXTRACTIONCONFIG_FORM_DAO" : "Extensions DAO (séparées par |)"
-}
\ No newline at end of file
+}
diff --git a/src/module_extraction/web_service/conf/properties.inc b/src/module_extraction/web_service/conf/properties.inc
index 62a488a96ebc39a1632bb9a4b749d226d81dd6c7..ff2e872e55038e236e8d075f3d49e1edcfc40c6e 100755
--- a/src/module_extraction/web_service/conf/properties.inc
+++ b/src/module_extraction/web_service/conf/properties.inc
@@ -4,4 +4,4 @@ $properties['color_no_mutualized'] = 'red';
 $properties['sig'] = '*.shp';
 $properties['dao'] = '*.dao';
 $properties['shared_dir'] = 'D:/serveur/gtf/vas/shared';
-?>
\ No newline at end of file
+?>
diff --git a/src/module_extraction/web_service/conf/version.inc b/src/module_extraction/web_service/conf/version.inc
index 42fa9895a17ed042ce569792ff1b43fcd6d3d2ff..a8238eb5f7c4c4c6dd3aa8ac98592bf9ac868e5d 100755
--- a/src/module_extraction/web_service/conf/version.inc
+++ b/src/module_extraction/web_service/conf/version.inc
@@ -4,4 +4,4 @@ define ("VM_VERSION", "20XX.XX.XX");
 define ("VM_BUILD", "XXXXX");
 define ("VM_MONTH_YEAR", "XX_20XX");
 define ("VM_STATUS", "STABLE");
-?>
\ No newline at end of file
+?>
diff --git a/src/module_extraction/web_service/ws/Coordsys.class.inc b/src/module_extraction/web_service/ws/Coordsys.class.inc
index 7e76be5b1486ecf62b8a03fe5ce65bba4de05df2..0f7552e3a60d24cd303b397d6e221b0d45e12afd 100755
--- a/src/module_extraction/web_service/ws/Coordsys.class.inc
+++ b/src/module_extraction/web_service/ws/Coordsys.class.inc
@@ -12,7 +12,7 @@ require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection
  * 	\brief This file contains the Coordsys php class
  *
  * This class defines operation for one Coordsys
- * 
+ *
  */
 class Coordsys extends ExtractionExtraction {
 
@@ -31,7 +31,7 @@ class Coordsys extends ExtractionExtraction {
     }
 
 /**
-     * @SWG\Get(path="/coordsyss/{id_coordsys}", 
+     * @SWG\Get(path="/coordsyss/{id_coordsys}",
      *   tags={"Coordsyss"},
      *   summary="Get Coordsys",
      *   description="Request to get Coordsys by id",
@@ -88,4 +88,4 @@ class Coordsys extends ExtractionExtraction {
 
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/src/module_extraction/web_service/ws/Coordsyss.class.inc b/src/module_extraction/web_service/ws/Coordsyss.class.inc
index 2ff9940840a6c6c2a87cf03bbb871a550f48f449..7dbced69f03350c8ce785571bc5211f28ba76e38 100755
--- a/src/module_extraction/web_service/ws/Coordsyss.class.inc
+++ b/src/module_extraction/web_service/ws/Coordsyss.class.inc
@@ -9,7 +9,7 @@
  * 	\brief This file contains the Coordsyss php class
  *
  * This class defines Rest Api to Vitis Coordsyss
- * 
+ *
  */
 require_once __DIR__ . '/ExtractionExtraction.class.inc';
 require_once 'Coordsys.class.inc';
@@ -191,7 +191,7 @@ class Coordsyss extends ExtractionExtraction {
      */
     function PUT() {
         $aReturn = $this->genericPut($this->aProperties['schema_extraction'], 'rt_coordsys', 'coordsys_id');
-        
+
         return $aReturn['sMessage'];
     }
 
@@ -262,7 +262,7 @@ class Coordsyss extends ExtractionExtraction {
         return $aReturn['sMessage'];
     }
 
-	
+
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/src/module_extraction/web_service/ws/Extraction.class.inc b/src/module_extraction/web_service/ws/Extraction.class.inc
index f1c76f9da80592270eb44d1dcf5a400fcd8fd4b7..8798bd3b7836fd2d7da3d280e92edc0df6267585 100755
--- a/src/module_extraction/web_service/ws/Extraction.class.inc
+++ b/src/module_extraction/web_service/ws/Extraction.class.inc
@@ -1,7 +1,7 @@
 <?php
 
 require_once __DIR__ . '/ExtractionExtraction.class.inc';
-require_once __DIR__. '/../../class/vitis_lib/Connection.class.inc';
+require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection.class.inc';
 
 /**
  * \file Extraction.class.inc
@@ -9,13 +9,12 @@ require_once __DIR__. '/../../class/vitis_lib/Connection.class.inc';
  *
  * \author WAB <support.wab@veremes.com>.
  *
- * \brief This file contains the Extraction php class
+ * 	\brief This file contains the Extraction php class
  *
  * This class defines operation for one Extraction
  *
  */
-class Extraction extends ExtractionExtraction
-{
+class Extraction extends ExtractionExtraction {
 
     public $oError;
 
diff --git a/src/module_extraction/web_service/ws/ExtractionExtraction.class.inc b/src/module_extraction/web_service/ws/ExtractionExtraction.class.inc
index 770729dd15262e596170ea80a2079aac314417a4..a78555e5858c536431ffc68a6faf2e67ac9ff6ac 100755
--- a/src/module_extraction/web_service/ws/ExtractionExtraction.class.inc
+++ b/src/module_extraction/web_service/ws/ExtractionExtraction.class.inc
@@ -1,13 +1,17 @@
 <?php
-    require_once __DIR__ . "/../../class/vitis_lib/DbClass.class.inc";
-    require_once __DIR__ . '/../vitis/Vitis.class.inc';
+
+require_once dirname($_SERVER['SCRIPT_FILENAME']) . "/class/vitis_lib/DbClass.class.inc";
+require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/ws/vitis/Vitis.class.inc';
 require_once 'vmlib/logUtil.inc';
 
-class ExtractionExtraction extends Vitis
-{
+class ExtractionExtraction extends Vitis {
 
     //Chemin du fichier de ressources contenant les requêtes SQL
-    public $sRessourcesFile = 'ws/extraction/ExtractionExtraction.class.sql.inc';
+    var $sRessourcesFile = 'ws/extraction/ExtractionExtraction.class.sql.inc';
+
+    function __construct($aPath, $aValues, $properties, $bShortcut) {
+        parent::__construct($aPath, $aValues, $properties, $bShortcut);
+    }
 
     /**
      * Upload un document dans le ws_data du module Extraction.
diff --git a/src/module_extraction/web_service/ws/ExtractionExtraction.class.sql.inc b/src/module_extraction/web_service/ws/ExtractionExtraction.class.sql.inc
index bf92c6ac3a1a2b41d71419a93152f5a7c397adfd..642c933e42ad0bf44acc0083aa4e49e817bb8453 100755
--- a/src/module_extraction/web_service/ws/ExtractionExtraction.class.sql.inc
+++ b/src/module_extraction/web_service/ws/ExtractionExtraction.class.sql.inc
@@ -19,4 +19,4 @@ $aSql['getRtLayer'] = 'SELECT distinct layer_id, layer, category, mutualized, st
 $aSql['getUserGroups'] = 'SELECT name FROM [schema_framework]."group",[schema_framework].user_group WHERE "group".group_id = user_group.group_id AND user_group.user_id = [user_id]';
 
 $aSql['getFormat'] = 'SELECT id_format FROM q_control."format" WHERE "format".extensions like [extension]';
-?>
\ No newline at end of file
+?>
diff --git a/src/module_extraction/web_service/ws/Extractions.class.inc b/src/module_extraction/web_service/ws/Extractions.class.inc
index 20ba20bbbbfcc4e5063383fb848f243897d150ff..3a590917be635ef17031eb28854294845989e607 100755
--- a/src/module_extraction/web_service/ws/Extractions.class.inc
+++ b/src/module_extraction/web_service/ws/Extractions.class.inc
@@ -13,8 +13,7 @@
  */
 require_once __DIR__ . '/ExtractionExtraction.class.inc';
 require_once 'Extraction.class.inc';
-
-require_once __DIR__ . '/../../class/wab_lib/BusinessObject.class.inc';
+require_once(dirname($_SERVER['SCRIPT_FILENAME']) . '/class/wab_lib/BusinessObject.class.inc');
 
 class Extractions extends ExtractionExtraction
 {
@@ -363,8 +362,7 @@ class Extractions extends ExtractionExtraction
      * delete extractions
      * @return id of extractions deleted or error object if a extractions is not deleted
      */
-    public function DELETE()
-    {
+    function DELETE() {
         $aReturn = $this->genericDelete($this->aProperties['schema_extraction'], 'extraction', 'bo_id');
         return $aReturn['sMessage'];
     }
diff --git a/src/module_extraction/web_service/ws/Format.class.inc b/src/module_extraction/web_service/ws/Format.class.inc
index 6c9d733bf2f890a5ff4785bb6ca46b57949f2dc3..6bcb455fb7006f40cc38c40c77319653caa509db 100755
--- a/src/module_extraction/web_service/ws/Format.class.inc
+++ b/src/module_extraction/web_service/ws/Format.class.inc
@@ -12,7 +12,7 @@ require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection
  * 	\brief This file contains the Format php class
  *
  * This class defines operation for one Format
- * 
+ *
  */
 class Format extends ExtractionExtraction {
 
@@ -31,7 +31,7 @@ class Format extends ExtractionExtraction {
     }
 
 /**
-     * @SWG\Get(path="/formats/{id_format}", 
+     * @SWG\Get(path="/formats/{id_format}",
      *   tags={"Formats"},
      *   summary="Get Format",
      *   description="Request to get Format by id",
@@ -88,4 +88,4 @@ class Format extends ExtractionExtraction {
 
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/src/module_extraction/web_service/ws/Formats.class.inc b/src/module_extraction/web_service/ws/Formats.class.inc
index 141f0fd44f42b395c2af3580cea2f783aa107cfc..4a662f060c0b780776dcd25625d8e21530a396b3 100755
--- a/src/module_extraction/web_service/ws/Formats.class.inc
+++ b/src/module_extraction/web_service/ws/Formats.class.inc
@@ -9,7 +9,7 @@
  * 	\brief This file contains the Formats php class
  *
  * This class defines Rest Api to Vitis Formats
- * 
+ *
  */
 require_once __DIR__ . '/ExtractionExtraction.class.inc';
 require_once 'Format.class.inc';
@@ -124,7 +124,7 @@ class Formats extends ExtractionExtraction {
         return $sMessage;
     }
 
-/**
+    /**
      * @SWG\Post(path="/formats",
      *   tags={"Formats"},
      *   summary="Add format",
@@ -152,11 +152,11 @@ class Formats extends ExtractionExtraction {
      */
     function POST() {
         $aReturn = $this->genericPost($this->aProperties['schema_extraction'], 'rt_format', '', 'format_id');
-        
+
         return $aReturn['sMessage'];
     }
 
-/**
+    /**
      * @SWG\Put(path="/formats/{id_format}",
      *   tags={"Formats"},
      *   summary="update Formats",
@@ -192,11 +192,11 @@ class Formats extends ExtractionExtraction {
      */
     function PUT() {
         $aReturn = $this->genericPut($this->aProperties['schema_extraction'], 'rt_format', 'format_id');
-        
+
         return $aReturn['sMessage'];
     }
 
-/**
+    /**
      * @SWG\Delete(path="/formats",
      *   tags={"Formats"},
      *   summary="delete Formats",
@@ -263,7 +263,7 @@ class Formats extends ExtractionExtraction {
         return $aReturn['sMessage'];
     }
 
-	
+
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/src/module_extraction/web_service/ws/Layer.class.inc b/src/module_extraction/web_service/ws/Layer.class.inc
index af7d4af185880fac5854217b8020fe2792193245..93afab103abfbac077cc6b82513424b1f6ee5cb9 100755
--- a/src/module_extraction/web_service/ws/Layer.class.inc
+++ b/src/module_extraction/web_service/ws/Layer.class.inc
@@ -12,7 +12,7 @@ require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection
  * 	\brief This file contains the Layer php class
  *
  * This class defines operation for one Layer
- * 
+ *
  */
 class Layer extends ExtractionExtraction {
 
@@ -31,7 +31,7 @@ class Layer extends ExtractionExtraction {
     }
 
 /**
-     * @SWG\Get(path="/layers/{id_layer}", 
+     * @SWG\Get(path="/layers/{id_layer}",
      *   tags={"Layers"},
      *   summary="Get Layer",
      *   description="Request to get Layer by id",
@@ -74,7 +74,7 @@ class Layer extends ExtractionExtraction {
         $this->aFields = $this->getFields($this->aProperties['schema_extraction'], "rt_layer", "layer_id");
     }
 
-/**
+    /**
      * delete a Point_situation
      */
     function DELETE() {
@@ -88,4 +88,4 @@ class Layer extends ExtractionExtraction {
 
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/src/module_extraction/web_service/ws/Layers.class.inc b/src/module_extraction/web_service/ws/Layers.class.inc
index 0cdb17b292f172ec2958a222ec0b3ca17f69b23c..a1b0d5be81ae791b8f11bb005c40b12353f19074 100755
--- a/src/module_extraction/web_service/ws/Layers.class.inc
+++ b/src/module_extraction/web_service/ws/Layers.class.inc
@@ -9,7 +9,7 @@
  * 	\brief This file contains the Layers php class
  *
  * This class defines Rest Api to Vitis Layers
- * 
+ *
  */
 require_once __DIR__ . '/ExtractionExtraction.class.inc';
 require_once 'Layer.class.inc';
@@ -124,7 +124,7 @@ class Layers extends ExtractionExtraction {
         return $sMessage;
     }
 
-/**
+    /**
      * @SWG\Post(path="/layers",
      *   tags={"Layers"},
      *   summary="Add layer",
@@ -152,11 +152,11 @@ class Layers extends ExtractionExtraction {
      */
     function POST() {
         $aReturn = $this->genericPost($this->aProperties['schema_extraction'], 'rt_layer', '', 'layer_id');
-        
+
         return $aReturn['sMessage'];
     }
 
-/**
+    /**
      * @SWG\Put(path="/layers/{id_layer}",
      *   tags={"Layers"},
      *   summary="update Layers",
@@ -192,11 +192,11 @@ class Layers extends ExtractionExtraction {
      */
     function PUT() {
         $aReturn = $this->genericPut($this->aProperties['schema_extraction'], 'rt_layer', 'layer_id');
-        
+
         return $aReturn['sMessage'];
     }
 
-/**
+    /**
      * @SWG\Delete(path="/layers",
      *   tags={"Layers"},
      *   summary="delete Layers",
@@ -263,7 +263,7 @@ class Layers extends ExtractionExtraction {
         return $aReturn['sMessage'];
     }
 
-	
+
 }
 
-?>
\ No newline at end of file
+?>
diff --git a/src/vitis/client/javascript/app/controllers/htmlFormCtrl.js b/src/vitis/client/javascript/app/controllers/htmlFormCtrl.js
old mode 100644
new mode 100755
diff --git a/src/vitis/client/javascript/app/controllers/initCtrl.js b/src/vitis/client/javascript/app/controllers/initCtrl.js
old mode 100644
new mode 100755
index 70431eefb04a8ac083d1575ba2a078ca0641527f..f157f7a6c2961d155e53840d640fc1941124d740
--- a/src/vitis/client/javascript/app/controllers/initCtrl.js
+++ b/src/vitis/client/javascript/app/controllers/initCtrl.js
@@ -6,7 +6,7 @@ goog.require("vitis.modules.main");
 
 /**
  * Init Controller.
- * 
+ *
  * @param {angular.$scope} $scope Angular scope.
  * @param {angular.$log} $log Angular log service.
  * @param {service} $q Angular q service.
@@ -205,7 +205,7 @@ vitisApp.initCtrl = function ($scope, $log, $q, envSrvc, sessionSrvc, properties
                                         document.title = propertiesSrvc["application_title"];
                                     }
                                 }
-                                // ajoute une favicon 
+                                // ajoute une favicon
                                 if (goog.isDefAndNotNull(propertiesSrvc["use_favicon"]) && goog.isDefAndNotNull(propertiesSrvc["favicon_path"])) {
                                     if (propertiesSrvc["use_favicon"] == true) {
                                         var link = document.createElement('link');
@@ -253,7 +253,7 @@ vitisApp.initCtrl = function ($scope, $log, $q, envSrvc, sessionSrvc, properties
                         document.title = propertiesSrvc["application_title"];
                     }
                 }
-                // ajoute une favicon 
+                // ajoute une favicon
                 if (goog.isDefAndNotNull(propertiesSrvc["use_favicon"]) && goog.isDefAndNotNull(propertiesSrvc["favicon_path"])) {
                     if (propertiesSrvc["use_favicon"] == true) {
                         var link = document.createElement('link');
@@ -276,4 +276,4 @@ vitisApp.initCtrl = function ($scope, $log, $q, envSrvc, sessionSrvc, properties
         }
     });
 };
-vitisApp.module.controller("initCtrl", vitisApp.initCtrl);
\ No newline at end of file
+vitisApp.module.controller("initCtrl", vitisApp.initCtrl);
diff --git a/src/vitis/client/javascript/app/controllers/loginCtrl.js b/src/vitis/client/javascript/app/controllers/loginCtrl.js
index a5456b97fd5b71d25c13cb4c0405b816fa331263..32180d446750bfa2f7341c4cbda9c44994adb7f0 100644
--- a/src/vitis/client/javascript/app/controllers/loginCtrl.js
+++ b/src/vitis/client/javascript/app/controllers/loginCtrl.js
@@ -16,7 +16,7 @@ goog.require("vitis.modules.main");
  * @param {service} envSrvc Paramètres d'environnement.
  * @param {service} propertiesSrvc Paramètres des properties.
  * @param {service} userSrvc Paramètres de l'utilisateur.
- * @param {angular.$templateRequest} $templateRequest 
+ * @param {angular.$templateRequest} $templateRequest
  * @param {angular.$compile} $compile
  * @param {service} formSrvc Service de gestion des formulaires.
  * @ngInject
@@ -107,7 +107,7 @@ vitisApp.loginCtrl = function ($scope, $translate, $rootScope, $q, sessionSrvc,
      $scope["fpwd_enabled"] = false;
      }
      }
-     
+
      $scope["sign_up_enabled"] = false;
      if (goog.isDefAndNotNull(propertiesSrvc["sign_up"])) {
      if (propertiesSrvc["sign_up"] === "enabled") {
@@ -201,7 +201,7 @@ vitisApp.loginCtrl = function ($scope, $translate, $rootScope, $q, sessionSrvc,
         /*var test = grecaptcha.render("captcha", {
          'sitekey': "6LdWLR8UAAAAAExA8zTXKFIsIwhacAJw1tdpuFw1"
          });
-         
+
          console.log(test);*/
     };
 
diff --git a/src/vitis/client/javascript/app/script_client.js b/src/vitis/client/javascript/app/script_client.js
index 02bda1b163d823f778c284e186dd91a290c803f2..5dc858b58145b6a4b0812edbee00032e2eb53f19 100644
--- a/src/vitis/client/javascript/app/script_client.js
+++ b/src/vitis/client/javascript/app/script_client.js
@@ -889,7 +889,7 @@ vitisApp.on('appInitCtrlLoaded', function () {
                     /*
                     oFormElement["comparator"]["value"] = sValue;
                     oFilter["operators"].push(oFormElement["comparator"]);
-                    
+
                      for (var j = 0; j < oFormElement["comparator"].length; j++) {
                      var sFormElement = "";
                      if (goog.isDefAndNotNull(oFormElement["attrToCompare"])) {
@@ -1725,7 +1725,7 @@ vitisApp.on('appInitCtrlLoaded', function () {
         }
     });
     vitisApp.module.directive("appHideColumn", vitisApp.appHideColumn);
-    
+
     /**
      * addAjaxLoaderToElement function.
      * Ajoute un loader Ajax à côté d'un élément HTML.
@@ -1740,7 +1740,7 @@ vitisApp.on('appInitCtrlLoaded', function () {
             oElem.parentNode.appendChild(oAjaxLoaderElem);
         }
     };
-    
+
     /**
      * removeAjaxLoaderFromElement function.
      * Supprime un loader Ajax placé à côté d'un élément HTML.
diff --git a/src/vitis/client/javascript/externs/formReader/formReaderCtrl.js b/src/vitis/client/javascript/externs/formReader/formReaderCtrl.js
old mode 100644
new mode 100755
diff --git a/src/vitis/client/lang/lang-fr.json b/src/vitis/client/lang/lang-fr.json
index 7dfe445bb0d0440f1fc6b9a0b41d979c21b9a308..2dd38a78a2e5fdd95fa98b833c2898c31b4a6961 100644
--- a/src/vitis/client/lang/lang-fr.json
+++ b/src/vitis/client/lang/lang-fr.json
@@ -99,7 +99,7 @@
     "FORM_FORGOTTEN_PASSWORD_SEND": "Envoi",
     "FORM_EXPORT_TITLE": "Export ",
     "FORM_BODY_EXPORT_FILENAME": "Nom du fichier :",
-    "FORM_BUTTON_EXPORT_FILENAME": "Exporter ", 
+    "FORM_BUTTON_EXPORT_FILENAME": "Exporter ",
     "FORM-BODY-NB-LINE-EXPORT": "Nombres de lignes à exporter (si 0 exportation de toutes les données ):",
     "MODAL_FORGOTTEN_PASSWORD_TITLE": "Demande de récupération du mot de passe",
     "MODAL_SIGN_UP_TITLE": "Demande d'inscription",
diff --git a/src/vitis/client/less/htmlForm.less b/src/vitis/client/less/htmlForm.less
index 99e18c281d2a56bae257aa96f5758214cc3b46c9..853d3e88f330d328a6df17e2756c62fafadc76cb 100755
--- a/src/vitis/client/less/htmlForm.less
+++ b/src/vitis/client/less/htmlForm.less
@@ -13,7 +13,7 @@ form select[multiple] {
 
 form .btn-group {
     display: table;
-}        
+}
 
 .form-label {
     padding-top: 0;
@@ -64,7 +64,7 @@ form .btn-group {
     display: table;
     height: auto !important;
     line-height: 1 !important;
-    margin-bottom: 0.5em;        
+    margin-bottom: 0.5em;
 }
 
 // Bootstrap
@@ -413,7 +413,7 @@ form .checkbox {
     -moz-border-left-colors: none;
     -moz-border-right-colors: none;
     -moz-border-top-colors: none;
-}        
+}
 
 .ui-grid-form-field-header {
     font-family: arial;
@@ -461,7 +461,7 @@ form .checkbox {
 }
 
 .ui-grid-form-field-header-search-form {
-    display: none; 
+    display: none;
     padding: 10px 0px;
     color: #000000;
     background-color: #f8f8f8;
diff --git a/src/vitis/client/less/main.less b/src/vitis/client/less/main.less
old mode 100644
new mode 100755
diff --git a/src/vitis/client/modules/vitis/forms/configuration/configuration_vitis_configuration.json b/src/vitis/client/modules/vitis/forms/configuration/configuration_vitis_configuration.json
old mode 100644
new mode 100755
diff --git a/src/vitis/client/modules/vitis/forms/user/user_vitis_user.json b/src/vitis/client/modules/vitis/forms/user/user_vitis_user.json
old mode 100644
new mode 100755
diff --git a/src/vitis/client/modules/vitis/forms/users/users_vitis_users.json b/src/vitis/client/modules/vitis/forms/users/users_vitis_users.json
old mode 100644
new mode 100755
diff --git a/src/vitis/vas/rest/class/vmlib/BD.class.inc b/src/vitis/vas/rest/class/vmlib/BD.class.inc
old mode 100644
new mode 100755
diff --git a/src/vitis/vas/rest/conf/properties.inc b/src/vitis/vas/rest/conf/properties.inc
old mode 100644
new mode 100755
diff --git a/src/vitis/vas/rest/conf/selected_properties.inc b/src/vitis/vas/rest/conf/selected_properties.inc
old mode 100644
new mode 100755
diff --git a/src/vitis/vas/rest/ws/vitis/GenericQuerys.class.inc b/src/vitis/vas/rest/ws/vitis/GenericQuerys.class.inc
old mode 100644
new mode 100755
diff --git a/src/vitis/vas/rest/ws/vitis/Vitis.class.inc b/src/vitis/vas/rest/ws/vitis/Vitis.class.inc
old mode 100644
new mode 100755
diff --git a/src/vitis/vas/sql/sqlQueries.xml b/src/vitis/vas/sql/sqlQueries.xml
old mode 100644
new mode 100755
diff --git a/utils/copy_hooks.bat b/utils/copy_hooks.bat
new file mode 100644
index 0000000000000000000000000000000000000000..a24ac68b0f099047b546b33d77a4fab3d99c0247
--- /dev/null
+++ b/utils/copy_hooks.bat
@@ -0,0 +1,3 @@
+
+
+robocopy "githooks" "../.git/hooks" /E /NFL /NDL /NJH /NJS /nc /ns /np
diff --git a/utils/get_deps.sh b/utils/get_deps.sh
index 92b0273980ef5ae8db6eea7268fd3a5c406243b9..0a26177f9d9a4d746b39799eff421477c4d6ebd8 100755
--- a/utils/get_deps.sh
+++ b/utils/get_deps.sh
@@ -1,24 +1,23 @@
 #!/bin/bash
 #
 #	Récupère l'ensemble des dépendances depuis conf/_install/dependency.xml
-#	Nécessite xmllint : sudo apt install libxml2-utils
 #
 #
 #
 #
 
-
 if [ "../conf/_install/dependency.xml" ]; then
 
-	let depsCount=$(xmllint --xpath 'count(//dependenciesCollection/dependency/name)' ../conf/_install/dependency.xml)
 	declare -A aDeps
 	vitisVersion=master
+	depsCount=0
+	dependencies=($(cat "../conf/_install/dependency.xml" | tr -d '\040\011\012\015' | grep -oP '<dependency>([\s\S]*?)<\/dependency>'))
 
-	for (( i=1; i <= $depsCount; i++ )); do
+	for i in ${!dependencies[*]}; do
 
-		sName="$(xmllint --xpath 'string(//dependenciesCollection/dependency['$i']/name)' ../conf/_install/dependency.xml)"
-		sVersion="$(xmllint --xpath 'string(//dependenciesCollection/dependency['$i']/version)' ../conf/_install/dependency.xml)"
-		sNature="$(xmllint --xpath 'string(//dependenciesCollection/dependency['$i']/nature)' ../conf/_install/dependency.xml)"
+		sName=$(grep -oP '(?<=name>)[^<]+' <<< ${dependencies[$i]})
+		sVersion=$(grep -oP '(?<=version>)[^<]+' <<< ${dependencies[$i]})
+		sNature=$(grep -oP '(?<=nature>)[^<]+' <<< ${dependencies[$i]})
 
 		if [ $sName == "vitis" ]; then
 			vitisVersion=$sVersion
@@ -27,22 +26,22 @@ if [ "../conf/_install/dependency.xml" ]; then
 			aDeps[$i, name]=$sName
 			aDeps[$i, version]=$sVersion
 			aDeps[$i, nature]=$sNature
+			let depsCount++
 		fi
 
 	done
 
 	echo "[INFO] dependencies:"
 	echo "vitis : $vitisVersion"
-	for (( i=1; i <= $depsCount; i++ )); do
-
-		echo "name: ${aDeps[$i, name]}"
-		echo "version: ${aDeps[$i, version]}"
-
+	for i in ${!dependencies[*]}; do
+		echo "(${aDeps[$i, nature]}) ${aDeps[$i, name]} : ${aDeps[$i, version]}"
 	done
+	echo "depsCount : ${depsCount}"
 
 	export vitisVersion
 	export depsCount
 	export aDeps
+
 else
 	echo "[ERROR] ../conf/_install/dependency.xml not found"
 fi
diff --git a/utils/init_symlinks.sh b/utils/init_symlinks.sh
index c98ed30e162c2d81c8b90e5b6755bb5602941b5e..f073ab46f032a47293d4090920fd5d34000d5ae1 100755
--- a/utils/init_symlinks.sh
+++ b/utils/init_symlinks.sh
@@ -19,23 +19,69 @@ read APP_EXISTING_PATH
 
 cd ..
 
+# Supprime les anciens symlinks
+if [ -d "client" ]; then
+	rm -Rf client
+fi
+if [ -d "vas" ]; then
+	rm -Rf vas
+fi
+find src/vitis/client -type l -delete
+find src/vitis/vas/sql -type l -delete
+find src/vitis/vas/rest -type l -delete
+
 # Vitis
 echo "---- Link vitis ----"
 if ! [ -e "$(pwd)/client" ]; then
-	echo "---- Link vitis 2 ----"
-	ln -rsf src/vitis/client client
+
+	mkdir client
+	mkdir client/javascript
+	mkdir client/modules
+	ln -rsf src/vitis/client/css client/css
+	ln -rsf src/vitis/client/forms client/forms
+	ln -rsf src/vitis/client/images client/images
+	ln -rsf src/vitis/client/javascript/app client/javascript/app
+	ln -rsf src/vitis/client/javascript/externs client/javascript/externs
+	ln -rsf src/vitis/client/javascript/require client/javascript/require
+	ln -rsf src/vitis/client/lang client/lang
+	ln -rsf src/vitis/client/less client/less
+	ln -rsf src/vitis/client/modules/vitis client/modules/vitis
+	ln -rsf src/vitis/client/templates client/templates
+	ln -rsf src/vitis/client/.htaccess client/.htaccess
+	ln -rsf src/vitis/client/index.html client/index.html
 fi
 if ! [ -e "$(pwd)/vas" ]; then
-	ln -rsf src/vitis/vas vas
+
+	mkdir vas
+	mkdir vas/rest
+	mkdir vas/rest/ws
+	ln -rsf src/vitis/vas/doc vas/doc
+	ln -rsf src/vitis/vas/rest/class vas/rest/class
+	ln -rsf src/vitis/vas/rest/inc vas/rest/inc
+	ln -rsf src/vitis/vas/rest/ws/vitis vas/rest/ws/vitis
+	ln -rsf src/vitis/vas/rest/index.phtml vas/rest/index.phtml
+	ln -rsf src/vitis/vas/rest/index.vhtml vas/rest/index.vhtml
+	ln -rsf src/vitis/vas/sql vas/sql
+	ln -rsf src/vitis/vas/util vas/util
 fi
 
 # Conf
 echo "---- Link conf ----"
 if ! [ -e "src/vitis/client/conf" ]; then
-	ln -rsf conf src/vitis/client/conf
+	# ln -rsf conf client/conf
+
+	mkdir client/conf
+	for elem in $( ls "conf"); do
+		if [[ $elem != 'properties.json' ]]; then
+			if [[ -d "conf/${elem}" || -f "conf/${elem}" ]]; then
+				echo "---- Link conf/$elem"
+				ln -rsf conf/$elem client/conf/$elem
+			fi
+		fi
+	done
 fi
 if ! [ -e "conf/closure" ]; then
-	ln -rsf src/closure/conf conf/closure
+	ln -rsf src/closure/conf client/conf/closure
 fi
 
 # Modules
@@ -47,22 +93,17 @@ if [[ $depsCount > 0 ]]; then
 				echo "---- Link module_${module} ----"
 				if [ -d "$(pwd)/src/module_${module}/module" ]; then
 					if ! [ -e "src/vitis/client/modules/${module}" ]; then
-						ln -rsf src/module_${module}/module src/vitis/client/modules/${module}
+						ln -rsf src/module_${module}/module client/modules/${module}
 					fi
 				fi
 				if [ -d "$(pwd)/src/module_${module}/web_service/ws" ]; then
 					if ! [ -e "src/vitis/vas/rest/ws/${module}" ]; then
-						ln -rsf src/module_${module}/web_service/ws src/vitis/vas/rest/ws/${module}
-					fi
-				fi
-				if [ -d "$(pwd)/src/module_${module}/web_service/conf" ]; then
-					if ! [ -e "src/vitis/vas/rest/conf/${module}" ]; then
-						ln -rsf src/module_${module}/web_service/conf src/vitis/vas/rest/conf/${module}
+						ln -rsf src/module_${module}/web_service/ws vas/rest/ws/${module}
 					fi
 				fi
 				if [ -d "$(pwd)/src/module_${module}/web_service/sql" ]; then
 					if ! [ -e "src/vitis/vas/sql/${module}" ]; then
-						ln -rsf src/module_${module}/web_service/sql src/vitis/vas/sql/${module}
+						ln -rsf src/module_${module}/web_service/sql vas/sql/${module}
 					fi
 				fi
 				if [ -d "$(pwd)/src/module_${module}/web_service/class" ]; then
@@ -70,7 +111,7 @@ if [[ $depsCount > 0 ]]; then
 						if [ -d "$(pwd)/src/module_${module}/web_service/class/${class_dir}" ]; then
 							echo "---- Link module_${module}/${class_dir} ----"
 							if ! [ -e "src/vitis/vas/rest/class/${class_dir}" ]; then
-								ln -rsf src/module_${module}/web_service/class/${class_dir} src/vitis/vas/rest/class/${class_dir}
+								ln -rsf src/module_${module}/web_service/class/${class_dir} vas/rest/class/${class_dir}
 							fi
 						fi
 					done
@@ -84,6 +125,7 @@ if [[ $depsCount > 0 ]]; then
 		echo "---- Link exixting app ${APP_EXISTING_PATH} ----"
 
 		declare -a existing_folders_path=("vas/server"
+		                "vas/rest/conf"
 		                "vas/log"
 						"vas/public"
 						"vas/shared"
@@ -99,11 +141,6 @@ if [[ $depsCount > 0 ]]; then
 		done
 
 		declare -a existing_files_path=("client/conf/properties.json"
-										"vas/rest/conf/properties.inc"
-										"vas/rest/conf/properties_domain.inc"
-										"vas/rest/conf/properties_post.inc"
-										"vas/rest/conf/properties_server.inc"
-										"vas/rest/conf/version.inc"
 										"vas/rest/.htaccess")
 		for file_path in "${existing_files_path[@]}"; do
 			if [ -f "${APP_EXISTING_PATH}/$file_path" ]; then
@@ -114,15 +151,8 @@ if [[ $depsCount > 0 ]]; then
 
 		for properties_dir in $( ls "${APP_EXISTING_PATH}/vas/rest/conf"); do
 			if [ -d "${APP_EXISTING_PATH}/vas/rest/conf/${properties_dir}" ]; then
-				if [ -d "$(pwd)/vas/rest/conf/${properties_dir}" ]; then
-					for properties_file in $( ls "${APP_EXISTING_PATH}/vas/rest/conf/${properties_dir}"); do
-						# if [ ${properties_file:0:10}=="properties"  ||  ${properties_file}=="version.inc" ]; then
-						if [[ $properties_file == "properties"* ]] || [[ $properties_file == "version.inc" ]]; then
-							echo "copy vas/rest/conf/${properties_dir}/${properties_file}"
-							cp -f "${APP_EXISTING_PATH}/vas/rest/conf/${properties_dir}/${properties_file}" "$(pwd)/vas/rest/conf/${properties_dir}/${properties_file}"
-						fi
-					done
-				fi
+				echo "copy ${APP_EXISTING_PATH}/vas/rest/conf/${properties_dir}/ > $(pwd)/vas/rest/conf/"
+				cp -Rf "${APP_EXISTING_PATH}/vas/rest/conf/${properties_dir}/" "$(pwd)/vas/rest/conf/"
 			fi
 		done
 	fi
diff --git a/utils/init_tree.bat b/utils/init_tree.bat
new file mode 100644
index 0000000000000000000000000000000000000000..d8e6956ca21d8e9e7a4d4d46c77657f1153fb8b9
--- /dev/null
+++ b/utils/init_tree.bat
@@ -0,0 +1,99 @@
+@echo off
+title Install Vitis App
+setlocal EnableDelayedExpansion
+
+cd ..
+
+set /p existing_path="Existing app path: "
+
+REM Client Dir
+echo Create client directory
+if exist "client" (
+  rmdir /S /Q "client"
+)
+echo copy client
+robocopy "src/vitis/client" "client" /E /NFL /NDL /NJH /NJS /nc /ns /np
+echo copy client/conf
+robocopy "conf" "client/conf" /E /NFL /NDL /NJH /NJS /nc /ns /np
+echo copy client/conf/closure
+robocopy "src/closure/conf" "client/conf/closure" /E /NFL /NDL /NJH /NJS /nc /ns /np
+
+echo Copy client modules
+for /d %%g in ("src/module_*") do (
+  set x=%%g
+  echo !x:~7!
+  if exist "src/%%g/module" (
+    echo copy client/modules/!x:~7!
+    robocopy "src/%%g/module" "client/modules/!x:~7!" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+)
+
+REM VAS dir
+echo Create vas directory
+echo Create client directory
+if exist "vas" (
+  rmdir /S /Q "vas"
+)
+echo copy vas
+robocopy "src/vitis/vas" "vas" /E /NFL /NDL /NJH /NJS /nc /ns /np
+
+echo Copy vas web_services
+for /d %%g in ("src/module_*") do (
+  set x=%%g
+  echo !x:~7!
+  if exist "src/%%g/web_service/conf" (
+    echo copy vas/rest/conf/!x:~7!
+    robocopy "src/%%g/web_service/conf" "vas/rest/conf/!x:~7!" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+  if exist "src/%%g/web_service/sql" (
+    echo copy vas/sql/!x:~7!
+    robocopy "src/%%g/web_service/sql" "vas/sql/!x:~7!" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+  if exist "src/%%g/web_service/ws" (
+    echo copy vas/rest/ws/!x:~7!
+    robocopy "src/%%g/web_service/ws" "vas/rest/ws/!x:~7!" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+  if exist "src/%%g/web_service/class" (
+    echo copy vas/rest/class
+    robocopy "src/%%g/web_service/class" "vas/rest/class" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+  if exist "src/%%g/web_service/ws_data" (
+    echo copy vas/ws_data
+    robocopy "src/%%g/web_service/ws_data" "vas/ws_data" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+  if exist "src/%%g/web_service/public" (
+    echo copy vas/public
+    robocopy "src/%%g/web_service/public" "vas/public" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+  if exist "src/%%g/web_service/upload" (
+    echo copy vas/upload
+    robocopy "src/%%g/web_service/upload" "vas/upload" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+)
+
+REM Copy from existing path
+if exist %existing_path% (
+  echo copy properties from %existing_path%
+
+  for %%G in (vas\server,vas\rest\conf,vas\log,vas\public,vas\shared,vas\tmp,vas\upload,vas\ws_data) do (
+    echo %%G
+    if exist %existing_path%\%%G (
+      echo copy %%G
+      robocopy "%existing_path%\%%G" "%%G" /E /NFL /NDL /NJH /NJS /nc /ns /np
+    )
+  )
+
+  if exist %existing_path%\client\conf\properties.json (
+    echo copy properties.json
+    robocopy "%existing_path%\client\conf" "client\conf" "properties.json" /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+  if exist %existing_path%\vas\rest\.htaccess (
+    echo copy .htaccess
+    robocopy "%existing_path%\vas\rest" "vas\rest" ".htaccess" /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+
+  if exist "%existing_path%\vas\rest\conf" (
+    echo copy vas\rest\conf
+    robocopy "%existing_path%\vas\rest\conf" "vas\rest\conf" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+)
diff --git a/utils/pull_subtrees.sh b/utils/pull_subtrees.sh
index c2793f2ee9ad6e0f53da243fb1b6d26dd9baa20b..5cac1ba0c4a626761809103e822793ec694068a4 100755
--- a/utils/pull_subtrees.sh
+++ b/utils/pull_subtrees.sh
@@ -17,17 +17,7 @@ cd ..
 
 # Vitis
 echo "---- Pull vitis ----"
-git subtree pull --prefix src/vitis --squash -m "pull subtree"  "git@gitlab.veremes.net:Development/vitis_apps/sources/vitis.git" master
-
-# fichiers à ignorer
-git update-index --assume-unchanged conf/properties.json
-git update-index --assume-unchanged conf/package.json
-git update-index --assume-unchanged src/vitis/vas/rest/.htaccess
-git update-index --assume-unchanged src/vitis/vas/rest/conf/properties.inc
-git update-index --assume-unchanged src/vitis/vas/rest/conf/properties_domain.inc
-git update-index --assume-unchanged src/vitis/vas/rest/conf/properties_post.inc
-git update-index --assume-unchanged src/vitis/vas/rest/conf/properties_server.inc
-git update-index --assume-unchanged src/vitis/vas/rest/conf/version.inc
+git subtree pull --prefix src/vitis --squash -m "pull subtree"  "git@gitlab.veremes.net:Development/vitis_apps/sources/vitis.git" $vitisVersion
 
 # Modules
 if [[ $depsCount > 0 ]]; then
@@ -36,11 +26,7 @@ if [[ $depsCount > 0 ]]; then
 			echo "---- Pull ${aDeps[$i, name]} ----"
 
 			# Ajoute le dépôt
-			git subtree pull --prefix src/${aDeps[$i, name]} --squash -m "pull subtree" "git@gitlab.veremes.net:Development/vitis_apps/sources/${aDeps[$i, name]}.git" master
-			# fichiers à ignorer
-			git update-index --assume-unchanged src/${aDeps[$i, name]}/web_service/conf/properties.inc
-			git update-index --assume-unchanged src/${aDeps[$i, name]}/web_service/conf/properties_server.inc
-			git update-index --assume-unchanged src/${aDeps[$i, name]}/web_service/conf/version.inc
+			git subtree pull --prefix src/${aDeps[$i, name]} --squash -m "pull subtree" "git@gitlab.veremes.net:Development/vitis_apps/sources/${aDeps[$i, name]}.git" ${aDeps[$i, version]}
 		fi
 	done
 fi
diff --git a/utils/push_subtrees.sh b/utils/push_subtrees.sh
index b4949ea2dca1465c2cc0282d59442c158d7138e1..18a9d3bdac1f0d8d3f6af3e16af06d7337ddf9f6 100755
--- a/utils/push_subtrees.sh
+++ b/utils/push_subtrees.sh
@@ -17,7 +17,11 @@ cd ..
 
 # Vitis
 echo "---- Push vitis ----"
-git subtree push --prefix src/vitis "git@gitlab.veremes.net:Development/vitis_apps/sources/vitis.git" master
+{ # 'try' block
+	git subtree push --prefix src/vitis "git@gitlab.veremes.net:Development/vitis_apps/sources/vitis.git" $vitisVersion
+} || { # 'catch' block
+	echo "could not push vitis"
+}
 
 # Modules
 if [[ $depsCount > 0 ]]; then
@@ -28,7 +32,7 @@ if [[ $depsCount > 0 ]]; then
 			# Push le dépôt
 
 			{ # 'try' block
-				git subtree push --prefix src/${aDeps[$i, name]} "git@gitlab.veremes.net:Development/vitis_apps/sources/${aDeps[$i, name]}.git" master
+				git subtree push --prefix src/${aDeps[$i, name]} "git@gitlab.veremes.net:Development/vitis_apps/sources/${aDeps[$i, name]}.git" ${aDeps[$i, version]}
 			} || { # 'catch' block
 			    echo "could not push ${aDeps[$i, name]}"
 			}
diff --git a/utils/update_tree.bat b/utils/update_tree.bat
new file mode 100644
index 0000000000000000000000000000000000000000..3c3c5dc356d7cc5922c046ea95f6787f80faa363
--- /dev/null
+++ b/utils/update_tree.bat
@@ -0,0 +1,80 @@
+@echo off
+title Update Vitis tree
+echo Update Vitis tree
+setlocal EnableDelayedExpansion
+
+cd utils
+
+REM Pull repo
+"C:\Program Files\Git\bin\sh.exe" --login -i -c "git pull"
+
+REM Pull subtrees
+"C:\Program Files\Git\bin\sh.exe" --login -i -c "./pull_subtrees.sh"
+
+REM Save important files
+if exist "../vas/rest/sql" (
+  robocopy "../vas/rest/sql" "../vas/rest/sql_bak" /E /NFL /NDL /NJH /NJS /nc /ns /np
+)
+if exist "../vas/rest/conf" (
+  robocopy "../vas/rest/conf" "../vas/rest/conf_bak" /E /NFL /NDL /NJH /NJS /nc /ns /np
+)
+
+REM Replace Vitis files
+for /d %%g in ("../src/vitis/client/*") do (
+  set x=%%g
+  echo copy client/!x!
+  rmdir /S /Q "../client/!x!"
+  robocopy "../src/vitis/client/!x!" "../client/!x!" /E /NFL /NDL /NJH /NJS /nc /ns /np
+)
+for /d %%g in ("../src/vitis/vas/sql") do (
+  echo copy vas/sql
+  rmdir /S /Q "../vas/sql"
+  robocopy "../src/vitis/vas/sql" "../vas/sql" /E /NFL /NDL /NJH /NJS /nc /ns /np
+)
+for /d %%g in ("../src/vitis/vas/rest/class") do (
+  echo copy vas/rest/class
+  rmdir /S /Q "../vas/rest/class"
+  robocopy "../src/vitis/vas/rest/class" "../vas/rest/class" /E /NFL /NDL /NJH /NJS /nc /ns /np
+)
+for /d %%g in ("../src/vitis/vas/rest/conf") do (
+  echo copy vas/rest/conf
+  robocopy "../src/vitis/vas/rest/conf" "../vas/rest/conf_veremes" /E /NFL /NDL /NJH /NJS /nc /ns /np
+)
+for /d %%g in ("../src/vitis/vas/rest/inc") do (
+  echo copy vas/rest/inc
+  rmdir /S /Q "../vas/rest/inc"
+  robocopy "../src/vitis/vas/rest/inc" "../vas/rest/inc" /E /NFL /NDL /NJH /NJS /nc /ns /np
+)
+for /d %%g in ("../src/vitis/vas/rest/ws") do (
+  echo copy vas/rest/ws
+  rmdir /S /Q "../vas/rest/ws"
+  robocopy "../src/vitis/vas/rest/ws" "../vas/rest/ws" /E /NFL /NDL /NJH /NJS /nc /ns /np
+)
+
+REM Replace modules files
+for /d %%g in ("../src/module_*") do (
+  set x=%%g
+  if exist "../src/%%g/module" (
+    echo copy client/modules/!x:~7!
+    robocopy "../src/%%g/module" "../client/modules/!x:~7!" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+  if exist "../src/%%g/web_service/conf" (
+    echo copy vas/rest/conf_veremes/!x:~7!
+    robocopy "../src/%%g/web_service/conf" "../vas/rest/conf_veremes/!x:~7!" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+  if exist "../src/%%g/web_service/sql" (
+    echo copy vas/sql/!x:~7!
+    robocopy "../src/%%g/web_service/sql" "../vas/sql/!x:~7!" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+  if exist "../src/%%g/web_service/ws" (
+    echo copy vas/rest/ws/!x:~7!
+    robocopy "../src/%%g/web_service/ws" "../vas/rest/ws/!x:~7!" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+  if exist "../src/%%g/web_service/class" (
+    echo copy vas/rest/class
+    robocopy "../src/%%g/web_service/class" "../vas/rest/class" /E /NFL /NDL /NJH /NJS /nc /ns /np
+  )
+)
+
+
+cd ..