diff --git a/2/ecolyo.428a0f6e105059ec41cb.js b/2/ecolyo.11a0524f373f31cee670.js
similarity index 99%
rename from 2/ecolyo.428a0f6e105059ec41cb.js
rename to 2/ecolyo.11a0524f373f31cee670.js
index 330b6544a4714dd65ba17cefc36dd3cb894f3e22..23dba32707a84f96a3192f607428aedd88cde7b5 100644
--- a/2/ecolyo.428a0f6e105059ec41cb.js
+++ b/2/ecolyo.11a0524f373f31cee670.js
@@ -146,14 +146,12 @@ var AnalysisConsumption = function AnalysisConsumption(_ref) {
   var navigate = (0, _reactRouterDom.useNavigate)();
   var client = (0, _cozyClient.useClient)();
   var userPriceConsumption = aggregatedPerformanceIndicator.value || 0;
-  var profile = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profile;
-  });
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
+    return state.ecolyo;
   }),
-      fluidTypes = _useSelector.fluidTypes;
+      fluidTypes = _useSelector.global.fluidTypes,
+      profile = _useSelector.profile;
 
   var _useState = (0, _react.useState)(0),
       _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -1124,24 +1122,17 @@ var AnalysisView = function AnalysisView() {
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
     return state.ecolyo;
   }),
+      selectedDate = _useSelector.chart.selectedDate,
       analysisNotification = _useSelector.global.analysisNotification,
-      monthlyAnalysisDate = _useSelector.profile.monthlyAnalysisDate;
-
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.chart;
-  }),
-      selectedDate = _useSelector2.selectedDate;
+      _useSelector$profile = _useSelector.profile,
+      monthlyAnalysisDate = _useSelector$profile.monthlyAnalysisDate,
+      mailToken = _useSelector$profile.mailToken;
 
   var _useState3 = (0, _react.useState)(monthlyAnalysisDate),
       _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
       currentAnalysisDate = _useState4[0],
       setCurrentAnalysisDate = _useState4[1];
 
-  var _useSelector3 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profile;
-  }),
-      mailToken = _useSelector3.mailToken;
-
   var dispatch = (0, _reactRedux.useDispatch)();
   var defineHeaderHeight = (0, _react.useCallback)(function (height) {
     setHeaderHeight(height);
diff --git a/3/ecolyo.f2453cca7662654fa54a.js b/3/ecolyo.9343f3201d05ad1a3cf3.js
similarity index 99%
rename from 3/ecolyo.f2453cca7662654fa54a.js
rename to 3/ecolyo.9343f3201d05ad1a3cf3.js
index 02ff1eaf467e19d0807b9995457bd96f281717d8..c19a010bba0c097266b395435960dffaf170e1a7 100644
--- a/3/ecolyo.f2453cca7662654fa54a.js
+++ b/3/ecolyo.9343f3201d05ad1a3cf3.js
@@ -2025,11 +2025,13 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
   var trigger = fluidStatus.connection.trigger;
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
+    return state.ecolyo;
   }),
-      statusArray = _useSelector.fluidStatus,
-      shouldRefreshConsent = _useSelector.shouldRefreshConsent,
-      partnersInfo = _useSelector.partnersInfo;
+      currentChallenge = _useSelector.challenge.currentChallenge,
+      _useSelector$global = _useSelector.global,
+      statusArray = _useSelector$global.fluidStatus,
+      shouldRefreshConsent = _useSelector$global.shouldRefreshConsent,
+      partnersInfo = _useSelector$global.partnersInfo;
 
   var _useState = (0, _react.useState)(false),
       _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -2066,11 +2068,6 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
       isOutdatedData = _useState14[0],
       setIsOutdatedData = _useState14[1];
 
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.challenge;
-  }),
-      currentChallenge = _useSelector2.currentChallenge;
-
   var fluidService = (0, _react.useMemo)(function () {
     return new _fluid2.default(client);
   }, [client]);
@@ -2959,16 +2956,14 @@ var FluidChartSlide = function FluidChartSlide(_ref) {
   var dispatch = (0, _reactRedux.useDispatch)();
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.chart;
-  }),
-      currentTimeStep = _useSelector.currentTimeStep,
-      currentIndex = _useSelector.currentIndex;
-
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
+    return state.ecolyo;
   }),
-      fluidTypes = _useSelector2.fluidTypes,
-      fluidStatus = _useSelector2.fluidStatus;
+      _useSelector$chart = _useSelector.chart,
+      currentTimeStep = _useSelector$chart.currentTimeStep,
+      currentIndex = _useSelector$chart.currentIndex,
+      _useSelector$global = _useSelector.global,
+      fluidStatus = _useSelector$global.fluidStatus,
+      fluidTypes = _useSelector$global.fluidTypes;
 
   var _useState = (0, _react.useState)({
     actualData: [],
@@ -4235,16 +4230,14 @@ var ConsumptionVisualizer = function ConsumptionVisualizer(_ref) {
       setActive = _ref.setActive;
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
-  }),
-      fluidStatus = _useSelector.fluidStatus,
-      fluidTypes = _useSelector.fluidTypes;
-
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.chart;
+    return state.ecolyo;
   }),
-      currentDatachart = _useSelector2.currentDatachart,
-      currentDatachartIndex = _useSelector2.currentDatachartIndex;
+      _useSelector$chart = _useSelector.chart,
+      currentDatachart = _useSelector$chart.currentDatachart,
+      currentDatachartIndex = _useSelector$chart.currentDatachartIndex,
+      _useSelector$global = _useSelector.global,
+      fluidStatus = _useSelector$global.fluidStatus,
+      fluidTypes = _useSelector$global.fluidTypes;
 
   var dataload = currentDatachart.actualData[currentDatachartIndex];
   var compareDataload = currentDatachart.comparisonData ? currentDatachart.comparisonData[currentDatachartIndex] : null;
@@ -5629,15 +5622,12 @@ var FluidChart = function FluidChart(_ref) {
   var client = (0, _cozyClient.useClient)();
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
-  }),
-      fluidStatus = _useSelector.fluidStatus;
-
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.chart;
+    return state.ecolyo;
   }),
-      currentTimeStep = _useSelector2.currentTimeStep,
-      selectedDate = _useSelector2.selectedDate;
+      _useSelector$chart = _useSelector.chart,
+      currentTimeStep = _useSelector$chart.currentTimeStep,
+      selectedDate = _useSelector$chart.selectedDate,
+      fluidStatus = _useSelector.global.fluidStatus;
 
   var _useExploration = (0, _useExploration3.default)(),
       _useExploration2 = (0, _slicedToArray2.default)(_useExploration, 2),
diff --git a/4/ecolyo.b36c04845ac8ccdfd8e2.js b/4/ecolyo.36d65c19c36ee336be1e.js
similarity index 99%
rename from 4/ecolyo.b36c04845ac8ccdfd8e2.js
rename to 4/ecolyo.36d65c19c36ee336be1e.js
index b0b9e8790bdfa8891b171b9d62b71532546e74b7..d6c6faec1ef342819a03e4d941c53dd0475fa223 100644
--- a/4/ecolyo.b36c04845ac8ccdfd8e2.js
+++ b/4/ecolyo.36d65c19c36ee336be1e.js
@@ -95,18 +95,15 @@ var EcogestureView = function EcogestureView() {
   var client = (0, _cozyClient.useClient)();
   var dispatch = (0, _reactRedux.useDispatch)();
   var tab = new URLSearchParams((0, _reactRouterDom.useLocation)().search).get('tab');
-  var profileType = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profileType;
-  });
-  var profileEcogesture = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profileEcogesture;
-  });
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profile;
+    return state.ecolyo;
   }),
-      haveSeenEcogestureModal = _useSelector.haveSeenEcogestureModal,
-      isProfileEcogestureCompleted = _useSelector.isProfileEcogestureCompleted;
+      _useSelector$profile = _useSelector.profile,
+      haveSeenEcogestureModal = _useSelector$profile.haveSeenEcogestureModal,
+      isProfileEcogestureCompleted = _useSelector$profile.isProfileEcogestureCompleted,
+      profileEcogesture = _useSelector.profileEcogesture,
+      profileType = _useSelector.profileType;
 
   var _useState3 = (0, _react.useState)(tab ? parseInt(tab) : _ecogesture.EcogestureTab.OBJECTIVE),
       _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
diff --git a/5/ecolyo.4c1d9ae558d5214ade9c.js b/5/ecolyo.b68bd78f52796a5a0574.js
similarity index 98%
rename from 5/ecolyo.4c1d9ae558d5214ade9c.js
rename to 5/ecolyo.b68bd78f52796a5a0574.js
index 872207057909d60e0deea3f63296943de5aa582e..886876155ac40e9b5720b2f96f34eff1770ce4bd 100644
--- a/5/ecolyo.4c1d9ae558d5214ade9c.js
+++ b/5/ecolyo.b68bd78f52796a5a0574.js
@@ -120,16 +120,13 @@ var DateNavigator = function DateNavigator(_ref) {
   var dispatch = (0, _reactRedux.useDispatch)();
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.chart;
+    return state.ecolyo;
   }),
-      currentTimeStep = _useSelector.currentTimeStep,
-      selectedDate = _useSelector.selectedDate,
-      currentIndex = _useSelector.currentIndex;
-
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
-  }),
-      fluidStatus = _useSelector2.fluidStatus;
+      _useSelector$chart = _useSelector.chart,
+      currentTimeStep = _useSelector$chart.currentTimeStep,
+      selectedDate = _useSelector$chart.selectedDate,
+      currentIndex = _useSelector$chart.currentIndex,
+      fluidStatus = _useSelector.global.fluidStatus;
 
   var disablePrev = selectedDate < _luxon.DateTime.local(0, 1, 1).setZone('utc', {
     keepLocalTime: true
diff --git a/6/ecolyo.8a0fb54d4ad7a438bb12.js b/6/ecolyo.c9b056bd80b262be9598.js
similarity index 99%
rename from 6/ecolyo.8a0fb54d4ad7a438bb12.js
rename to 6/ecolyo.c9b056bd80b262be9598.js
index e60253ab7158ff36d9e17e2ee612eb158cfde13a..ad465281e84a2348d62f3199576f101f76853b77 100644
--- a/6/ecolyo.8a0fb54d4ad7a438bb12.js
+++ b/6/ecolyo.c9b056bd80b262be9598.js
@@ -53,14 +53,12 @@ var ReportOptions = function ReportOptions() {
 
   var client = (0, _cozyClient.useClient)();
   var dispatch = (0, _reactRedux.useDispatch)();
-  var profile = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profile;
-  });
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
+    return state.ecolyo;
   }),
-      fluidStatus = _useSelector.fluidStatus;
+      fluidStatus = _useSelector.global.fluidStatus,
+      profile = _useSelector.profile;
 
   var _useState = (0, _react.useState)(null),
       _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -305,12 +303,11 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
 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; }
 
 var ProfileTypeOptions = function ProfileTypeOptions() {
-  var profile = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profile;
-  });
-  var profileType = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profileType;
-  });
+  var _useSelector = (0, _reactRedux.useSelector)(function (state) {
+    return state.ecolyo;
+  }),
+      profile = _useSelector.profile,
+      profileType = _useSelector.profileType;
 
   var _useI18n = (0, _I18n.useI18n)(),
       t = _useI18n.t;
@@ -2109,7 +2106,7 @@ var HelpLink = function HelpLink() {
   return /*#__PURE__*/_react.default.createElement("div", {
     className: "help-root",
     onClick: function onClick() {
-      return dispatch((0, _modal.updateModalIsFeedbacksOpen)(true));
+      return dispatch((0, _modal.openFeedbackModal)(true));
     }
   }, /*#__PURE__*/_react.default.createElement("div", {
     className: "help-content"
diff --git a/app/ecolyo.ae4d817db51322a0a71b.js b/app/ecolyo.838f0e88d174c23c5f6e.js
similarity index 99%
rename from app/ecolyo.ae4d817db51322a0a71b.js
rename to app/ecolyo.838f0e88d174c23c5f6e.js
index 8650bffa5453c3ef270418aad96b1e0385acf3e6..7153816a7c116df0706bea58726866add4f14ebd 100644
--- a/app/ecolyo.ae4d817db51322a0a71b.js
+++ b/app/ecolyo.838f0e88d174c23c5f6e.js
@@ -64,7 +64,7 @@
 /******/
 /******/ 	// script path function
 /******/ 	function jsonpScriptSrc(chunkId) {
-/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"2":"428a0f6e105059ec41cb","3":"f2453cca7662654fa54a","4":"b36c04845ac8ccdfd8e2","5":"4c1d9ae558d5214ade9c","6":"8a0fb54d4ad7a438bb12","7":"403585665c5e67c3d156","8":"8763ca2635d712139819","9":"9ad8f654859d6a5af353"}[chunkId] + ".js"
+/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"2":"11a0524f373f31cee670","3":"9343f3201d05ad1a3cf3","4":"36d65c19c36ee336be1e","5":"b68bd78f52796a5a0574","6":"c9b056bd80b262be9598","7":"403585665c5e67c3d156","8":"8763ca2635d712139819","9":"9ad8f654859d6a5af353"}[chunkId] + ".js"
 /******/ 	}
 /******/
 /******/ 	// The require function
@@ -3705,37 +3705,42 @@ var initialState = {
 var chartReducer = function chartReducer() {
   var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
   var action = arguments.length > 1 ? arguments[1] : undefined;
+  if (action.payload == undefined) return state;
+
+  var updateState = function updateState(updates) {
+    return _objectSpread(_objectSpread({}, state), updates);
+  };
 
   switch (action.type) {
     case _chart.SET_SELECTED_DATE:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         selectedDate: action.payload
-      }) : state;
+      });
 
     case _chart.SET_CURRENT_TIMESTEP:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         currentTimeStep: action.payload
-      }) : state;
+      });
 
     case _chart.SET_CURRENT_INDEX:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         currentIndex: action.payload
-      }) : state;
+      });
 
     case _chart.SET_CURRENT_DATACHART:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         currentDatachart: action.payload
-      }) : state;
+      });
 
     case _chart.SET_CURRENT_DATACHART_INDEX:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         currentDatachartIndex: action.payload
-      }) : state;
+      });
 
     case _chart.SET_LOADING:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         loading: action.payload
-      }) : state;
+      });
 
     default:
       return state;
@@ -4632,14 +4637,10 @@ var ActionBegin = function ActionBegin(_ref) {
       t = _useI18n.t;
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profile;
-  }),
-      isProfileTypeCompleted = _useSelector.isProfileTypeCompleted;
-
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
+    return state.ecolyo;
   }),
-      fluidTypes = _useSelector2.fluidTypes;
+      fluidTypes = _useSelector.global.fluidTypes,
+      isProfileTypeCompleted = _useSelector.profile.isProfileTypeCompleted;
 
   var _useState = (0, _react.useState)(),
       _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -5397,7 +5398,8 @@ var DuelOngoing = function DuelOngoing(_ref) {
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
     return state.ecolyo.challenge;
   }),
-      currentDataload = _useSelector.currentDataload;
+      currentDataload = _useSelector.currentDataload,
+      userChallengeList = _useSelector.userChallengeList;
 
   var dispatch = (0, _reactRedux.useDispatch)();
   var navigate = (0, _reactRouterDom.useNavigate)();
@@ -5430,18 +5432,12 @@ var DuelOngoing = function DuelOngoing(_ref) {
   var _useState11 = (0, _react.useState)(),
       _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
       finishedDataLoad = _useState12[0],
-      setfinishedDataLoad = _useState12[1];
+      setFinishedDataLoad = _useState12[1];
 
   var chartContainer = (0, _react.useRef)(null);
   var challengeService = (0, _react.useMemo)(function () {
     return new _challenge.default(client);
   }, [client]);
-
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.challenge;
-  }),
-      userChallengeList = _useSelector2.userChallengeList;
-
   var duel = userChallenge.duel;
   var title = duel.title;
   var durationInDays = duel.duration.days;
@@ -5596,7 +5592,7 @@ var DuelOngoing = function DuelOngoing(_ref) {
                 dataloads = _context4.sent;
 
                 if (subscribed) {
-                  setfinishedDataLoad(dataloads);
+                  setFinishedDataLoad(dataloads);
                 }
 
               case 5:
@@ -9965,7 +9961,7 @@ var _interopRequireDefault = __webpack_require__("TqRt");
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
-exports.ecolyoReducer = exports.default = void 0;
+exports.defaultAction = exports.default = void 0;
 
 var Sentry = _interopRequireWildcard(__webpack_require__("agHs"));
 
@@ -9993,16 +9989,20 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
 
 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; }
 
+var defaultAction = {
+  type: null,
+  payload: undefined
+};
+exports.defaultAction = defaultAction;
 var ecolyoReducer = (0, _redux.combineReducers)({
+  challenge: _challenge.challengeReducer,
+  chart: _chart.chartReducer,
   global: _global.globalReducer,
+  modal: _modal.modalReducer,
   profile: _profile.profileReducer,
-  profileType: _profileType.profileTypeReducer,
   profileEcogesture: _profileEcogesture.profileEcogestureReducer,
-  chart: _chart.chartReducer,
-  modal: _modal.modalReducer,
-  challenge: _challenge.challengeReducer
+  profileType: _profileType.profileTypeReducer
 });
-exports.ecolyoReducer = ecolyoReducer;
 var sentryReduxEnhancer = Sentry.createReduxEnhancer({});
 
 var configureStore = function configureStore(client, persistedState) {
@@ -10210,7 +10210,7 @@ var CozyBar = function CozyBar(_ref) {
   }, [backFunction, navigate]);
 
   var handleClickFeedbacks = function handleClickFeedbacks() {
-    dispatch((0, _modal.updateModalIsFeedbacksOpen)(true));
+    dispatch((0, _modal.openFeedbackModal)(true));
   };
 
   var cozyBarCustom = function cozyBarCustom(screen) {
@@ -14588,10 +14588,11 @@ var initialState = {
 var profileEcogestureReducer = function profileEcogestureReducer() {
   var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
   var action = arguments.length > 1 ? arguments[1] : undefined;
+  if (action.payload == undefined) return state;
 
   switch (action.type) {
-    case _profileEcogesture.UPDATE_PROFILEECOGESTURE:
-    case _profileEcogesture.CREATE_NEW_PROFILEECOGESTURE:
+    case _profileEcogesture.UPDATE_PROFILE_ECOGESTURE:
+    case _profileEcogesture.CREATE_NEW_PROFILE_ECOGESTURE:
       return _objectSpread(_objectSpread({}, state), action.payload);
 
     default:
@@ -18457,24 +18458,27 @@ var initialState = {
 var challengeReducer = function challengeReducer() {
   var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
   var action = arguments.length > 1 ? arguments[1] : undefined;
+  if (action.payload == undefined) return state;
+
+  var updateState = function updateState(updates) {
+    return _objectSpread(_objectSpread({}, state), updates);
+  };
 
   switch (action.type) {
     case _challenge.SET_USER_CHALLENGE_LIST:
-      if (action.payload !== undefined) {
+      {
         var filteredCurrentChallenge = action.payload.filter(function (challenge) {
           return challenge.state === _userChallenge.UserChallengeState.ONGOING || challenge.state === _userChallenge.UserChallengeState.DUEL;
         });
-        var currentChallenge = filteredCurrentChallenge[0] ? filteredCurrentChallenge[0] : null;
-        return _objectSpread(_objectSpread({}, state), {}, {
+        var currentChallenge = filteredCurrentChallenge[0] || null;
+        return updateState({
           userChallengeList: action.payload,
           currentChallenge: currentChallenge
         });
-      } else {
-        return state;
       }
 
     case _challenge.UPDATE_USER_CHALLENGE_LIST:
-      if (action.payload !== undefined) {
+      {
         var id = action.payload.id;
 
         var _currentChallenge = action.payload.state === _userChallenge.UserChallengeState.ONGOING || action.payload.state === _userChallenge.UserChallengeState.DUEL ? action.payload : null;
@@ -18484,16 +18488,14 @@ var challengeReducer = function challengeReducer() {
           return challenge.id === id;
         });
         updatedList[findIndex] = action.payload;
-        return _objectSpread(_objectSpread({}, state), {}, {
+        return updateState({
           userChallengeList: updatedList,
-          currentChallenge: _currentChallenge ? _currentChallenge : state.currentChallenge
+          currentChallenge: _currentChallenge || state.currentChallenge
         });
-      } else {
-        return state;
       }
 
     case _challenge.UNLOCK_NEXT_USER_CHALLENGE:
-      if (action.payload !== undefined) {
+      {
         var _id = action.payload.id;
 
         var _updatedList = (0, _toConsumableArray2.default)(state.userChallengeList);
@@ -18510,16 +18512,14 @@ var challengeReducer = function challengeReducer() {
           });
         }
 
-        return _objectSpread(_objectSpread({}, state), {}, {
+        return updateState({
           userChallengeList: _updatedList,
           currentChallenge: null
         });
-      } else {
-        return state;
       }
 
     case _challenge.SET_CHALLENGE_CONSUMPTION:
-      if (action.payload !== undefined) {
+      {
         var _id2 = action.payload.userChallenge.id;
 
         var _updatedList2 = (0, _toConsumableArray2.default)(state.userChallengeList);
@@ -18529,13 +18529,11 @@ var challengeReducer = function challengeReducer() {
         });
 
         _updatedList2[_findIndex2] = action.payload.userChallenge;
-        return _objectSpread(_objectSpread({}, state), {}, {
+        return updateState({
           userChallengeList: _updatedList2,
           currentChallenge: state.currentChallenge && state.currentChallenge.id === action.payload.userChallenge.id ? action.payload.userChallenge : state.currentChallenge,
           currentDataload: action.payload.currentDataload
         });
-      } else {
-        return state;
       }
 
     default:
@@ -18739,10 +18737,9 @@ function updateProfileTypeSuccess(updatedProfileType) {
     type: UPDATE_PROFILETYPE,
     payload: updatedProfileType
   };
-} // eslint-disable-next-line @typescript-eslint/no-explicit-any
-
+}
 
-function updateProfileType(upd) {
+function updateProfileType(updates) {
   return /*#__PURE__*/function () {
     var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(dispatch, getState, _ref) {
       var client, profileTypeEntityService, updatedProfileType;
@@ -18753,7 +18750,7 @@ function updateProfileType(upd) {
               client = _ref.client;
               profileTypeEntityService = new _profileTypeEntity.default(client);
               _context.next = 4;
-              return profileTypeEntityService.updateProfileType(upd);
+              return profileTypeEntityService.updateProfileType(updates);
 
             case 4:
               updatedProfileType = _context.sent;
@@ -18774,10 +18771,9 @@ function updateProfileType(upd) {
       return _ref2.apply(this, arguments);
     };
   }();
-} // eslint-disable-next-line @typescript-eslint/no-explicit-any
-
+}
 
-function newProfileTypeEntry(upd) {
+function newProfileTypeEntry(updates) {
   return /*#__PURE__*/function () {
     var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(dispatch, getState, _ref3) {
       var client, _yield$client$create, newProfileType;
@@ -18788,7 +18784,7 @@ function newProfileTypeEntry(upd) {
             case 0:
               client = _ref3.client;
               _context2.next = 3;
-              return client.create(_doctypes.PROFILETYPE_DOCTYPE, upd);
+              return client.create(_doctypes.PROFILETYPE_DOCTYPE, updates);
 
             case 3:
               _yield$client$create = _context2.sent;
@@ -19424,18 +19420,18 @@ exports.setCurrentIndex = setCurrentIndex;
 exports.setCurrentTimeStep = setCurrentTimeStep;
 exports.setLoading = setLoading;
 exports.setSelectedDate = setSelectedDate;
-var SET_CURRENT_TIMESTEP = 'SET_CURRENT_TIMESTEP';
-exports.SET_CURRENT_TIMESTEP = SET_CURRENT_TIMESTEP;
-var SET_SELECTED_DATE = 'SET_SELECTED_DATE';
-exports.SET_SELECTED_DATE = SET_SELECTED_DATE;
-var SET_CURRENT_INDEX = 'SET_CURRENT_INDEX';
-exports.SET_CURRENT_INDEX = SET_CURRENT_INDEX;
 var SET_CURRENT_DATACHART = 'SET_CURRENT_DATACHART';
 exports.SET_CURRENT_DATACHART = SET_CURRENT_DATACHART;
 var SET_CURRENT_DATACHART_INDEX = 'SET_CURRENT_DATACHART_INDEX';
 exports.SET_CURRENT_DATACHART_INDEX = SET_CURRENT_DATACHART_INDEX;
+var SET_CURRENT_INDEX = 'SET_CURRENT_INDEX';
+exports.SET_CURRENT_INDEX = SET_CURRENT_INDEX;
+var SET_CURRENT_TIMESTEP = 'SET_CURRENT_TIMESTEP';
+exports.SET_CURRENT_TIMESTEP = SET_CURRENT_TIMESTEP;
 var SET_LOADING = 'SET_LOADING';
 exports.SET_LOADING = SET_LOADING;
+var SET_SELECTED_DATE = 'SET_SELECTED_DATE';
+exports.SET_SELECTED_DATE = SET_SELECTED_DATE;
 
 function setSelectedDate(date) {
   return {
@@ -20031,19 +20027,15 @@ var Content = function Content(_ref) {
   var dispatch = (0, _reactRedux.useDispatch)();
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
-  }),
-      screenType = _useSelector.screenType;
-
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.modal;
+    return state.ecolyo;
   }),
-      isFeedbacksOpen = _useSelector2.isFeedbacksOpen;
+      screenType = _useSelector.global.screenType,
+      isFeedbacksOpen = _useSelector.modal.isFeedbacksOpen;
 
   var cozyBarHeight = 48;
   var cozyNavHeight = 56;
   var handleFeedbackModalClose = (0, _react.useCallback)(function () {
-    dispatch((0, _modal.updateModalIsFeedbacksOpen)(false));
+    dispatch((0, _modal.openFeedbackModal)(false));
   }, [dispatch]); // Set listeners for scroll
 
   (0, _react.useEffect)(function () {
@@ -22329,84 +22321,84 @@ var getFluidTypesFromStatus = function getFluidTypesFromStatus(fluidStatus) {
 var globalReducer = function globalReducer() {
   var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
   var action = arguments.length > 1 ? arguments[1] : undefined;
+  if (action.payload == undefined) return state;
+
+  var updateState = function updateState(updates) {
+    return _objectSpread(_objectSpread({}, state), updates);
+  };
 
   switch (action.type) {
     case _global.CHANGE_SCREEN_TYPE:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         screenType: action.payload
-      }) : state;
+      });
 
     case _global.TOGGLE_CHALLENGE_EXPLORATION_NOTIFICATION:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         challengeExplorationNotification: action.payload
-      }) : state;
+      });
 
     case _global.TOGGLE_CHALLENGE_ACTION_NOTIFICATION:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         challengeActionNotification: action.payload
-      }) : state;
+      });
 
     case _global.TOGGLE_CHALLENGE_DUEL_NOTIFICATION:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         challengeDuelNotification: action.payload
-      }) : state;
+      });
 
     case _global.TOGGLE_ANALYSIS_NOTIFICATION:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         analysisNotification: action.payload
-      }) : state;
+      });
 
     case _global.SET_FLUID_STATUS:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         fluidStatus: action.payload,
         fluidTypes: getFluidTypesFromStatus(action.payload)
-      }) : state;
+      });
 
     case _global.UPDATE_TERMS_VALIDATION:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         termsStatus: action.payload
-      }) : state;
+      });
 
     case _global.SHOW_RELEASE_NOTES:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         releaseNotes: action.payload
-      }) : state;
+      });
 
     case _global.SET_PARTNERS_INFO:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         partnersInfo: action.payload
-      }) : state;
+      });
 
     case _global.SET_CUSTOM_POPUP:
-      return _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         customPopupModal: action.payload
       });
 
     case _global.SET_SHOULD_REFRESH_CONSENT:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         shouldRefreshConsent: action.payload
-      }) : state;
+      });
 
     case _global.UPDATE_FLUID_CONNECTION:
-      if (action.payload !== undefined) {
-        var updatedFluidStatus = (0, _toConsumableArray2.default)(state.fluidStatus);
-        var fluidType = action.payload.fluidType;
-        var findIndex = state.fluidStatus.findIndex(function (fluid) {
-          return fluid.fluidType === fluidType;
-        });
-        updatedFluidStatus[findIndex].connection = action.payload.fluidConnection;
-        return _objectSpread(_objectSpread({}, state), {}, {
-          fluidStatus: updatedFluidStatus
-        });
-      } else {
-        return state;
-      }
+      var updatedFluidStatus = (0, _toConsumableArray2.default)(state.fluidStatus);
+      var fluidType = action.payload.fluidType;
+      var findIndex = state.fluidStatus.findIndex(function (fluid) {
+        return fluid.fluidType === fluidType;
+      });
+      updatedFluidStatus[findIndex].connection = action.payload.fluidConnection;
+      return _objectSpread(_objectSpread({}, state), {}, {
+        fluidStatus: updatedFluidStatus
+      });
 
     case _global.UPDATE_SGE_CONNECT:
-      if (action.payload != undefined) return _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         sgeConnect: action.payload
       });
-      return state;
 
     default:
       return state;
@@ -22835,7 +22827,7 @@ var _interopRequireDefault = __webpack_require__("TqRt");
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
-exports.UPDATE_PROFILEECOGESTURE = exports.CREATE_NEW_PROFILEECOGESTURE = void 0;
+exports.UPDATE_PROFILE_ECOGESTURE = exports.CREATE_NEW_PROFILE_ECOGESTURE = void 0;
 exports.newProfileEcogestureEntry = newProfileEcogestureEntry;
 exports.updateProfileEcogesture = updateProfileEcogesture;
 exports.updateProfileEcogestureSuccess = updateProfileEcogestureSuccess;
@@ -22848,20 +22840,20 @@ var _comGrandlyonEcolyoProfileecogesture = __webpack_require__("fGnb");
 
 var _profileEcogesture = _interopRequireDefault(__webpack_require__("4iQs"));
 
-var UPDATE_PROFILEECOGESTURE = 'UPDATE_PROFILEECOGESTURE';
-exports.UPDATE_PROFILEECOGESTURE = UPDATE_PROFILEECOGESTURE;
-var CREATE_NEW_PROFILEECOGESTURE = 'CREATE_NEW_PROFILEECOGESTURE';
-exports.CREATE_NEW_PROFILEECOGESTURE = CREATE_NEW_PROFILEECOGESTURE;
+// TODO never used ?
+var CREATE_NEW_PROFILE_ECOGESTURE = 'CREATE_NEW_PROFILE_ECOGESTURE';
+exports.CREATE_NEW_PROFILE_ECOGESTURE = CREATE_NEW_PROFILE_ECOGESTURE;
+var UPDATE_PROFILE_ECOGESTURE = 'UPDATE_PROFILE_ECOGESTURE';
+exports.UPDATE_PROFILE_ECOGESTURE = UPDATE_PROFILE_ECOGESTURE;
 
 function updateProfileEcogestureSuccess(updatedProfileEcogesture) {
   return {
-    type: UPDATE_PROFILEECOGESTURE,
+    type: UPDATE_PROFILE_ECOGESTURE,
     payload: updatedProfileEcogesture
   };
-} // eslint-disable-next-line @typescript-eslint/no-explicit-any
-
+}
 
-function updateProfileEcogesture(upd) {
+function updateProfileEcogesture(updates) {
   return /*#__PURE__*/function () {
     var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(dispatch, getState, _ref) {
       var client, profileEcogestureService, updatedProfileEcogesture;
@@ -22872,7 +22864,7 @@ function updateProfileEcogesture(upd) {
               client = _ref.client;
               profileEcogestureService = new _profileEcogesture.default(client);
               _context.next = 4;
-              return profileEcogestureService.updateProfileEcogesture(upd);
+              return profileEcogestureService.updateProfileEcogesture(updates);
 
             case 4:
               updatedProfileEcogesture = _context.sent;
@@ -22895,7 +22887,7 @@ function updateProfileEcogesture(upd) {
   }();
 }
 
-function newProfileEcogestureEntry(upd) {
+function newProfileEcogestureEntry(updates) {
   return /*#__PURE__*/function () {
     var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(dispatch, getState, _ref3) {
       var client, _yield$client$create, newProfileEcogesture;
@@ -22906,7 +22898,7 @@ function newProfileEcogestureEntry(upd) {
             case 0:
               client = _ref3.client;
               _context2.next = 3;
-              return client.create(_comGrandlyonEcolyoProfileecogesture.PROFILEECOGESTURE_DOCTYPE, upd);
+              return client.create(_comGrandlyonEcolyoProfileecogesture.PROFILEECOGESTURE_DOCTYPE, updates);
 
             case 3:
               _yield$client$create = _context2.sent;
@@ -24280,31 +24272,31 @@ function showReleaseNotes(show, notes, redirectLink) {
   };
 }
 
-function toggleChallengeExplorationNotification(notif) {
+function toggleChallengeExplorationNotification(notification) {
   return {
     type: TOGGLE_CHALLENGE_EXPLORATION_NOTIFICATION,
-    payload: notif
+    payload: notification
   };
 }
 
-function toggleChallengeActionNotification(notif) {
+function toggleChallengeActionNotification(notification) {
   return {
     type: TOGGLE_CHALLENGE_ACTION_NOTIFICATION,
-    payload: notif
+    payload: notification
   };
 }
 
-function toggleChallengeDuelNotification(notif) {
+function toggleChallengeDuelNotification(notification) {
   return {
     type: TOGGLE_CHALLENGE_DUEL_NOTIFICATION,
-    payload: notif
+    payload: notification
   };
 }
 
-function toggleAnalysisNotification(notif) {
+function toggleAnalysisNotification(notification) {
   return {
     type: TOGGLE_ANALYSIS_NOTIFICATION,
-    payload: notif
+    payload: notification
   };
 }
 
@@ -24531,13 +24523,11 @@ var EcogestureFormView = function EcogestureFormView() {
   };
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profile;
+    return state.ecolyo;
   }),
-      isProfileTypeCompleted = _useSelector.isProfileTypeCompleted;
+      isProfileTypeCompleted = _useSelector.profile.isProfileTypeCompleted,
+      curProfileEcogesture = _useSelector.profileEcogesture;
 
-  var curProfileEcogesture = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profileEcogesture;
-  });
   var shouldOpenModal = new URLSearchParams((0, _reactRouterDom.useLocation)().search).get('modal');
 
   var _useState3 = (0, _react.useState)(_ecogestureForm.EcogestureStepForm.HEATING_TYPE),
@@ -25220,9 +25210,10 @@ var ProfileTypeFinished = function ProfileTypeFinished(_ref) {
   var client = (0, _cozyClient.useClient)();
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.challenge;
+    return state.ecolyo;
   }),
-      currentChallenge = _useSelector.currentChallenge;
+      currentChallenge = _useSelector.challenge.currentChallenge,
+      profile = _useSelector.profile;
 
   var handleClick = function handleClick() {
     if ((location === null || location === void 0 ? void 0 : location.pathname) === '/ecogesture-form') {
@@ -25241,9 +25232,6 @@ var ProfileTypeFinished = function ProfileTypeFinished(_ref) {
       _useExploration2 = (0, _slicedToArray2.default)(_useExploration, 2),
       setValidExploration = _useExploration2[1];
 
-  var profile = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profile;
-  });
   (0, _react2.useEffect)(function () {
     function checkForExistingProfileType() {
       return _checkForExistingProfileType.apply(this, arguments);
@@ -26009,7 +25997,7 @@ var Header = function Header(_ref) {
   }, [backFunction, navigate]);
 
   var handleClickFeedbacks = function handleClickFeedbacks() {
-    dispatch((0, _modal.updateModalIsFeedbacksOpen)(true));
+    dispatch((0, _modal.openFeedbackModal)(true));
   };
 
   (0, _react.useEffect)(function () {
@@ -27345,9 +27333,8 @@ var _interopRequireDefault = __webpack_require__("TqRt");
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
-exports.UPDATE_PROFILE = exports.SET_FIRST_CONNECTION = void 0;
+exports.UPDATE_PROFILE = void 0;
 exports.updateProfile = updateProfile;
-exports.updateProfileSuccess = updateProfileSuccess;
 
 var _regenerator = _interopRequireDefault(__webpack_require__("o0o1"));
 
@@ -27357,18 +27344,15 @@ var _profile = _interopRequireDefault(__webpack_require__("2l2O"));
 
 var UPDATE_PROFILE = 'UPDATE_PROFILE';
 exports.UPDATE_PROFILE = UPDATE_PROFILE;
-var SET_FIRST_CONNECTION = 'SET_FIRST_CONNECTION';
-exports.SET_FIRST_CONNECTION = SET_FIRST_CONNECTION;
 
 function updateProfileSuccess(updatedProfile) {
   return {
     type: UPDATE_PROFILE,
     payload: updatedProfile
   };
-} // eslint-disable-next-line @typescript-eslint/no-explicit-any
-
+}
 
-function updateProfile(upd) {
+function updateProfile(updates) {
   return /*#__PURE__*/function () {
     var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(dispatch, getState, _ref) {
       var client, profileService, updatedProfile;
@@ -27379,7 +27363,7 @@ function updateProfile(upd) {
               client = _ref.client;
               profileService = new _profile.default(client);
               _context.next = 4;
-              return profileService.updateProfile(upd);
+              return profileService.updateProfile(updates);
 
             case 4:
               updatedProfile = _context.sent;
@@ -30042,17 +30026,17 @@ module.exports = JSON.parse("[{\"_id\":\"QUIZ001\",\"questions\":[{\"questionLab
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
-exports.UPDATE_MODAL_ISFEEDBACKSOPEN = exports.OPEN_PARTNERS_MODAL = void 0;
+exports.OPEN_PARTNERS_MODAL = exports.OPEN_FEEDBACK_MODAL = void 0;
+exports.openFeedbackModal = openFeedbackModal;
 exports.openPartnersModal = openPartnersModal;
-exports.updateModalIsFeedbacksOpen = updateModalIsFeedbacksOpen;
-var UPDATE_MODAL_ISFEEDBACKSOPEN = 'UPDATE_MODAL_ISFEEDBACKSOPEN';
-exports.UPDATE_MODAL_ISFEEDBACKSOPEN = UPDATE_MODAL_ISFEEDBACKSOPEN;
-var OPEN_PARTNERS_MODAL = 'SET_PARTNERS_ISSUE';
+var OPEN_PARTNERS_MODAL = 'OPEN_PARTNERS_ISSUE';
 exports.OPEN_PARTNERS_MODAL = OPEN_PARTNERS_MODAL;
+var OPEN_FEEDBACK_MODAL = 'OPEN_FEEDBACK_MODAL';
+exports.OPEN_FEEDBACK_MODAL = OPEN_FEEDBACK_MODAL;
 
-function updateModalIsFeedbacksOpen(isOpen) {
+function openFeedbackModal(isOpen) {
   return {
-    type: UPDATE_MODAL_ISFEEDBACKSOPEN,
+    type: OPEN_FEEDBACK_MODAL,
     payload: isOpen
   };
 }
@@ -31222,15 +31206,12 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
 function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
 
 var ProfileTypeView = function ProfileTypeView() {
-  var profile = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profile;
-  });
-  var curProfileType = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profileType;
-  });
-  var curProfileEcogesture = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profileEcogesture;
-  });
+  var _useSelector = (0, _reactRedux.useSelector)(function (state) {
+    return state.ecolyo;
+  }),
+      profile = _useSelector.profile,
+      curProfileType = _useSelector.profileType,
+      curProfileEcogesture = _useSelector.profileEcogesture;
 
   var _useState = (0, _react.useState)(0),
       _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -33179,14 +33160,10 @@ var ActionList = function ActionList(_ref) {
   var client = (0, _cozyClient.useClient)();
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profile;
-  }),
-      isProfileTypeCompleted = _useSelector.isProfileTypeCompleted;
-
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
+    return state.ecolyo;
   }),
-      fluidTypes = _useSelector2.fluidTypes;
+      fluidTypes = _useSelector.global.fluidTypes,
+      isProfileTypeCompleted = _useSelector.profile.isProfileTypeCompleted;
 
   var _useState = (0, _react.useState)(),
       _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -34522,14 +34499,10 @@ var App = function App(_ref) {
   var location = (0, _reactRouterDom.useLocation)();
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.profile;
-  }),
-      onboarding = _useSelector.onboarding;
-
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
+    return state.ecolyo;
   }),
-      termsStatus = _useSelector2.termsStatus;
+      termsStatus = _useSelector.global.termsStatus,
+      onboarding = _useSelector.profile.onboarding;
 
   (0, _react.useEffect)(function () {
     tracker === null || tracker === void 0 ? void 0 : tracker.track(location);
@@ -35755,12 +35728,8 @@ var ChallengeCardUnlocked = function ChallengeCardUnlocked(_ref) {
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
     return state.ecolyo.global;
   }),
-      fluidTypes = _useSelector.fluidTypes;
-
-  var _useSelector2 = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo.global;
-  }),
-      fluidStatus = _useSelector2.fluidStatus;
+      fluidTypes = _useSelector.fluidTypes,
+      fluidStatus = _useSelector.fluidStatus;
 
   var _useState3 = (0, _react.useState)(_challengeLocked.default),
       _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
@@ -38657,7 +38626,7 @@ var InitializationService = /*#__PURE__*/function () {
 
                 return _context10.abrupt("return", {
                   monthlyAnalysisDate: actualAnalysisDate,
-                  haveSeenLastAnalysis: profile.isFirstConnection ? true : false
+                  haveSeenLastAnalysis: profile.isFirstConnection
                 });
 
               case 8:
@@ -39123,18 +39092,22 @@ var initialState = {
 var modalReducer = function modalReducer() {
   var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
   var action = arguments.length > 1 ? arguments[1] : undefined;
+  if (action.payload == undefined) return state;
+
+  var updateState = function updateState(updates) {
+    return _objectSpread(_objectSpread({}, state), updates);
+  };
 
   switch (action.type) {
-    case _modal.UPDATE_MODAL_ISFEEDBACKSOPEN:
-      var isOpen = action.payload != undefined ? action.payload : state.isFeedbacksOpen;
-      return _objectSpread(_objectSpread({}, state), {}, {
-        isFeedbacksOpen: isOpen
+    case _modal.OPEN_FEEDBACK_MODAL:
+      return updateState({
+        isFeedbacksOpen: action.payload
       });
 
     case _modal.OPEN_PARTNERS_MODAL:
-      return action.payload != undefined ? _objectSpread(_objectSpread({}, state), {}, {
+      return updateState({
         partnersIssueModal: action.payload
-      }) : state;
+      });
 
     default:
       return state;
diff --git a/index.html b/index.html
index 9451d7428a2f2053b1710ed0d012ae8a42bf81fe..5bc9fac4e2f9989b627ad074e4e50ae2696314a4 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.35f915516b9585855081.js"></script><script src="app/ecolyo.ae4d817db51322a0a71b.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.35f915516b9585855081.js"></script><script src="app/ecolyo.838f0e88d174c23c5f6e.js"></script></div></body></html>
\ No newline at end of file