diff --git a/src/components/project/ProjectMappingContextLayer.vue b/src/components/project/ProjectMappingContextLayer.vue
index f28852d0303e574ee6368e0fccffd55c56e26f7a..4b1f2072d0b20c8441f28da15bd4d48ead3dc253 100644
--- a/src/components/project/ProjectMappingContextLayer.vue
+++ b/src/components/project/ProjectMappingContextLayer.vue
@@ -24,22 +24,12 @@
           class="field three wide {% if form.opacity.errors %} error{% endif %}"
         >
           <label for="opacity">Opacité</label>
-          <input
-            type="number"
-            v-model.number="layerForm.opacity"
-            step="0.01"
-            @change="updateLayer"
-          />
+          <input type="number" v-model.number="layerOpacity" step="0.01" />
           <!-- {{ form.opacity.errors }} -->
         </div>
         <div class="field three wide">
           <div class="ui checkbox">
-            <input
-              type="checkbox"
-              :checked="layerForm.queryable"
-              name="queryable"
-              @change="updateLayer"
-            />
+            <input type="checkbox" v-model="layerQueryable" name="queryable" />
             <label for="queryable">Requêtable</label>
           </div>
           <!-- {{ form.queryable.errors }} -->
@@ -62,21 +52,51 @@ import { mapState } from "vuex";
 
 export default {
   name: "ProjectMappingContextLayer",
-  props: ["layer"],
+
+  props: ["layer", "basemapid"],
+
   components: {
     Dropdown,
   },
-  data() {
-    return {
-      layerForm: null,
-      selectedLayer: {
-        name: null,
-        value: null,
-      },
-    };
-  },
+
   computed: {
-    ...mapState("map", ["layers"]),
+    ...mapState("map", ["layers", "availableLayers"]),
+
+    selectedLayer: {
+      get() {
+        return {
+          name: this.layer ? this.layer.service : "",
+          value: this.layer ? this.layer.title : "",
+        };
+      },
+
+      set(newValue) {
+        this.updateLayer({
+          ...this.layer,
+          service: newValue.name,
+          title: newValue.value,
+        });
+      },
+    },
+
+    layerOpacity: {
+      get() {
+        return this.layer.opacity;
+      },
+      set(newValue) {
+        this.updateLayer({ ...this.layer, opacity: newValue });
+      },
+    },
+
+    layerQueryable: {
+      get() {
+        return this.layer.queryable;
+      },
+      set(newValue) {
+        this.updateLayer({ ...this.layer, queryable: newValue });
+      },
+    },
+
     availableLayers: function () {
       return this.layers.map((el) => {
         return { name: el.service, value: el.title };
@@ -89,44 +109,21 @@ export default {
         : "Choisissez une couche";
     },
   },
-  watch: {
-    selectedLayer(newValue, oldValue) {
-      if (newValue !== oldValue) {
-        this.updateLayer()
-      }
-    },
-    layer(newValue, oldValue) {
-      console.log(newValue)
-      if (newValue !== oldValue) {
-        console.log(newValue)
-      }
-    }
-  },
+
   methods: {
     removeLayer() {
-      this.$emit("delete-layer");
+      this.$store.commit("map/DELETE_BASEMAP_LAYER", {
+        basemapId: this.basemapid,
+        layerId: this.layer.dataKey,
+      });
     },
-    updateLayer() {
-      this.$emit("update-layer", this.layerForm);
+    updateLayer(layer) {
+      this.$store.commit("map/UPDATE_BASEMAP_LAYER", {
+        basemapId: this.basemapid,
+        layerId: this.layer.dataKey,
+        layer,
+      });
     },
   },
-  created() {
-    this.layerForm = {
-      opacity: "1.00",
-      order: 0,
-      queryable: false,
-      title: "Open street map",
-      ...this.layer, //* spread other values from props and overide previous ones if defined
-    };
-  },
-  mounted() {
-    let selectedLayer = this.layers.find((el) => el.title === this.layer.title);
-    if (selectedLayer) {
-      this.selectedLayer = {
-        name: selectedLayer.service,
-        value: selectedLayer.title,
-      };
-    }
-  },
 };
 </script>
\ No newline at end of file
diff --git a/src/components/project/project_mapping_basemap.vue b/src/components/project/project_mapping_basemap.vue
index f85129e43e9d3e02653cf0f1d1b1b7afc1f34186..4359218adcb4c52eff0bc85769443dd4b7c21a0d 100644
--- a/src/components/project/project_mapping_basemap.vue
+++ b/src/components/project/project_mapping_basemap.vue
@@ -2,26 +2,24 @@
   <div class="ui segment">
     <div class="field required">
       <label for="basemap-title">Titre</label>
-      <input type="text" name="basemap-title" :value="title" required />
-      <!-- @blur="$emit('update-basemap', basemapForm)" -->
+      <input v-model="title" type="text" name="basemap-title" required />
       <!-- {{ basemapForm.title.errors }} -->
     </div>
 
     <div class="nested">
-      <div v-if="layers" class="ui segments layers-container">
-        {{ layers }}
-        {{ layers.length }}
+      <div v-if="basemap.layers" class="ui segments layers-container">
         <ProjectMappingContextLayer
-          v-for="layer in layers"
+          v-for="layer in basemap.layers"
           :key="'layer-' + layer.dataKey"
           :layer="layer"
+          :basemapid="basemap.id"
         />
-        <!--           v-on:update-layer="updateLayer"
-          v-on:delete-layer="removeLayer(layer.dataKey)" -->
       </div>
       <div class="ui buttons">
-        <!-- @click="addLayer" -->
-        <a class="ui compact small icon left floated button green">
+        <a
+          @click="addLayer"
+          class="ui compact small icon left floated button green"
+        >
           <i class="ui plus icon"></i>
           <span>Ajouter une couche</span>
         </a>
@@ -53,70 +51,61 @@ import ProjectMappingContextLayer from "@/components/project/ProjectMappingConte
 
 export default {
   name: "Project_mapping_basemap",
+
   props: ["basemap"],
+
   components: {
     ProjectMappingContextLayer,
   },
-  data() {
-    return {
-      dataKey: 0,
-      title: "Fond par défaut",
-      layers: [
-        {
-          id: 1,
-          title: "Open street map",
-          opacity: "1.00",
-          order: 0,
-          queryable: false,
-        },
-      ],
-    };
+
+  computed: {
+    maxLayersCount: function () {
+      console.log("maxLayersCount", this.basemap.layers);
+      return this.basemap.layers.reduce((acc, curr) => {
+        if (curr.dataKey > acc) {
+          return curr.dataKey;
+        } else {
+          return acc;
+        }
+      }, 0);
+    },
+
+    title: {
+      get() {
+        return this.basemap.title || `Fond ${this.basemap.id}`;
+      },
+      set(newValue) {
+        this.$store.commit("map/UPDATE_BASEMAP", {
+          id: this.basemap.id,
+          title: newValue,
+        });
+      },
+    },
   },
 
   methods: {
     deleteBasemap() {
       this.$store.commit("map/DELETE_BASEMAP", this.basemap.id);
     },
-    /*  mapLayersDataKey() {
-      if (this.layers) {
-        if (!this.layers) this.layers = [];
-        this.layers = this.layers.map((el) => {
-          this.dataKey += 1;
-          return { dataKey: this.dataKey, ...el };
-        });
-      }
-    },
+
     addLayer() {
-     // console.log("addLayer");
-      this.dataKey += 1;
-      this.layers.push({
-        dataKey: this.dataKey,
+      console.log("addLayer", this.maxLayersCount);
+      const newLayer = {
+        dataKey: this.maxLayersCount + 1,
         opacity: "1.00",
         order: 0,
         queryable: false,
         title: "Open street map",
+      };
+      this.$store.commit("map/UPDATE_BASEMAP", {
+        layers: [...this.basemap.layers, newLayer],
+        id: this.basemap.id,
       });
     },
+
     removeLayer(dataKey) {
       this.layers = this.layers.filter((layer) => layer.dataKey !== dataKey);
     },
-    updateLayer(payload) {
-      const index = this.layers.findIndex(
-        (el) => el.dataKey === payload.dataKey
-      );
-      //console.log("updateLayer", index);
-      this.layers[index] = payload;
-      let basemapData = this.basemapForm;
-      basemapData["layers"] = this.layers;
-      this.$emit("update-basemap", basemapData); //* update store
-    }, */
-  },
-  mounted() {
-    this.title = this.basemap.title;
-    this.layers = this.basemap.layers;
-    // this.basemapForm = this.basemap;
-    //this.basemapForm = this.basemap.layers;
-    // this.mapLayersDataKey();
   },
 };
 </script>
diff --git a/src/store/modules/map.js b/src/store/modules/map.js
index ed3953c03ff0e5842675262528450bcad325c01a..751cb4203ffd9104f9488ad6db6dab51ba3e1609 100644
--- a/src/store/modules/map.js
+++ b/src/store/modules/map.js
@@ -5,19 +5,19 @@ const map = {
   namespaced: true,
   state: {
     basemaps: [
-      {
-        "id": 1,
-        "title": "Fond mock",
-        "layers": [
-          {
-            "id": 1,
-            "title": "Open street map mock",
-            "opacity": "1.50",
-            "order": 2,
-            "queryable": true
-          }
-        ]
-      },
+      /*  {
+         "id": 1,
+         "title": "Fond mock",
+         "layers": [
+           {
+             "id": 1,
+             "title": "Open street map mock",
+             "opacity": "1.50",
+             "order": 2,
+             "queryable": true
+           }
+         ]
+       }, */
       /*       {
               "id": 10,
               "title": "Fond mock",
@@ -47,7 +47,7 @@ const map = {
     ],
     features: [],
     layers: [
-      /* {
+      {
         "id": 1,
         "options": {
           "maxZoom": 20,
@@ -56,27 +56,53 @@ const map = {
         "title": "Open street map",
         "service": "https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png",
         "schema_type": "tms"
-      } */
+      }
     ],
     serviceMap: "https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png",
     optionsMap: {
       "attribution": "&copy; contributeurs d'<a href=\"https://osm.org/copyright\">OpenStreetMap</a>",
       "maxZoom": 20
-    }
+    },
+    //availableLayers: ["https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png"]
   },
   mutations: {
     SET_BASEMAPS(state, basemaps) {
       state.basemaps = basemaps;
     },
     CREATE_BASEMAP(state, id) {
-      state.basemaps = [...state.basemaps, { id }]
+      state.basemaps = [...state.basemaps, { id, layers: [] }]
     },
-    DELETE_BASEMAP(state, dataKey) {
-      state.basemaps = state.basemaps.filter(el => el.dataKey !== dataKey)
+    DELETE_BASEMAP(state, id) {
+      state.basemaps = state.basemaps.filter(el => el.id !== id)
     },
     UPDATE_BASEMAPS(state, basemaps) {
       state.basemaps = basemaps;
-    }
+    },
+    UPDATE_BASEMAP(state, { title, id, layers }) {
+      const index = state.basemaps.findIndex((el) => el.id === id);
+      if (index !== -1) {
+        if (title) {
+          state.basemaps[index].title = title
+        }
+        if (layers) {
+          state.basemaps[index].layers = layers
+        }
+      }
+    },
+    DELETE_BASEMAP_LAYER(state, { basemapId, layerId }) {
+      const index = state.basemaps.findIndex((el) => el.id === basemapId);
+      if (index !== -1) {
+        state.basemaps[index].layers = state.basemaps[index].layers.filter((el) => el.dataKey !== layerId)
+      }
+    },
+    UPDATE_BASEMAP_LAYER(state, { basemapId, layerId, layer }) {
+      const index = state.basemaps.findIndex((el) => el.id === basemapId);
+      if (index !== -1) {
+        state.basemaps[index].layers = state.basemaps[index].layers.map(
+          (el) => el.dataKey === layerId ? layer : el
+        )
+      }
+    },
   },
 
   getters: {
diff --git a/src/views/project/Project_mapping.vue b/src/views/project/Project_mapping.vue
index 9fef56ccb94c10cef3d354282cf8ca4cefdf11f5..0820aca628f3e31e6a1081f065e0cfa362be5b3f 100644
--- a/src/views/project/Project_mapping.vue
+++ b/src/views/project/Project_mapping.vue
@@ -27,7 +27,6 @@
           :key="basemap.dataKey"
           :basemap="basemap"
         />
-         <!--  v-on:update-basemap="updateBasemap2store" -->
       </div>
 
       <button
@@ -52,33 +51,16 @@ export default {
     ProjectMappingBasemap: Project_mapping_basemap,
   },
 
-  /* data() {
-    return {
-      dataKey: 0,
-    };
-  }, */
   computed: {
     ...mapState("map", ["basemaps"]),
     ...mapGetters("map", ["basemapMaxId"]),
-   /*  basemapForms: function () {
-      return this.basemaps.map((el) => {
-        this.dataKey += 1;
-        return { dataKey: this.dataKey, ...el };
-      });
-    }, */
   },
+
   methods: {
-    addBasemap() { // * ajout d'un fond cartographique
+    addBasemap() {
       this.$store.commit("map/CREATE_BASEMAP", this.basemapMaxId + 1);
     },
-    /* updateBasemap2store(payload) {
-      const index = this.basemapForms.findIndex(
-        (el) => el.dataKey === payload.dataKey
-      );
-     // console.log("updateBasemap2store", index);
-      this.basemapForms[index] = payload;
-      this.$store.commit("map/UPDATE_BASEMAPS", this.basemapForms);
-    }, */
+
     saveChanges() {
       this.$store.dispatch("map/SAVE_BASEMAPS");
     },