diff --git a/module/rdd-tmr-dialog.js b/module/rdd-tmr-dialog.js
index d39e9bd6..7d7d03d0 100644
--- a/module/rdd-tmr-dialog.js
+++ b/module/rdd-tmr-dialog.js
@@ -214,24 +214,12 @@ export class RdDTMRDialog extends Dialog {
       this.actor.rollLireSigneDraconique(this._getActorCoord());
     });
 
-    html.find('#dir-top').click((event) => {
-      this.moveFromKey("top");
-    });
-    html.find('#dir-top-left').click((event) => {
-      this.moveFromKey("top-left");
-    });
-    html.find('#dir-top-right').click((event) => {
-      this.moveFromKey("top-right");
-    });
-    html.find('#dir-bottom-left').click((event) => {
-      this.moveFromKey("bottom-left");
-    });
-    html.find('#dir-bottom-right').click((event) => {
-      this.moveFromKey("bottom-right");
-    });
-    html.find('#dir-bottom').click((event) => {
-      this.moveFromKey("bottom");
-    });
+    html.find('#dir-top').click((event) => this.moveFromKey("top"));
+    html.find('#dir-top-left').click((event) => this.moveFromKey("top-left"));
+    html.find('#dir-top-right').click((event) => this.moveFromKey("top-right"));
+    html.find('#dir-bottom-left').click((event) => this.moveFromKey("bottom-left"));
+    html.find('#dir-bottom-right').click((event) => this.moveFromKey("bottom-right"));
+    html.find('#dir-bottom').click((event) => this.moveFromKey("bottom"));
 
     // Gestion du cout de montée en points de rêve
     let reveCout = ((this.tmrdata.isRapide && !EffetsDraconiques.isDeplacementAccelere(this.actor)) ? -2 : -1) - this.actor.countMonteeLaborieuse();
@@ -243,9 +231,7 @@ export class RdDTMRDialog extends Dialog {
     // Le reste...
     this.updateValuesDisplay();
     let tmr = TMRUtility.getTMR(this._getActorCoord());
-    await this.manageRencontre(tmr, () => {
-      this.postRencontre(tmr);
-    });
+    await this.manageRencontre(tmr);
   }
 
   /* -------------------------------------------- */
@@ -281,6 +267,7 @@ export class RdDTMRDialog extends Dialog {
 
   /* -------------------------------------------- */
   async close() {
+    this.descenteTMR = true;
     if (this.actor.tmrApp) {
       this.actor.tmrApp = undefined; // Cleanup reference
       if (!this.viewOnly) {
@@ -486,12 +473,13 @@ export class RdDTMRDialog extends Dialog {
   }
 
   /* -------------------------------------------- */
-  async manageRencontre(tmr, postRencontre) {
+  async manageRencontre(tmr) {
     if (this.viewOnly) {
       return;
     }
+    this.descenteTMR = false;
     this.currentRencontre = undefined;
-    if (this._presentCite(tmr, postRencontre)) {
+    if (this._presentCite(tmr)) {
       return;
     }
     let rencontre = await this._jetDeRencontre(tmr);
@@ -501,27 +489,27 @@ export class RdDTMRDialog extends Dialog {
       console.log("manageRencontre", rencontre);
       this.currentRencontre = duplicate(rencontre);
 
-      let dialog = new RdDTMRRencontreDialog("", this, this.currentRencontre, postRencontre);
+      let dialog = new RdDTMRRencontreDialog(this, this.currentRencontre, () => this.postRencontre(tmr));
       dialog.render(true);
     }
     else {
-      postRencontre();
+      this.postRencontre(tmr);
     }
   }
 
   /* -------------------------------------------- */
-  _presentCite(tmr, postRencontre) {
+  _presentCite(tmr) {
     const presentCite = this.casesSpeciales.find(c => EffetsDraconiques.presentCites.isCase(c, tmr.coord));
     if (presentCite) {
       this.minimize();
       const caseData = presentCite;
-      EffetsDraconiques.presentCites.choisirUnPresent(caseData, (type => this._utiliserPresentCite(presentCite, type, tmr, postRencontre)));
+      EffetsDraconiques.presentCites.choisirUnPresent(caseData, (type => this._utiliserPresentCite(presentCite, type, tmr)));
     }
     return presentCite;
   }
 
   /* -------------------------------------------- */
-  async _utiliserPresentCite(presentCite, typeRencontre, tmr, postRencontre) {
+  async _utiliserPresentCite(presentCite, typeRencontre, tmr) {
     this.currentRencontre = TMRRencontres.getRencontre(typeRencontre);
     await TMRRencontres.evaluerForceRencontre(this.currentRencontre);
     await EffetsDraconiques.presentCites.ouvrirLePresent(this.actor, presentCite);
@@ -540,7 +528,7 @@ export class RdDTMRDialog extends Dialog {
     await this._tentativeMaitrise(rencontreData);
 
     this.maximize();
-    postRencontre();
+    this.postRencontre(tmr);
   }
 
   /* -------------------------------------------- */
@@ -611,7 +599,6 @@ export class RdDTMRDialog extends Dialog {
 
   async _resultatMaitriseCaseHumide(rollData) {
     await this.souffleSiEchecTotal(rollData);
-    this.toclose = rollData.rolled.isEchec;
     if (rollData.rolled.isSuccess && rollData.double) {
       rollData.previous = { rolled: rollData.rolled, ajustements: rollData.ajustements };
       rollData.double = undefined;
@@ -624,7 +611,7 @@ export class RdDTMRDialog extends Dialog {
       content: await renderTemplate(`systems/foundryvtt-reve-de-dragon/templates/chat-resultat-maitrise-tmr.html`, rollData)
     });
     if (rollData.rolled.isEchec) {
-      this.close();
+      await this.close();
     }
   }
 
@@ -734,8 +721,6 @@ export class RdDTMRDialog extends Dialog {
     if (rollData.rolled.isETotal) {
       rollData.souffle = await this.actor.ajouterSouffle({ chat: false });
     }
-    this.toclose = rollData.rolled.isEchec;
-
     rollData.poesie = await Poetique.getExtrait();
     ChatMessage.create({
       whisper: ChatUtility.getWhisperRecipientsAndGMs(game.user.name),
@@ -982,7 +967,7 @@ export class RdDTMRDialog extends Dialog {
     this.actor.notifyRefreshTMR();
 
     if (deplacementType == 'normal') { // Pas de rencontres après un saut de type passeur/changeur/...
-      await this.manageRencontre(tmr, () => this.postRencontre(tmr));
+      await this.manageRencontre(tmr);
     }
     else {
       await this.postRencontre(tmr);
@@ -1002,13 +987,13 @@ export class RdDTMRDialog extends Dialog {
   async postRencontre(tmr) {
     if (!(this.viewOnly || this.currentRencontre)) {
       // TODO: vérifier que la méthode s'arrête en cas de non-maîtrise
-      await this.manageCaseHumide(tmr);
-      await this.conquerirCiteFermee(tmr);
-      await this.purifierPeriple(tmr);
-      await this.conquerirTMR(tmr);
-      await this.validerVisite(tmr);
-      await this.declencheSortEnReserve(tmr.coord);
-      await this.actor.checkSoufflePeage(tmr);
+      if (!this.descenteTMR) await this.manageCaseHumide(tmr);
+      if (!this.descenteTMR) await this.conquerirCiteFermee(tmr);
+      if (!this.descenteTMR) await this.purifierPeriple(tmr);
+      if (!this.descenteTMR) await this.conquerirTMR(tmr);
+      if (!this.descenteTMR) await this.validerVisite(tmr);
+      if (!this.descenteTMR) await this.declencheSortEnReserve(tmr.coord);
+      if (!this.descenteTMR) await this.actor.checkSoufflePeage(tmr);
     }
   }
 
diff --git a/module/rdd-tmr-rencontre-dialog.js b/module/rdd-tmr-rencontre-dialog.js
index 50b03df2..ac21f161 100644
--- a/module/rdd-tmr-rencontre-dialog.js
+++ b/module/rdd-tmr-rencontre-dialog.js
@@ -2,7 +2,7 @@
 export class RdDTMRRencontreDialog extends Dialog {
 
   /* -------------------------------------------- */
-  constructor(html, tmrApp, rencontre, postRencontre) {
+  constructor(tmrApp, rencontre, postRencontre) {
     const dialogConf = {
       title: "Rencontre en TMR!",
       content: "Vous rencontrez un " + rencontre.name + " de force " + rencontre.force + "<br>",