diff --git a/src/components/Feature/Detail/FeatureHeader.vue b/src/components/Feature/Detail/FeatureHeader.vue
index 9521e923caf0b8a56fa840d86fcc2b751e752c04..d1ab51b94908bffa2dae66f0f15f177802f1c326 100644
--- a/src/components/Feature/Detail/FeatureHeader.vue
+++ b/src/components/Feature/Detail/FeatureHeader.vue
@@ -78,7 +78,7 @@
             :class="['ui button button-hover-orange tiny-margin', { disabled: false }]"
             data-tooltip="Enregistrer les modifications"
             data-position="bottom center"
-            @click="saveFastEdition"
+            @click="$store.dispatch('feature/SEND_FEATURE', $route.name)"
           >
             <i
               class="save fitted icon"  
@@ -252,11 +252,6 @@ export default {
       });
     },
 
-    saveFastEdition() {
-      this.$store.dispatch('feature/SEND_FEATURE', this.$route.name)
-        .then(() => console.log('sent'));
-    },
-
     updateTitle(e) {
       this.$store.commit('feature/UPDATE_FORM_FIELD', { name: 'title', value: e.target.value });
     },
diff --git a/src/views/Feature/FeatureDetail.vue b/src/views/Feature/FeatureDetail.vue
index 3ede1cb7b2fee1d8fade44488ffd9ad477017db3..487de4032e5b3e397940fd6a525c1a94edcea06a 100644
--- a/src/views/Feature/FeatureDetail.vue
+++ b/src/views/Feature/FeatureDetail.vue
@@ -135,16 +135,20 @@ export default {
     next(); // continue page loading
   },
 
+  beforeRouteUpdate (to, from, next) {
+    let leaving = true; // by default navigate to next route
+    if (this.hasUnsavedChange) {
+      leaving = this.confirmLeave(); // prompt user that there is unsaved changes or that features order might change
+    }
+    next(leaving);
+  },
+
   beforeRouteLeave (to, from, next) {
-    if (// In case of filtered listed featuers, if the user wants to edit a feature,
-      from.query.offset >= 0 &&
-        to.name === 'editer-signalement' &&
-        !this.confirmLeave() // warn the user that features order might change
-    ){
-      next(false);
-    } else {// Navigate to next view
-      next();
+    let leaving = true; // by default navigate to next route
+    if (this.hasUnsavedChange || (from.query.offset >= 0 && to.name === 'editer-signalement')) {
+      leaving = this.confirmLeave(); // prompt user that there is unsaved changes or that features order might change
     }
+    next(leaving);
   },
 
   data() {
@@ -182,7 +186,19 @@ export default {
     ]),
     ...mapState('feature', [
       'currentFeature',
+      'form',
     ]),
+
+    hasUnsavedChange() {
+      if (this.form.title !== this.currentFeature.title) return true;
+      if (this.form.description.value !== this.currentFeature.description) return true;
+      if (this.form.status.value !== this.currentFeature.status) return true;
+      for (const xForm of this.$store.state.feature.extra_forms) {
+        const originalField = this.currentFeature.feature_data.find(el => el.label === xForm.label);
+        if (originalField && xForm.value !== originalField.value) return true;
+      }
+      return false;
+    }
   },
 
   watch: {
@@ -266,16 +282,25 @@ export default {
     },
 
     confirmLeave() {
-      return window.confirm('Vous allez quittez la vue signalement filtré, l\'ordre des signalements pourrait changer après édition d\'un signalement.');
+      return window.confirm(this.project.fast_edition_mode && this.hasUnsavedChange ?
+        'Les modifications apportées au signalement ne seront pas sauvegardées, continuer ?':
+        'Vous allez quittez la vue signalement filtré, l\'ordre des signalements pourrait changer après édition d\'un signalement.');
     },
 
-    async pushNgo(newEntry) {
-      this.$router.push(newEntry); //* update the params or queries in the route/url
+    async reloadPage() {
       await this.getPageInfo();
       mapService.removeFeatures();
       this.addFeatureToMap();
     },
 
+    pushNgo(newEntry) {
+      this.$router.push(newEntry) //* update the params or queries in the route/url
+        .then(() => {
+          this.reloadPage();
+        })
+        .catch(() => true); //* catch error if navigation get aborted (in beforeRouteUpdate)
+    },
+
     goBackToProject(message) {
       this.$router.push({
         name: 'project_detail',