diff --git a/3/ecolyo.f407a5f06d8f4c483bb7.js b/3/ecolyo.7bb707b268d999ecde60.js
similarity index 99%
rename from 3/ecolyo.f407a5f06d8f4c483bb7.js
rename to 3/ecolyo.7bb707b268d999ecde60.js
index bbc9676432a88a5b15f41af1ebe5eb8c3a494e70..cd26653d049872101bf952ca8057b57ecd2c7816 100644
--- a/3/ecolyo.f407a5f06d8f4c483bb7.js
+++ b/3/ecolyo.7bb707b268d999ecde60.js
@@ -580,16 +580,15 @@ var EcogestureTabsView = function EcogestureTabsView() {
     }
     function _loadEcogestures() {
       _loadEcogestures = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
-        var ecogestureService, currentProfile, _yield$ecogestureServ, ecogestureList, ecogestureHash, availableList, filteredList, doing, objective;
+        var currentProfile, _yield$ecogestureServ, ecogestureList, ecogestureHash, availableList, filteredList, doing, objective;
         return _regenerator.default.wrap(function _callee4$(_context4) {
           while (1) {
             switch (_context4.prev = _context4.next) {
               case 0:
-                ecogestureService = new _ecogesture.default(client);
                 currentProfile = profile.isProfileTypeCompleted ? profileType : profileEcogesture;
-                _context4.next = 4;
+                _context4.next = 3;
                 return ecogestureService.initEcogesture(profile.ecogestureHash);
-              case 4:
+              case 3:
                 _yield$ecogestureServ = _context4.sent;
                 ecogestureList = _yield$ecogestureServ.ecogestureList;
                 ecogestureHash = _yield$ecogestureServ.ecogestureHash;
@@ -598,9 +597,9 @@ var EcogestureTabsView = function EcogestureTabsView() {
                     ecogestureHash: ecogestureHash
                   }));
                 }
-                _context4.next = 10;
+                _context4.next = 9;
                 return ecogestureService.getEcogestureListByProfile(currentProfile);
-              case 10:
+              case 9:
                 availableList = _context4.sent;
                 filteredList = availableList.filter(function (ecogesture) {
                   return ecogesture.viewedInSelection === false;
@@ -619,7 +618,7 @@ var EcogestureTabsView = function EcogestureTabsView() {
                   setTotalViewed(availableList.length - filteredList.length);
                 }
                 setIsLoading(false);
-              case 14:
+              case 13:
               case "end":
                 return _context4.stop();
             }
@@ -632,7 +631,7 @@ var EcogestureTabsView = function EcogestureTabsView() {
     return function () {
       subscribed = false;
     };
-  }, [client, profileEcogesture, profileType, dispatch, profile.ecogestureHash, profile.isProfileTypeCompleted]);
+  }, [profileEcogesture, profileType, dispatch, profile.ecogestureHash, profile.isProfileTypeCompleted, ecogestureService]);
   return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_CozyBar.default, {
     titleKey: "common.title_ecogestures"
   }), /*#__PURE__*/_react.default.createElement(_Header.default, {
diff --git a/4/ecolyo.3b4996d5b14bfb7665c0.js b/4/ecolyo.ebfb4316f0cf5b147c5e.js
similarity index 99%
rename from 4/ecolyo.3b4996d5b14bfb7665c0.js
rename to 4/ecolyo.ebfb4316f0cf5b147c5e.js
index d6fc5796ec96d3d341d023fe2b19fb7175017b66..c3aa0a04c76263503fe1628767fd3ae994f3f730 100644
--- a/4/ecolyo.3b4996d5b14bfb7665c0.js
+++ b/4/ecolyo.ebfb4316f0cf5b147c5e.js
@@ -92,6 +92,11 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
       return !prev;
     });
   }, []);
+
+  /** EnedisMonthlyAnalysisDataService*/
+  var emas = (0, _react.useMemo)(function () {
+    return new _enedisMonthlyAnalysisData.default(client);
+  }, [client]);
   var isDataFullyComplete = (0, _react.useCallback)(function (monthDataloads) {
     var _monthDataloads$weeke, _monthDataloads$week$;
     return (monthDataloads === null || monthDataloads === void 0 ? void 0 : monthDataloads.weekend) && monthDataloads.week && ((_monthDataloads$weeke = monthDataloads.weekend[0]) === null || _monthDataloads$weeke === void 0 ? void 0 : _monthDataloads$weeke.value) !== null && ((_monthDataloads$week$ = monthDataloads.week[0]) === null || _monthDataloads$week$ === void 0 ? void 0 : _monthDataloads$week$.value) !== null;
@@ -114,7 +119,7 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
     }
     function _fetchEnedisAnalysisData() {
       _fetchEnedisAnalysisData = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
-        var cs, isHalfHourLoadActivated, emas, aggregatedDate, data, aggregatedData, percentage;
+        var cs, isHalfHourLoadActivated, aggregatedDate, data, aggregatedData, percentage;
         return _regenerator.default.wrap(function _callee$(_context) {
           while (1) {
             switch (_context.prev = _context.next) {
@@ -131,16 +136,15 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
                 return _context.abrupt("return");
               case 6:
                 if (!isHalfHourLoadActivated) {
-                  _context.next = 15;
+                  _context.next = 14;
                   break;
                 }
-                emas = new _enedisMonthlyAnalysisData.default(client);
                 aggregatedDate = analysisMonth.minus({
                   month: 1
                 });
-                _context.next = 11;
+                _context.next = 10;
                 return emas.getEnedisMonthlyAnalysisByDate(aggregatedDate.year, aggregatedDate.month);
-              case 11:
+              case 10:
                 data = _context.sent;
                 if (data !== null && data !== void 0 && data.length) {
                   aggregatedData = emas.aggregateValuesToDataLoad(data[0]);
@@ -151,13 +155,13 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
                     setFacturePercentage(percentage);
                   }
                 }
-                _context.next = 16;
+                _context.next = 15;
                 break;
-              case 15:
+              case 14:
                 setIsHalfHourActivated(false);
-              case 16:
+              case 15:
                 setIsLoading(false);
-              case 17:
+              case 16:
               case "end":
                 return _context.stop();
             }
@@ -170,7 +174,7 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
     return function () {
       subscribed = false;
     };
-  }, [analysisMonth, client, perfIndicator]);
+  }, [analysisMonth, client, emas, perfIndicator]);
   (0, _react.useEffect)(function () {
     var subscribed = true;
     var fluidsPricesService = new _fluidsPrices.default(client);
@@ -209,7 +213,6 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
   }, [analysisMonth, client]);
   (0, _react.useEffect)(function () {
     var subscribed = true;
-    var enedisMonthlyAnalysisDataService = new _enedisMonthlyAnalysisData.default(client);
     function getOffPeakHours() {
       return _getOffPeakHours.apply(this, arguments);
     }
@@ -225,7 +228,7 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
                   break;
                 }
                 _context3.next = 3;
-                return enedisMonthlyAnalysisDataService.getOffPeakHours();
+                return emas.getOffPeakHours();
               case 3:
                 _offPeakHours = _context3.sent;
                 if (_offPeakHours) {
@@ -244,7 +247,7 @@ var ElecHalfHourMonthlyAnalysis = function ElecHalfHourMonthlyAnalysis(_ref) {
     return function () {
       subscribed = false;
     };
-  }, [client]);
+  }, [emas]);
   return /*#__PURE__*/_react.default.createElement("div", {
     className: "special-elec-container"
   }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
diff --git a/5/ecolyo.0b93fcd50fa933ab69ed.js b/5/ecolyo.d91dcd403b278c15d9f1.js
similarity index 98%
rename from 5/ecolyo.0b93fcd50fa933ab69ed.js
rename to 5/ecolyo.d91dcd403b278c15d9f1.js
index 32ff7dc3c49c3add3f3508462475d47b03cdd0d1..cc53b2021a622009bc3e5a9891b7efedc0617c21 100644
--- a/5/ecolyo.0b93fcd50fa933ab69ed.js
+++ b/5/ecolyo.d91dcd403b278c15d9f1.js
@@ -993,6 +993,9 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
   var fluidService = (0, _react.useMemo)(function () {
     return new _fluid.default(client);
   }, [client]);
+  var accountService = (0, _react.useMemo)(function () {
+    return new _account.default(client);
+  }, [client]);
   var partnersInfoService = (0, _react.useMemo)(function () {
     return new _partnersInfo2.default(client);
   }, [client]);
@@ -1110,7 +1113,7 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
   /** Close modal, update fluid status and reset error state */
   var handleConnectionEnd = (0, _react.useCallback)( /*#__PURE__*/function () {
     var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(isSuccess) {
-      var _currentFluidStatus$c2, account, isUpdating, isGlobalLoginFailed, isEnedisCodeInseeError, shouldDeleteAccount, auth, lastEpglLogin, accountService, updatedFluidStatus;
+      var _currentFluidStatus$c2, account, isUpdating, isGlobalLoginFailed, isEnedisCodeInseeError, shouldDeleteAccount, auth, lastEpglLogin, updatedFluidStatus;
       return _regenerator.default.wrap(function _callee4$(_context4) {
         while (1) {
           switch (_context4.prev = _context4.next) {
@@ -1120,7 +1123,7 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
               isEnedisCodeInseeError = !isUpdating && fluidType === _enums.FluidType.ELECTRICITY;
               shouldDeleteAccount = account && !isSuccess && account && (isGlobalLoginFailed || isEnedisCodeInseeError);
               if (!shouldDeleteAccount) {
-                _context4.next = 14;
+                _context4.next = 13;
                 break;
               }
               (0, _logger.default)('info', "shouldDeleteAccount");
@@ -1131,28 +1134,26 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
                 dispatch((0, _global.setLastEpglLogin)(lastEpglLogin));
               }
               // DELETE ACCOUNT
-              accountService = new _account.default(client);
-              _context4.next = 10;
+              _context4.next = 9;
               return accountService.deleteAccount(account);
-            case 10:
-              _context4.next = 12;
+            case 9:
+              _context4.next = 11;
               return handleAccountDeletion();
-            case 12:
-              _context4.next = 18;
+            case 11:
+              _context4.next = 17;
               break;
-            case 14:
-              _context4.next = 16;
+            case 13:
+              _context4.next = 15;
               return fluidService.getFluidStatus(partnersInfo);
-            case 16:
+            case 15:
               updatedFluidStatus = _context4.sent;
               dispatch((0, _global.setFluidStatus)(updatedFluidStatus));
-            case 18:
-              console.log('closing all stuff');
+            case 17:
               dispatch((0, _chart.setShowConnectionDetails)(false));
               setOpenModal(false);
               setKonnectorState(null);
               setKonnectorErrorDescription(null);
-            case 23:
+            case 21:
             case "end":
               return _context4.stop();
           }
@@ -1162,7 +1163,7 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
     return function (_x) {
       return _ref5.apply(this, arguments);
     };
-  }(), [konnectorErrorDescription, currentFluidStatus, fluidType, fluidSlug, client, handleAccountDeletion, fluidService, partnersInfo, dispatch]);
+  }(), [konnectorErrorDescription, fluidType, currentFluidStatus, dispatch, fluidSlug, accountService, handleAccountDeletion, fluidService, partnersInfo]);
   var toggleModalConnection = (0, _react.useCallback)(function () {
     switch (fluidType) {
       case _enums.FluidType.ELECTRICITY:
@@ -1303,22 +1304,20 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
     }
     function _deleteAccountForConsentRefresh() {
       _deleteAccountForConsentRefresh = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
-        var accountService;
         return _regenerator.default.wrap(function _callee6$(_context6) {
           while (1) {
             switch (_context6.prev = _context6.next) {
               case 0:
                 if (!(shouldRefreshConsent && account)) {
-                  _context6.next = 6;
+                  _context6.next = 5;
                   break;
                 }
-                accountService = new _account.default(client);
-                _context6.next = 4;
+                _context6.next = 3;
                 return accountService.deleteAccount(account);
-              case 4:
-                _context6.next = 6;
+              case 3:
+                _context6.next = 5;
                 return handleAccountDeletion();
-              case 6:
+              case 5:
               case "end":
                 return _context6.stop();
             }
@@ -1328,10 +1327,9 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
       return _deleteAccountForConsentRefresh.apply(this, arguments);
     }
     deleteAccountForConsentRefresh();
-  }, [account, client, handleAccountDeletion, shouldRefreshConsent]);
+  }, [account, accountService, handleAccountDeletion, shouldRefreshConsent]);
   (0, _react.useEffect)(function () {
     var subscribed = true;
-    console.log('🚀 ~ getData ~ subscribed:', subscribed);
     function getData() {
       return _getData.apply(this, arguments);
     }
@@ -1348,6 +1346,7 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
                 }
                 if (subscribed) {
                   setOpenModal(true);
+                  // Reset any error that might have been set after handleConnectionEnd
                   setKonnectorErrorDescription(null);
                   updatedConnection = _objectSpread(_objectSpread({}, currentFluidStatus.connection), {}, {
                     shouldLaunchKonnector: false
@@ -2875,21 +2874,19 @@ exports.GrdfWaitConsent = void 0;
 var _regenerator = _interopRequireDefault(__webpack_require__("hJxD"));
 var _defineProperty2 = _interopRequireDefault(__webpack_require__("J58c"));
 var _asyncToGenerator2 = _interopRequireDefault(__webpack_require__("HZZ/"));
-var _slicedToArray2 = _interopRequireDefault(__webpack_require__("XkwL"));
 var _core = __webpack_require__("rMFn");
 var _grdfMail = _interopRequireDefault(__webpack_require__("70Fk"));
 var _StyledIcon = _interopRequireDefault(__webpack_require__("VP3k"));
 var _I18n = __webpack_require__("nUfk");
 var _enums = __webpack_require__("j0hM");
-var _react = _interopRequireWildcard(__webpack_require__("ivGQ"));
+var _react = _interopRequireDefault(__webpack_require__("ivGQ"));
 var _global = __webpack_require__("33gc");
 var _hooks = __webpack_require__("6FOS");
 __webpack_require__("9gKJ");
-function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
-function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
 function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
 function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
 var GrdfWaitConsent = function GrdfWaitConsent() {
+  var _currentFluidStatus$c;
   var _useI18n = (0, _I18n.useI18n)(),
     t = _useI18n.t;
   var dispatch = (0, _hooks.useAppDispatch)();
@@ -2898,13 +2895,7 @@ var GrdfWaitConsent = function GrdfWaitConsent() {
     }),
     fluidStatus = _useAppSelector.fluidStatus;
   var currentFluidStatus = fluidStatus[_enums.FluidType.GAS];
-  var account = currentFluidStatus.connection.account;
-  var authData = account === null || account === void 0 ? void 0 : account.auth;
-  console.log('🚀 ~ GrdfWaitConsent ~ account:', account);
-  var _useState = (0, _react.useState)(''),
-    _useState2 = (0, _slicedToArray2.default)(_useState, 2),
-    consentEmail = _useState2[0],
-    setConsentEmail = _useState2[1];
+  var authData = (_currentFluidStatus$c = currentFluidStatus.connection.account) === null || _currentFluidStatus$c === void 0 ? void 0 : _currentFluidStatus$c.auth;
   var updateKonnector = /*#__PURE__*/function () {
     var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
       var updatedConnection;
@@ -2930,15 +2921,6 @@ var GrdfWaitConsent = function GrdfWaitConsent() {
       return _ref.apply(this, arguments);
     };
   }();
-  (0, _react.useEffect)(function () {
-    if (account !== null && account !== void 0 && account.auth) {
-      var auth = account.auth;
-      var _authData = auth;
-      if (_authData.email) {
-        setConsentEmail(_authData.email);
-      }
-    }
-  }, [account]);
   return /*#__PURE__*/_react.default.createElement("div", {
     className: "grdfWait"
   }, /*#__PURE__*/_react.default.createElement("div", {
@@ -4062,7 +4044,6 @@ var KonnectorModal = function KonnectorModal(_ref) {
       clearInterval(interval);
     };
   }, [open, state]);
-  console.log('modal', open, state, error);
   if (fluidType === _enums.FluidType.GAS && error === _enums.KonnectorError.CHALLENGE_ASKED) {
     return null;
   }
@@ -4628,6 +4609,9 @@ var ConsumptionView = function ConsumptionView(_ref) {
     _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
     consentExpiredFluids = _useState6[0],
     setConsentExpiredFluids = _useState6[1];
+  var profileService = (0, _react.useMemo)(function () {
+    return new _profile.default(client);
+  }, [client]);
   var updateKey = !isMulti && currentFluidStatus.lastDataDate ? "".concat(currentFluidStatus.lastDataDate.toLocaleString(), " + ").concat(currentFluidStatus.status + fluidType) : '';
   var lastDataDateKey = !isMulti && currentFluidStatus.lastDataDate ? "".concat(currentFluidStatus.lastDataDate.toLocaleString() + fluidType) : '';
   var getPartnerKey = function getPartnerKey(fluidType) {
@@ -4654,56 +4638,54 @@ var ConsumptionView = function ConsumptionView(_ref) {
     }
   }, [dispatch, navigate, releaseNotes.notes, releaseNotes.redirectLink]);
   var handleClosePartnerIssueModal = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
-    var profileService, profileValues, updatedProfile;
+    var profileValues, updatedProfile;
     return _regenerator.default.wrap(function _callee$(_context) {
       while (1) {
         switch (_context.prev = _context.next) {
           case 0:
-            profileService = new _profile.default(client);
-            _context.next = 3;
+            _context.next = 2;
             return profileService.getProfile();
-          case 3:
+          case 2:
             profileValues = _context.sent;
             if (!profileValues) {
-              _context.next = 9;
+              _context.next = 8;
               break;
             }
-            _context.next = 7;
+            _context.next = 6;
             return profileService.updateProfile({
               partnersIssueSeenDate: _objectSpread(_objectSpread({}, profileValues.partnersIssueSeenDate), {}, (0, _defineProperty2.default)({}, getPartnerKey(fluidType), (0, _utils.getTodayDate)()))
             });
-          case 7:
+          case 6:
             updatedProfile = _context.sent;
             if (updatedProfile) {
               dispatch((0, _modal.openPartnersModal)(_objectSpread(_objectSpread({}, partnersIssueModal), {}, (0, _defineProperty2.default)({}, getPartnerKey(fluidType), false))));
             }
-          case 9:
+          case 8:
           case "end":
             return _context.stop();
         }
       }
     }, _callee);
-  })), [client, dispatch, fluidType, partnersIssueModal]);
+  })), [dispatch, fluidType, partnersIssueModal, profileService]);
   var handleCloseCustomPopupModal = /*#__PURE__*/function () {
     var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
-      var profileService, updatedProfile;
+      var updatedProfile;
       return _regenerator.default.wrap(function _callee2$(_context2) {
         while (1) {
           switch (_context2.prev = _context2.next) {
             case 0:
-              profileService = new _profile.default(client);
-              _context2.next = 3;
+              _context2.next = 2;
               return profileService.updateProfile({
                 customPopupDate: (0, _utils.getTodayDate)()
               });
-            case 3:
+            case 2:
               updatedProfile = _context2.sent;
               if (updatedProfile) {
                 dispatch((0, _modal.setCustomPopup)(_objectSpread(_objectSpread({}, customPopupModal), {}, {
                   popupEnabled: false
                 })));
               }
-            case 5:
+            case 4:
             case "end":
               return _context2.stop();
           }
diff --git a/app/ecolyo.e586999bf02b675b804e.js b/app/ecolyo.d79945c08a6c0abbe56a.js
similarity index 99%
rename from app/ecolyo.e586999bf02b675b804e.js
rename to app/ecolyo.d79945c08a6c0abbe56a.js
index 0e8bfd0029222eb1dfefb816ead060afd266d0d0..c73d90fc8991ab0d2526edabc0a8c995175b8a36 100644
--- a/app/ecolyo.e586999bf02b675b804e.js
+++ b/app/ecolyo.d79945c08a6c0abbe56a.js
@@ -64,7 +64,7 @@
 /******/
 /******/ 	// script path function
 /******/ 	function jsonpScriptSrc(chunkId) {
-/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"3":"f407a5f06d8f4c483bb7","4":"3b4996d5b14bfb7665c0","5":"0b93fcd50fa933ab69ed","6":"55a8c1b77f056fa82248","7":"d61472e75eb196504d3e","8":"a73a83af326b8e1dfa4a","9":"73a97eac0086801c9dc9","10":"26edbface76655274ad8","11":"3baf0b358c1c353001a4"}[chunkId] + ".js"
+/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"3":"7bb707b268d999ecde60","4":"ebfb4316f0cf5b147c5e","5":"d91dcd403b278c15d9f1","6":"55a8c1b77f056fa82248","7":"d61472e75eb196504d3e","8":"a73a83af326b8e1dfa4a","9":"73a97eac0086801c9dc9","10":"26edbface76655274ad8","11":"3baf0b358c1c353001a4"}[chunkId] + ".js"
 /******/ 	}
 /******/
 /******/ 	// The require function
@@ -2099,9 +2099,12 @@ var ChallengeCardOnGoing = function ChallengeCardOnGoing(_ref) {
       return !prev;
     });
   }, []);
+  var challengeService = (0, _react.useMemo)(function () {
+    return new _challenge.default(client);
+  }, [client]);
   var goDuel = /*#__PURE__*/function () {
     var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
-      var challengeService, updatedChallenge;
+      var updatedChallenge;
       return _regenerator.default.wrap(function _callee$(_context) {
         while (1) {
           switch (_context.prev = _context.next) {
@@ -2109,28 +2112,27 @@ var ChallengeCardOnGoing = function ChallengeCardOnGoing(_ref) {
               setIsLoading(true);
               // Check if at least one fluid is up
               if (!(fluidTypes.length !== 0)) {
-                _context.next = 12;
+                _context.next = 11;
                 break;
               }
               if (!(userChallenge.duel.state !== _enums.UserDuelState.ONGOING)) {
-                _context.next = 8;
+                _context.next = 7;
                 break;
               }
-              challengeService = new _challenge.default(client);
-              _context.next = 6;
+              _context.next = 5;
               return challengeService.updateUserChallenge(userChallenge, _enums.UserChallengeUpdateFlag.DUEL_UPDATE_THRESHOLD, undefined, fluidStatus);
-            case 6:
+            case 5:
               updatedChallenge = _context.sent;
               dispatch((0, _challenge2.updateUserChallengeList)(updatedChallenge));
-            case 8:
+            case 7:
               setIsLoading(false);
               navigate("/challenges/duel?id=".concat(userChallenge.id));
-              _context.next = 14;
+              _context.next = 13;
               break;
-            case 12:
+            case 11:
               setIsLoading(false);
               toggleNoFluidModal();
-            case 14:
+            case 13:
             case "end":
               return _context.stop();
           }
@@ -2143,24 +2145,23 @@ var ChallengeCardOnGoing = function ChallengeCardOnGoing(_ref) {
   }();
   var goQuiz = /*#__PURE__*/function () {
     var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
-      var challengeService, updatedChallenge;
+      var updatedChallenge;
       return _regenerator.default.wrap(function _callee2$(_context2) {
         while (1) {
           switch (_context2.prev = _context2.next) {
             case 0:
               if (!(userChallenge.quiz.state !== _enums.UserQuizState.ONGOING)) {
-                _context2.next = 6;
+                _context2.next = 5;
                 break;
               }
-              challengeService = new _challenge.default(client);
-              _context2.next = 4;
+              _context2.next = 3;
               return challengeService.updateUserChallenge(userChallenge, _enums.UserChallengeUpdateFlag.QUIZ_RESET);
-            case 4:
+            case 3:
               updatedChallenge = _context2.sent;
               dispatch((0, _challenge2.updateUserChallengeList)(updatedChallenge));
-            case 6:
+            case 5:
               if (userChallenge.progress.quizProgress !== 5) navigate('/challenges/quiz');
-            case 7:
+            case 6:
             case "end":
               return _context2.stop();
           }
@@ -2208,7 +2209,6 @@ var ChallengeCardOnGoing = function ChallengeCardOnGoing(_ref) {
     };
   }, [userChallenge]);
   (0, _react.useEffect)(function () {
-    var challengeService = new _challenge.default(client);
     var subscribed = true;
     function setChallengeResult() {
       return _setChallengeResult.apply(this, arguments);
@@ -2273,7 +2273,7 @@ var ChallengeCardOnGoing = function ChallengeCardOnGoing(_ref) {
     return function () {
       subscribed = false;
     };
-  }, [client, currentDataload, userChallenge, dispatch]);
+  }, [currentDataload, userChallenge, dispatch, challengeService]);
   var quizButton = function quizButton() {
     return /*#__PURE__*/_react.default.createElement(_core.Button, {
       title: t('challenge.card.ongoing.quiz'),
@@ -18168,15 +18168,14 @@ var DuelOngoing = function DuelOngoing(_ref) {
   var userConsumption = (0, _utils.formatNumberValues)(userChallenge.duel.userConsumption).toString();
   var average = (0, _utils.formatNumberValues)(userChallenge.duel.threshold).toString();
   var setResult = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
-    var challengeService, updatedChallenge;
+    var updatedChallenge;
     return _regenerator.default.wrap(function _callee$(_context) {
       while (1) {
         switch (_context.prev = _context.next) {
           case 0:
-            challengeService = new _challenge.default(client);
-            _context.next = 3;
+            _context.next = 2;
             return challengeService.updateUserChallenge(userChallenge, winChallenge ? _enums.UserChallengeUpdateFlag.DUEL_WIN : _enums.UserChallengeUpdateFlag.DUEL_LOSS);
-          case 3:
+          case 2:
             updatedChallenge = _context.sent;
             dispatch((0, _challenge2.updateUserChallengeList)(updatedChallenge));
             dispatch((0, _challenge2.unlockNextUserChallenge)(updatedChallenge));
@@ -18186,13 +18185,13 @@ var DuelOngoing = function DuelOngoing(_ref) {
             } else {
               navigate('/challenges');
             }
-          case 8:
+          case 7:
           case "end":
             return _context.stop();
         }
       }
     }, _callee);
-  })), [client, userChallenge, winChallenge, dispatch, isLastDuel, navigate]);
+  })), [challengeService, userChallenge, winChallenge, dispatch, isLastDuel, navigate]);
   (0, _react.useEffect)(function () {
     var subscribed = true;
     function setChallengeResult() {
@@ -25370,26 +25369,26 @@ var ExplorationOngoing = function ExplorationOngoing(_ref) {
   var client = (0, _cozyClient.useClient)();
   var dispatch = (0, _hooks.useAppDispatch)();
   var navigate = (0, _reactRouterDom.useNavigate)();
+  var challengeService = new _challenge.default(client);
   var startExploration = /*#__PURE__*/function () {
     var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
-      var challengeService, updatedChallenge;
+      var updatedChallenge;
       return _regenerator.default.wrap(function _callee$(_context) {
         while (1) {
           switch (_context.prev = _context.next) {
             case 0:
               if (!(userChallenge.exploration.state !== _enums.UserExplorationState.ONGOING)) {
-                _context.next = 6;
+                _context.next = 5;
                 break;
               }
-              challengeService = new _challenge.default(client);
-              _context.next = 4;
+              _context.next = 3;
               return challengeService.updateUserChallenge(userChallenge, _enums.UserChallengeUpdateFlag.EXPLORATION_START);
-            case 4:
+            case 3:
               updatedChallenge = _context.sent;
               dispatch((0, _challenge2.updateUserChallengeList)(updatedChallenge));
-            case 6:
+            case 5:
               navigate('/challenges');
-            case 7:
+            case 6:
             case "end":
               return _context.stop();
           }
@@ -25402,19 +25401,18 @@ var ExplorationOngoing = function ExplorationOngoing(_ref) {
   }();
   var validExploration = /*#__PURE__*/function () {
     var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
-      var challengeService, updatedChallenge;
+      var updatedChallenge;
       return _regenerator.default.wrap(function _callee2$(_context2) {
         while (1) {
           switch (_context2.prev = _context2.next) {
             case 0:
-              challengeService = new _challenge.default(client);
-              _context2.next = 3;
+              _context2.next = 2;
               return challengeService.updateUserChallenge(userChallenge, _enums.UserChallengeUpdateFlag.EXPLORATION_DONE);
-            case 3:
+            case 2:
               updatedChallenge = _context2.sent;
               dispatch((0, _challenge2.updateUserChallengeList)(updatedChallenge));
               navigate('/challenges');
-            case 6:
+            case 5:
             case "end":
               return _context2.stop();
           }
@@ -32028,9 +32026,13 @@ var EcogestureFormView = function EcogestureFormView() {
     _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
     currentProfileEcogesture = _useState12[0],
     setCurrentProfileEcogesture = _useState12[1];
+
+  /** ProfileEcogestureFormService */
+  var pefs = (0, _react.useMemo)(function () {
+    return new _profileEcogestureForm.default(profileEcogesture);
+  }, [profileEcogesture]);
   var setNextStep = (0, _react.useCallback)(function (_profileEcogesture) {
     setCurrentProfileEcogesture(_profileEcogesture);
-    var pefs = new _profileEcogestureForm.default(_profileEcogesture);
     var nextStep = pefs.getNextFormStep(step);
     setIsLoading(true);
     if (nextStep > viewedStep) {
@@ -32039,15 +32041,14 @@ var EcogestureFormView = function EcogestureFormView() {
     var _answerType = _profileEcogestureForm.default.getAnswerForStep(nextStep);
     setAnswerType(_answerType);
     setStep(nextStep);
-  }, [step, viewedStep]);
+  }, [pefs, step, viewedStep]);
   var setPreviousStep = (0, _react.useCallback)(function () {
-    var pefs = new _profileEcogestureForm.default(currentProfileEcogesture);
     var previousStep = pefs.getPreviousFormStep(step);
     setIsLoading(true);
     var _answerType = _profileEcogestureForm.default.getAnswerForStep(previousStep);
     setAnswerType(_answerType);
     setStep(previousStep);
-  }, [currentProfileEcogesture, step]);
+  }, [pefs, step]);
   var handleEndForm = (0, _react.useCallback)(function () {
     dispatch((0, _profileEcogesture2.newProfileEcogestureEntry)(currentProfileEcogesture));
     dispatch((0, _profile.updateProfile)({
diff --git a/index.html b/index.html
index e20e0c81bcece647424c3e37bfb40327849b5cae..45e1623c33516e79b0750edd0c8dac6d39c39614 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.0d643adf7b74041441a1.js"></script><script src="app/ecolyo.e586999bf02b675b804e.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.0d643adf7b74041441a1.js"></script><script src="app/ecolyo.d79945c08a6c0abbe56a.js"></script></div></body></html>
\ No newline at end of file