diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f7c8f34b08ba2e23c64b5801f6885b3c1768ac72..bd01e22edd47c77eb35b09eff7b41198f1463721 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,5 @@
 stages:
+  - test-build
   - Static analysis
   - build
   - deploy
@@ -8,6 +9,17 @@ variables:
   SONAR_HOST_URL: "https://sonarqube.neogeo.fr"
   GIT_DEPTH: 0
 
+test build:
+  stage: test-build
+  image: node:14
+  script:
+    - npm install
+    - npm run build
+  except:
+    - master
+    - develop
+    - ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
+
 build testing docker image:
   stage: build
   only:
diff --git a/src/assets/js/utils.js b/src/assets/js/utils.js
index 4b01c67ef07d0bf803528976e6708657894fa821..0680fcdfad82586d6325e4cc501bf9873abf4d7c 100644
--- a/src/assets/js/utils.js
+++ b/src/assets/js/utils.js
@@ -24,14 +24,18 @@ export function csvToJson(csv, delimiter) {
   const [, ...lines] = allLines;
 
   for (const line of lines) {
-    const obj = {};
-    const currentLine = line.split(delimiter);
+    if (line) {
+      const obj = {};
+      const currentLine = line.split(delimiter).map(el => {
+        return el.replace('\r', '');
+      });
 
-    for (let i = 0; i < headers.length; i++) {
-      obj[headers[i]] = currentLine[i];
-    }
+      for (let i = 0; i < headers.length; i++) {
+        obj[headers[i]] = currentLine[i];
+      }
 
-    result.push(obj);
+      result.push(obj);
+    }
   }
   return JSON.parse(JSON.stringify(result));
 }
diff --git a/src/services/map-service.js b/src/services/map-service.js
index 7a9afd5e6c7d5643bb181dec4c62aa067b78472b..e88fceab2a2c826dca7ab2a0baa32258168f09bc 100644
--- a/src/services/map-service.js
+++ b/src/services/map-service.js
@@ -116,7 +116,7 @@ const mapService = {
         overlay.setPosition(undefined);
         closer.blur();
         return false;
-      };
+      }; 
     }
     this.map.addOverlay(this.overlay);
 
@@ -244,8 +244,11 @@ const mapService = {
   addLayers: function (layers, serviceMap, optionsMap, schemaType) {
     this.layers = layers;
     if (layers) { //* if admin has defined basemaps for this project
+      let count = 0;
       layers.forEach((layer) => {
+
         if (layer) {
+          count +=1;
           const options = layer.options;
           if (options) {
             options.noWrap = true;
@@ -268,6 +271,7 @@ const mapService = {
               dictLayersToLeaflet[layer.id] = layerTms;
             }
           }
+          dictLayersToLeaflet[layer.id].setZIndex(count);
         }
       });
     } else { //* else when no basemaps defined
@@ -358,6 +362,7 @@ const mapService = {
     });
     this.mvtLayer.featureTypes = featureTypes;
     this.mvtLayer.project_slug = projectSlug;
+    this.mvtLayer.setZIndex(30);
     this.map.addLayer(this.mvtLayer);
     window.layerMVT = this.mvtLayer;
   },
@@ -462,7 +467,7 @@ const mapService = {
       source: drawSource,
       style: styleFunction,
     });
-
+    olLayer.setZIndex(29);
     this.map.addLayer(olLayer);
     return drawSource;
   },
diff --git a/src/views/Feature/FeatureDetail.vue b/src/views/Feature/FeatureDetail.vue
index e261563f07a8fb039fc2890283cfd6b91ef87382..946b4629a960d30fa743f8ddb91a28f4139bdde2 100644
--- a/src/views/Feature/FeatureDetail.vue
+++ b/src/views/Feature/FeatureDetail.vue
@@ -54,7 +54,7 @@
       </div>
       <div
         v-if="isCanceling"
-        class="ui dimmer modals page transition visible active"
+        class="ui dimmer modals transition visible active"
         style="display: flex !important"
       >
         <div
@@ -236,9 +236,9 @@ export default {
     deleteFeature() {
       this.$store
         .dispatch('feature/DELETE_FEATURE', { feature_id: this.currentFeature.feature_id })
-        .then((response) => {
+        .then(async (response) => {
           if (response.status === 204) {
-            this.GET_PROJECT_FEATURES({
+            await this.GET_PROJECT_FEATURES({
               project_slug: this.$route.params.slug
             });
             this.goBackToProject();
diff --git a/src/views/Feature/FeatureEdit.vue b/src/views/Feature/FeatureEdit.vue
index 1802af4d68f33d5f4b3015e4c3f7ffb41eade8a9..45fa9b8afbb7029e394bf208a53098ef9019b498 100644
--- a/src/views/Feature/FeatureEdit.vue
+++ b/src/views/Feature/FeatureEdit.vue
@@ -381,7 +381,7 @@ export default {
           errors: [],
           id_for_label: 'name',
           field: {
-            max_length: 140,
+            max_length: 128,
           },
           html_name: 'name',
           label: 'Nom',
diff --git a/src/views/FeatureType/FeatureTypeDetail.vue b/src/views/FeatureType/FeatureTypeDetail.vue
index b82834fc4baa103d8655a8f8b2bd8ba20160f915..58303368fb891af77f861fecb6985e2ed83d9ac8 100644
--- a/src/views/FeatureType/FeatureTypeDetail.vue
+++ b/src/views/FeatureType/FeatureTypeDetail.vue
@@ -663,7 +663,8 @@ export default {
                 //* if field type is list, it's not possible to guess from value type
                 if (field_type === 'list') {
                   //*then check if the value is an available option
-                  if (!options.includes(fieldInFeature)) {
+                  if (fieldInFeature && !options.includes(fieldInFeature)) {
+                    this.importError = `Le champ ${name} contient une valeur invalide.`;
                     return false;
                   }
                 } else if (customType !== field_type) {
@@ -693,7 +694,7 @@ export default {
       reader.addEventListener('load', (e) => {
         // bypass json check for files larger then 10 Mo
         let jsonValidity;
-        if (parseFloat(fileConvertSizeToMo(files[0])) <= 10) {
+        if (parseFloat(fileConvertSizeToMo(files[0].size)) <= 10) {
           jsonValidity = this.checkJsonValidity(JSON.parse(e.target.result));
         } else {
           jsonValidity = true;
diff --git a/src/views/FeatureType/FeatureTypeEdit.vue b/src/views/FeatureType/FeatureTypeEdit.vue
index 67d6def4ac8f5dab0ad86109b2c411d25e4f0afa..303f3d2f59107f7d8e031dae3e24aa8308d13d28 100644
--- a/src/views/FeatureType/FeatureTypeEdit.vue
+++ b/src/views/FeatureType/FeatureTypeEdit.vue
@@ -244,6 +244,7 @@ export default {
       slug: this.$route.params.slug,
       reservedKeywords: [
         // todo : add keywords for mapstyle (strokewidth...)
+        'id',
         'title',
         'description',
         'status',