diff --git a/.gitmodules b/.gitmodules
index fde4a430be92ad97355ba93ac8217959450745ba..2611c3e4dbb030361a2ed4da8e640fd14de94f20 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -26,3 +26,7 @@
 	path = src/module_cadastre
 	url = git@gitlab.veremes.net:Development/vitis_apps/sources/module_cadastre.git
 	branch = app_vmap
+[submodule "utils"]
+	path = utils
+	url = git@gitlab.veremes.net:Development/vitis_apps/sources/utils.git
+	branch = master
diff --git a/utils b/utils
new file mode 160000
index 0000000000000000000000000000000000000000..1b645a46d270cd5a81d5a00013214be09847fbcd
--- /dev/null
+++ b/utils
@@ -0,0 +1 @@
+Subproject commit 1b645a46d270cd5a81d5a00013214be09847fbcd
diff --git a/utils/README.md b/utils/README.md
deleted file mode 100755
index c04d097f0c81ab438e29dc87c3cec22880d740f8..0000000000000000000000000000000000000000
--- a/utils/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Utils
-
-System utils to manage Vitis applications
\ No newline at end of file
diff --git a/utils/copy_hooks.bat b/utils/copy_hooks.bat
deleted file mode 100755
index a24ac68b0f099047b546b33d77a4fab3d99c0247..0000000000000000000000000000000000000000
--- a/utils/copy_hooks.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-robocopy "githooks" "../.git/hooks" /E /NFL /NDL /NJH /NJS /nc /ns /np
diff --git a/utils/copy_hooks.sh b/utils/copy_hooks.sh
deleted file mode 100755
index f5bed2f2552ef3440e7e9589197c0922a1875927..0000000000000000000000000000000000000000
--- a/utils/copy_hooks.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-#
-#
-# 	Script de mise à jour des hooks client
-#
-#
-#
-
-
-if [ -d "githooks" ]; then
-	if [ -d "../.git/hooks" ]; then
-	    cp -f githooks/* ../.git/hooks/
-	fi
-fi
diff --git a/utils/get_deps.sh b/utils/get_deps.sh
deleted file mode 100755
index 0a26177f9d9a4d746b39799eff421477c4d6ebd8..0000000000000000000000000000000000000000
--- a/utils/get_deps.sh
+++ /dev/null
@@ -1,47 +0,0 @@
-#!/bin/bash
-#
-#	Récupère l'ensemble des dépendances depuis conf/_install/dependency.xml
-#
-#
-#
-#
-
-if [ "../conf/_install/dependency.xml" ]; then
-
-	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 in ${!dependencies[*]}; do
-
-		sName=$(grep -oP '(?<=name>)[^<]+' <<< ${dependencies[$i]})
-		sVersion=$(grep -oP '(?<=version>)[^<]+' <<< ${dependencies[$i]})
-		sNature=$(grep -oP '(?<=nature>)[^<]+' <<< ${dependencies[$i]})
-
-		if [ $sName == "vitis" ]; then
-			vitisVersion=$sVersion
-		fi
-		if [ $sNature == "modules" ] || [ $sNature == "web_services" ] || [ $sName == "vitis" ]; 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 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/githooks/post-merge b/utils/githooks/post-merge
deleted file mode 100755
index 45b38b216aa67e69223d8bea9440665e898168f2..0000000000000000000000000000000000000000
--- a/utils/githooks/post-merge
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-#
-#   Hook qui permet de pull toutes les dépendances
-#   quand on fait un pull sur l'application
-#
-#
-#
-#
-#
-
-echo "****** Post-merge Hook ******"
-echo "****** Pull ******"
-# echo "****** Pull subtrees ******"
-# echo "$(pwd)"
-#
-# if [ -d "$(pwd)/utils" ]; then
-#     cd utils
-#     ./pull_subtrees.sh
-# fi
diff --git a/utils/githooks/pre-push b/utils/githooks/pre-push
deleted file mode 100755
index c5e4e9536803f05a55dce10289d9bd9299350a7d..0000000000000000000000000000000000000000
--- a/utils/githooks/pre-push
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/sh
-#
-#   Hook qui permet de push toutes les dépendances
-#   quand on fait un push sur l'application
-#
-#
-#
-#
-#
-
-remote="$1"
-url="$2"
-if [ $remote != $url ]; then
-
-    echo "****** Pre-push Hook ******"
-    echo "****** Push ******"
-    # echo "****** Push subtrees ******"
-    # if [ -d "$(pwd)/utils" ]; then
-    #     cd utils
-    #     ./push_subtrees.sh
-    # fi
-fi
diff --git a/utils/init_submodules.sh b/utils/init_submodules.sh
deleted file mode 100755
index 9505e0d8f949c42e3e2b853b3ad9e5cd933a953e..0000000000000000000000000000000000000000
--- a/utils/init_submodules.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/bash
-#
-#
-# 	Script d'initialisation d'un dépot vMap versionné sous git
-#	Initislise l'ensemble des dépendances sous forme de subtrees
-#
-#	Nécessite xmllint : sudo apt install libxml2-utils
-#
-
-
-APP_NAME="vmap"
-
-# Récupère la liste des dépendances
-. ./get_deps.sh
-
-cd ..
-if [ -d "$(pwd)/src" ]; then
-	git rm -r src
-fi
-mkdir src
-
-if [[ $depsCount > 0 ]]; then
-
-	# Vitis
-	echo "---- Init vitis ----"
-	git submodule add -f -b $vitisVersion "git@gitlab.veremes.net:Development/vitis_apps/sources/vitis.git" src/vitis
-
-	echo "---- Init conf ----"
-	git submodule add -f -b master "git@gitlab.veremes.net:Development/vitis_apps/sources/closure.git" src/closure
-
-	# Modules
-	for (( i=1; i <= $depsCount; i++ )); do
-		if [ ${aDeps[$i, nature]} == "modules" ]; then
-			echo "---- Init ${aDeps[$i, name]} : ${aDeps[$i, version]}----"
-
-		    # Ajoute le dépôt
-			git submodule add -f -b ${aDeps[$i, version]} "git@gitlab.veremes.net:Development/vitis_apps/sources/${aDeps[$i, name]}.git" src/${aDeps[$i, name]}
-
-			# checkout sur la bonne branche
-			(cd src/${aDeps[$i, name]};git checkout ${aDeps[$i, version]})
-		fi
-	done
-
-fi
diff --git a/utils/init_symlinks.sh b/utils/init_symlinks.sh
deleted file mode 100755
index 562c7ddb343ad70e85c86d8300080d6eb2c7f7fa..0000000000000000000000000000000000000000
--- a/utils/init_symlinks.sh
+++ /dev/null
@@ -1,159 +0,0 @@
-#!/bin/bash
-#
-#
-# 	Script d'initialisation d'un dépot vMap versionné sous git
-#
-#   Split repo
-#   git subtree split -P module/ -b module_split_branch
-#
-#   Add subtree
-#   git subtree add --prefix vmap "git@gitlab.veremes.net:Development/vitis_apps/sources/Vitis.git" master
-#
-#
-
-echo -n "Existing app path (path/empty)? "
-read APP_EXISTING_PATH
-
-# Récupère la liste des dépendances
-. ./get_deps.sh
-
-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
-
-	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
-
-	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 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
-fi
-
-# Modules
-if [[ $depsCount > 0 ]]; then
-	for (( i=1; i <= $depsCount; i++ )); do
-		if [ ${aDeps[$i, nature]} == "modules" ]; then
-			if [ ${aDeps[$i, name]:0:7} == "module_" ]; then
-				module=${aDeps[$i, name]:7}
-				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 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 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 vas/sql/${module}
-					fi
-				fi
-				if [ -d "$(pwd)/src/module_${module}/web_service/class" ]; then
-					for class_dir in $( ls "$(pwd)/src/module_${module}/web_service/class"); do
-						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} vas/rest/class/${class_dir}
-							fi
-						fi
-					done
-				fi
-			fi
-		fi
-	done
-
-	# Utilisation d'une install déjà existante
-	if [ -d "${APP_EXISTING_PATH}" ]; then
-		echo "---- Link exixting app ${APP_EXISTING_PATH} ----"
-
-		declare -a existing_folders_path=("vas/server"
-		                "vas/rest/conf"
-		                "vas/log"
-						"vas/public"
-						"vas/shared"
-						"vas/tmp"
-						"vas/upload"
-		                "vas/ws_data")
-		for folder_path in "${existing_folders_path[@]}"; do
-			if [ -d "${APP_EXISTING_PATH}/$folder_path" ]; then
-				echo "copy $folder_path"
-				cp -Rf "${APP_EXISTING_PATH}/$folder_path" "$(pwd)/$folder_path"
-				chmod 777 -R "$(pwd)/$folder_path"
-			fi
-		done
-
-		declare -a existing_files_path=("client/conf/properties.json"
-										"vas/rest/.htaccess")
-		for file_path in "${existing_files_path[@]}"; do
-			if [ -f "${APP_EXISTING_PATH}/$file_path" ]; then
-				echo "copy $file_path"
-				cp -f "${APP_EXISTING_PATH}/$file_path" "$(pwd)/$file_path"
-			fi
-		done
-
-		for properties_dir in $( ls "${APP_EXISTING_PATH}/vas/rest/conf"); do
-			if [ -d "${APP_EXISTING_PATH}/vas/rest/conf/${properties_dir}" ]; then
-				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
-fi
diff --git a/utils/init_tree.bat b/utils/init_tree.bat
deleted file mode 100755
index d8e6956ca21d8e9e7a4d4d46c77657f1153fb8b9..0000000000000000000000000000000000000000
--- a/utils/init_tree.bat
+++ /dev/null
@@ -1,99 +0,0 @@
-@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_submodules.sh b/utils/pull_submodules.sh
deleted file mode 100755
index 8db23a881b20a8bdb92794761ea164b8892e2cbf..0000000000000000000000000000000000000000
--- a/utils/pull_submodules.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-#
-#
-# 	Script de mise à jour des modules de l'application
-#
-#
-
-
-# git submodule update --remote
-# pb : supprime les changements local
-
-(cd ..;git submodule foreach --recursive 'git pull')
diff --git a/utils/push_submodules.sh b/utils/push_submodules.sh
deleted file mode 100755
index 904f8ee37837ed61c555e1a5957b31da4856785b..0000000000000000000000000000000000000000
--- a/utils/push_submodules.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-#
-#
-# 	Script de mise à jour des modules de l'application
-#
-#
-
-
-# git submodule update --remote
-# pb : supprime les changements local
-
-(cd ..;git submodule foreach --recursive 'git push')
diff --git a/utils/update_tree.bat b/utils/update_tree.bat
deleted file mode 100755
index 3c3c5dc356d7cc5922c046ea95f6787f80faa363..0000000000000000000000000000000000000000
--- a/utils/update_tree.bat
+++ /dev/null
@@ -1,80 +0,0 @@
-@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 ..