diff --git a/3/ecolyo.4fdcb53af560576def95.js b/3/ecolyo.9e542255cb37015c1678.js
similarity index 99%
rename from 3/ecolyo.4fdcb53af560576def95.js
rename to 3/ecolyo.9e542255cb37015c1678.js
index cc100d37e92d99cc7e6b69ca20707bd7dd59cc60..a1800068506d63ae203efd92b692c38c6411f1ee 100644
--- a/3/ecolyo.4fdcb53af560576def95.js
+++ b/3/ecolyo.9e542255cb37015c1678.js
@@ -2150,6 +2150,7 @@ var _react = _interopRequireWildcard(__webpack_require__("ivGQ"));
 var _consumption = _interopRequireDefault(__webpack_require__("zET3"));
 var _performanceIndicator = _interopRequireDefault(__webpack_require__("1il/"));
 var _hooks = __webpack_require__("6FOS");
+var _utils = __webpack_require__("RgLR");
 var _Comparison = _interopRequireDefault(__webpack_require__("QpDQ"));
 var _ElecHalfHourMonthlyAnalysis = _interopRequireDefault(__webpack_require__("//i3"));
 var _IncompleteDataWarning = _interopRequireDefault(__webpack_require__("eyR8"));
@@ -2210,7 +2211,7 @@ var MonthlyAnalysis = function MonthlyAnalysis(_ref) {
     var subscribed = true;
     var populateData = /*#__PURE__*/function () {
       var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
-        var timePeriod, comparisonTimePeriod, resultFluids, fetchedIncompleteDataFluids, fetchedPerformanceIndicators;
+        var timePeriod, comparisonTimePeriod, _yield$Promise$all, _yield$Promise$all2, resultFluids, fetchedIncompleteDataFluids, fetchedPerformanceIndicators;
         return _regenerator.default.wrap(function _callee$(_context) {
           while (1) {
             switch (_context.prev = _context.next) {
@@ -2233,13 +2234,12 @@ var MonthlyAnalysis = function MonthlyAnalysis(_ref) {
                   }).endOf('month')
                 };
                 _context.next = 5;
-                return consumptionService.getFluidsWithDataForTimePeriod([_enums.FluidType.ELECTRICITY, _enums.FluidType.WATER, _enums.FluidType.GAS], timePeriod);
+                return Promise.all([consumptionService.getFluidsWithDataForTimePeriod(_utils.allFluids, timePeriod), consumptionService.getFluidsWithIncompleteData(_utils.allFluids, timePeriod.startDate)]);
               case 5:
-                resultFluids = _context.sent;
-                _context.next = 8;
-                return consumptionService.getFluidsWithIncompleteData([_enums.FluidType.ELECTRICITY, _enums.FluidType.WATER, _enums.FluidType.GAS], timePeriod.startDate);
-              case 8:
-                fetchedIncompleteDataFluids = _context.sent;
+                _yield$Promise$all = _context.sent;
+                _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 2);
+                resultFluids = _yield$Promise$all2[0];
+                fetchedIncompleteDataFluids = _yield$Promise$all2[1];
                 setIncompleteDataFluids(fetchedIncompleteDataFluids);
                 _context.next = 12;
                 return consumptionService.getPerformanceIndicators(timePeriod, _enums.TimeStep.MONTH, resultFluids, comparisonTimePeriod);
diff --git a/6/ecolyo.d1ae731e63a56e0cce3f.js b/6/ecolyo.94b4ac94168bc001f899.js
similarity index 98%
rename from 6/ecolyo.d1ae731e63a56e0cce3f.js
rename to 6/ecolyo.94b4ac94168bc001f899.js
index 99ae0bc9146781953505b771cbc6341adeda84f5..2d200c48a6a0aa33f5d2e1e73ba15c41234e2d85 100644
--- a/6/ecolyo.d1ae731e63a56e0cce3f.js
+++ b/6/ecolyo.94b4ac94168bc001f899.js
@@ -440,35 +440,32 @@ var ExportLoadingModal = function ExportLoadingModal(_ref) {
   }(), [client, t]);
   var getExportDataSheet = (0, _react2.useCallback)( /*#__PURE__*/function () {
     var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(fluidType) {
-      var consumptionService, _yield$consumptionSer, _yield$consumptionSer2, firstDataDate, _yield$consumptionSer3, _yield$consumptionSer4, lastDataDate, timePeriod, dataLoad, exportDataSheet, _iterator2, _step2, data, dataRow;
+      var consumptionService, _yield$Promise$all, _yield$Promise$all2, firstDataDates, lastDataDates, firstDataDate, lastDataDate, timePeriod, dataLoad, exportDataSheet, _iterator2, _step2, data, dataRow;
       return _regenerator.default.wrap(function _callee2$(_context2) {
         while (1) {
           switch (_context2.prev = _context2.next) {
             case 0:
               consumptionService = new _consumption.default(client);
               _context2.next = 3;
-              return consumptionService.fetchAllFirstDateData([fluidType], _enums.TimeStep.MONTH);
+              return Promise.all([consumptionService.fetchAllFirstDateData([fluidType], _enums.TimeStep.MONTH), consumptionService.fetchAllLastDateData([fluidType], _enums.TimeStep.MONTH)]);
             case 3:
-              _yield$consumptionSer = _context2.sent;
-              _yield$consumptionSer2 = (0, _slicedToArray2.default)(_yield$consumptionSer, 1);
-              firstDataDate = _yield$consumptionSer2[0];
-              _context2.next = 8;
-              return consumptionService.fetchAllLastDateData([fluidType], _enums.TimeStep.MONTH);
-            case 8:
-              _yield$consumptionSer3 = _context2.sent;
-              _yield$consumptionSer4 = (0, _slicedToArray2.default)(_yield$consumptionSer3, 1);
-              lastDataDate = _yield$consumptionSer4[0];
+              _yield$Promise$all = _context2.sent;
+              _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 2);
+              firstDataDates = _yield$Promise$all2[0];
+              lastDataDates = _yield$Promise$all2[1];
+              firstDataDate = firstDataDates[0];
+              lastDataDate = lastDataDates[0];
               if (!(!firstDataDate || !lastDataDate)) {
-                _context2.next = 13;
+                _context2.next = 11;
                 break;
               }
               return _context2.abrupt("return", null);
-            case 13:
+            case 11:
               timePeriod = {
                 startDate: firstDataDate,
                 endDate: lastDataDate
               };
-              _context2.next = 16;
+              _context2.next = 14;
               return consumptionService.getGraphData({
                 timePeriod: timePeriod,
                 timeStep: _enums.TimeStep.MONTH,
@@ -476,60 +473,60 @@ var ExportLoadingModal = function ExportLoadingModal(_ref) {
                 isHome: false,
                 isExport: true
               });
-            case 16:
+            case 14:
               dataLoad = _context2.sent;
               if (dataLoad !== null && dataLoad !== void 0 && dataLoad.actualData) {
-                _context2.next = 19;
+                _context2.next = 17;
                 break;
               }
               return _context2.abrupt("return", null);
-            case 19:
+            case 17:
               exportDataSheet = {
                 fluidName: t("FLUID.".concat(_enums.FluidType[fluidType], ".LABEL")),
                 data: []
               };
               _iterator2 = _createForOfIteratorHelper(dataLoad.actualData);
-              _context2.prev = 21;
+              _context2.prev = 19;
               _iterator2.s();
-            case 23:
+            case 21:
               if ((_step2 = _iterator2.n()).done) {
-                _context2.next = 33;
+                _context2.next = 31;
                 break;
               }
               data = _step2.value;
               if (!(data.value === -1)) {
-                _context2.next = 27;
+                _context2.next = 25;
                 break;
               }
-              return _context2.abrupt("continue", 31);
-            case 27:
-              _context2.next = 29;
+              return _context2.abrupt("continue", 29);
+            case 25:
+              _context2.next = 27;
               return buildDataRow(data, fluidType);
-            case 29:
+            case 27:
               dataRow = _context2.sent;
               exportDataSheet.data.push(dataRow);
+            case 29:
+              _context2.next = 21;
+              break;
             case 31:
-              _context2.next = 23;
+              _context2.next = 36;
               break;
             case 33:
-              _context2.next = 38;
-              break;
-            case 35:
-              _context2.prev = 35;
-              _context2.t0 = _context2["catch"](21);
+              _context2.prev = 33;
+              _context2.t0 = _context2["catch"](19);
               _iterator2.e(_context2.t0);
-            case 38:
-              _context2.prev = 38;
+            case 36:
+              _context2.prev = 36;
               _iterator2.f();
-              return _context2.finish(38);
-            case 41:
+              return _context2.finish(36);
+            case 39:
               return _context2.abrupt("return", exportDataSheet);
-            case 42:
+            case 40:
             case "end":
               return _context2.stop();
           }
         }
-      }, _callee2, null, [[21, 35, 38, 41]]);
+      }, _callee2, null, [[19, 33, 36, 39]]);
     }));
     return function (_x3) {
       return _ref3.apply(this, arguments);
diff --git a/app/ecolyo.5d6bbc74e14b77482505.js b/app/ecolyo.73efe2e65bdac9f5c334.js
similarity index 99%
rename from app/ecolyo.5d6bbc74e14b77482505.js
rename to app/ecolyo.73efe2e65bdac9f5c334.js
index fd2d0eaf113dad1e087299893314b4ab0464b33c..e77fa73f793c739b2113584870e5b09da91a0636 100644
--- a/app/ecolyo.5d6bbc74e14b77482505.js
+++ b/app/ecolyo.73efe2e65bdac9f5c334.js
@@ -64,7 +64,7 @@
 /******/
 /******/ 	// script path function
 /******/ 	function jsonpScriptSrc(chunkId) {
-/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"3":"4fdcb53af560576def95","4":"33628861e9b4596e92a2","5":"c8ff0c6c70d106accae3","6":"d1ae731e63a56e0cce3f","7":"1e90cb873be450d05a56","8":"42acbbc92a4cf3e13c3e","9":"f45e19d3c34ba67e355b","10":"fe3625578fa387c11975","11":"346fcb0fa7b2e3565ad3"}[chunkId] + ".js"
+/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"3":"9e542255cb37015c1678","4":"33628861e9b4596e92a2","5":"c8ff0c6c70d106accae3","6":"94b4ac94168bc001f899","7":"1e90cb873be450d05a56","8":"42acbbc92a4cf3e13c3e","9":"f45e19d3c34ba67e355b","10":"fe3625578fa387c11975","11":"346fcb0fa7b2e3565ad3"}[chunkId] + ".js"
 /******/ 	}
 /******/
 /******/ 	// The require function
@@ -3936,29 +3936,9 @@ var ChallengeCardDone = function ChallengeCardDone(_ref) {
     currentChallenge = _useAppSelector.currentChallenge;
   var _useState = (0, _react.useState)(_default2.default),
     _useState2 = (0, _slicedToArray2.default)(_useState, 2),
-    winIcon = _useState2[0],
-    setWinIcon = _useState2[1];
-  var _useState3 = (0, _react.useState)(_default2.default),
-    _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
-    lossIcon = _useState4[0],
-    setLossIcon = _useState4[1];
-  var getUserSaving = function getUserSaving(_userChallenge) {
-    var label;
-    if (_userChallenge.success === _enums.UserChallengeSuccess.WIN) label = t('challenge.card_done.saving');else label = t('challenge.card_done.depense');
-    return label + ' ';
-  };
-  var getResultLabel = function getResultLabel(_userChallenge) {
-    switch (_userChallenge.success) {
-      case _enums.UserChallengeSuccess.WIN:
-        return t('challenge.card_done.win');
-      case _enums.UserChallengeSuccess.LOST:
-      default:
-        return t('challenge.card_done.lost');
-    }
-  };
-  var getIcon = function getIcon(_userChallenge) {
-    if (_userChallenge.success == _enums.UserChallengeSuccess.WIN) return winIcon;else return lossIcon;
-  };
+    resultIcon = _useState2[0],
+    setResultIcon = _useState2[1];
+  var isSuccess = userChallenge.success === _enums.UserChallengeSuccess.WIN;
   var goDuel = /*#__PURE__*/function () {
     var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
       return _regenerator.default.wrap(function _callee$(_context) {
@@ -4007,22 +3987,17 @@ var ChallengeCardDone = function ChallengeCardDone(_ref) {
     }
     function _handleEcogestureIcon() {
       _handleEcogestureIcon = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
-        var icon, icon2;
+        var icon;
         return _regenerator.default.wrap(function _callee3$(_context3) {
           while (1) {
             switch (_context3.prev = _context3.next) {
               case 0:
                 _context3.next = 2;
-                return (0, _utils.importIconById)(userChallenge.id + '-1', 'duelResult');
+                return (0, _utils.importIconById)(userChallenge.id + '-' + Number(isSuccess), 'duelResult');
               case 2:
                 icon = _context3.sent;
-                setWinIcon(icon || _default2.default);
-                _context3.next = 6;
-                return (0, _utils.importIconById)(userChallenge.id + '-0', 'duelResult');
-              case 6:
-                icon2 = _context3.sent;
-                setLossIcon(icon2 || _default2.default);
-              case 8:
+                setResultIcon(icon || _default2.default);
+              case 4:
               case "end":
                 return _context3.stop();
             }
@@ -4032,7 +4007,7 @@ var ChallengeCardDone = function ChallengeCardDone(_ref) {
       return _handleEcogestureIcon.apply(this, arguments);
     }
     handleEcogestureIcon();
-  }, [userChallenge]);
+  }, [isSuccess, userChallenge]);
   return /*#__PURE__*/_react.default.createElement("div", {
     className: "cardContent cardDone"
   }, /*#__PURE__*/_react.default.createElement("div", {
@@ -4041,7 +4016,7 @@ var ChallengeCardDone = function ChallengeCardDone(_ref) {
     className: "iconResult"
   }, /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
     className: "imgResult",
-    icon: getIcon(userChallenge),
+    icon: resultIcon,
     size: 180
   })), /*#__PURE__*/_react.default.createElement("div", {
     className: "statsResult"
@@ -4050,9 +4025,9 @@ var ChallengeCardDone = function ChallengeCardDone(_ref) {
       win: userChallenge.success === _enums.UserChallengeSuccess.WIN,
       lost: userChallenge.success === _enums.UserChallengeSuccess.LOST
     })
-  }, getResultLabel(userChallenge)), /*#__PURE__*/_react.default.createElement("span", {
+  }, isSuccess ? t('challenge.card_done.win') : t('challenge.card_done.lost')), /*#__PURE__*/_react.default.createElement("span", {
     className: "text-18"
-  }, getUserSaving(userChallenge), /*#__PURE__*/_react.default.createElement("span", {
+  }, isSuccess ? t('challenge.card_done.saving') : t('challenge.card_done.depense'), ' ', /*#__PURE__*/_react.default.createElement("span", {
     className: "text-18-bold"
   }, (0, _utils.formatNumberValues)(Math.abs(userChallenge.duel.threshold - userChallenge.duel.userConsumption)) + ' ', "\u20AC"), /*#__PURE__*/_react.default.createElement("br", null), t('challenge.card_done.final_defi'))), /*#__PURE__*/_react.default.createElement("div", {
     className: "buttons"
@@ -11905,12 +11880,8 @@ var DuelResultModal = function DuelResultModal(_ref) {
     t = _useI18n.t;
   var _useState = (0, _react.useState)(_default2.default),
     _useState2 = (0, _slicedToArray2.default)(_useState, 2),
-    winIcon = _useState2[0],
-    setWinIcon = _useState2[1];
-  var _useState3 = (0, _react.useState)(_default2.default),
-    _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
-    lossIcon = _useState4[0],
-    setLossIcon = _useState4[1];
+    resultIcon = _useState2[0],
+    setResultIcon = _useState2[1];
   var result = (0, _utils.formatNumberValues)(Math.abs(userChallenge.duel.threshold - userChallenge.duel.userConsumption));
   var statusKey = win ? 'success' : 'lost';
   (0, _react.useEffect)(function () {
@@ -11919,22 +11890,17 @@ var DuelResultModal = function DuelResultModal(_ref) {
     }
     function _handleEcogestureIcon() {
       _handleEcogestureIcon = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
-        var icon, icon2;
+        var icon;
         return _regenerator.default.wrap(function _callee$(_context) {
           while (1) {
             switch (_context.prev = _context.next) {
               case 0:
                 _context.next = 2;
-                return (0, _utils.importIconById)(userChallenge.id + '-1', 'duelResult');
+                return (0, _utils.importIconById)(userChallenge.id + '-' + Number(win), 'duelResult');
               case 2:
                 icon = _context.sent;
-                setWinIcon(icon || _default2.default);
-                _context.next = 6;
-                return (0, _utils.importIconById)(userChallenge.id + '-0', 'duelResult');
-              case 6:
-                icon2 = _context.sent;
-                setLossIcon(icon2 || _default2.default);
-              case 8:
+                setResultIcon(icon || _default2.default);
+              case 4:
               case "end":
                 return _context.stop();
             }
@@ -11944,7 +11910,7 @@ var DuelResultModal = function DuelResultModal(_ref) {
       return _handleEcogestureIcon.apply(this, arguments);
     }
     handleEcogestureIcon();
-  }, [userChallenge]);
+  }, [userChallenge, win]);
   return /*#__PURE__*/_react.default.createElement(_Dialog.default, {
     open: open,
     onClose: handleCloseClick,
@@ -11965,7 +11931,7 @@ var DuelResultModal = function DuelResultModal(_ref) {
     size: 300
   }), /*#__PURE__*/_react.default.createElement(_StyledIcon.default, {
     className: "imgResult",
-    icon: win ? winIcon : lossIcon,
+    icon: resultIcon,
     size: 180
   })), /*#__PURE__*/_react.default.createElement("div", {
     className: "text-28-normal-uppercase title"
diff --git a/index.html b/index.html
index 7ea7742143b38378a60f9bc2a6a7e52d06dc9be1..45501e67fd4a3b2fb0b10bc5243dff254557ec04 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.9cebad5ae7ea932ed345.js"></script><script src="app/ecolyo.5d6bbc74e14b77482505.js"></script></div></body></html>
\ No newline at end of file
+<!DOCTYPE html><html lang="{{.Locale}}"><head><meta charset="utf-8"><title>Ecolyo</title><link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32"><link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16"><!-- PWA Manifest --><link rel="manifest" href="/manifest.json" crossorigin="use-credentials"><link rel="mask-icon" href="/safari-pinned-tab.svg" color="#297EF2"><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,viewport-fit=cover"><!-- PWA Chrome --><link rel="icon" sizes="192x192" href="/android-chrome-192x192.png"><link rel="icon" sizes="512x512" href="/android-chrome-512x512.png"><!-- PWA iOS --><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="apple-touch-startup-image" href="/apple-touch-icon.png"><meta name="apple-mobile-web-app-title" content="Ecolyo"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><!-- PWA Colors --><meta name="theme-color" content="#343641"><meta name="background-color" content="#121212">{{.ThemeCSS}} {{.CozyBar}}<script src="//{{.Domain}}/assets/js/piwik.js"></script></head><body><div role="application" class="application" data-cozy="{{.CozyData}}"><script src="vendors/ecolyo.9cebad5ae7ea932ed345.js"></script><script src="app/ecolyo.73efe2e65bdac9f5c334.js"></script></div></body></html>
\ No newline at end of file
diff --git a/services/enedisHalfHourMonthlyAnalysis/ecolyo.js b/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
index 2b40a865a1b558ea5f9f2fb89bea4be302744ce7..a8f2668595f3f4ec8258fde6bbfed5a07af25c93 100644
--- a/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
+++ b/services/enedisHalfHourMonthlyAnalysis/ecolyo.js
@@ -144613,10 +144613,11 @@ const getEnedisMonthAnalysisData = async (client, month, year) => {
     const weekEndAverages = weekEndValuesArray.map(halfHourArray => arrAvg(halfHourArray));
     // so we calculate the average
     const weekAverages = weekValuesArray.map(halfHourArray => arrAvg(halfHourArray));
+    const [maxPower, offPeakHoursRatio] = await Promise.all([getMonthMaxPower(month, year, client), getOffPeakHoursRatio(month, year, client)]);
     monthlyAveragesLoads.weekDaysHalfHourAverageValues = weekAverages;
     monthlyAveragesLoads.weekEndDaysHalfHourAverageValues = weekEndAverages;
-    monthlyAveragesLoads.maxPower = await getMonthMaxPower(month, year, client);
-    monthlyAveragesLoads.offPeakHoursRatio = await getOffPeakHoursRatio(month, year, client);
+    monthlyAveragesLoads.maxPower = maxPower;
+    monthlyAveragesLoads.offPeakHoursRatio = offPeakHoursRatio;
     return monthlyAveragesLoads;
   }
 };