diff --git a/5/ecolyo.98373c556b027bc81ab4.js b/5/ecolyo.cf7d1f9bca710f0b366e.js
similarity index 99%
rename from 5/ecolyo.98373c556b027bc81ab4.js
rename to 5/ecolyo.cf7d1f9bca710f0b366e.js
index efdaf068ad487228e14c886ff30578749c1e7905..0f943387643cd71cd4e84664f01698ba85861861 100644
--- a/5/ecolyo.98373c556b027bc81ab4.js
+++ b/5/ecolyo.cf7d1f9bca710f0b366e.js
@@ -2008,7 +2008,7 @@ var _partnersInfo2 = _interopRequireDefault(__webpack_require__("4zrG"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 var _chart = __webpack_require__("idK9");
 
@@ -2181,10 +2181,7 @@ var KonnectorViewerCard = function KonnectorViewerCard(_ref) {
             _yield$challengeServi = _context2.sent;
             updatedUserChallenge = _yield$challengeServi.updatedUserChallenge;
             dataloads = _yield$challengeServi.dataloads;
-            dispatch((0, _challenge2.setChallengeConsumption)({
-              userChallenge: updatedUserChallenge,
-              currentDataload: dataloads
-            })); // Check is duel is done and display notification
+            dispatch((0, _challenge2.setChallengeConsumption)(updatedUserChallenge, dataloads)); // Check is duel is done and display notification
 
             _context2.next = 10;
             return challengeService.isChallengeDone(updatedUserChallenge, dataloads);
diff --git a/6/ecolyo.54d0e15353c0b4003a05.js b/6/ecolyo.c03889ab8782bad3bebe.js
similarity index 99%
rename from 6/ecolyo.54d0e15353c0b4003a05.js
rename to 6/ecolyo.c03889ab8782bad3bebe.js
index da7ff5c41d728df279b0dc133763e47ba99f2a2a..3db59504b1f3a62463869888d36ce60cddbad5c9 100644
--- a/6/ecolyo.54d0e15353c0b4003a05.js
+++ b/6/ecolyo.c03889ab8782bad3bebe.js
@@ -408,7 +408,7 @@ exports.default = _default;
 
 exports = module.exports = __webpack_require__("JPst")(false);
 // Module
-exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.ec-empty-container {\n  margin-top: 6rem;\n}\n.ec-empty-container .ec-empty-content {\n  color: #e0e0e0;\n  text-align: center;\n  padding: 0 1.5rem;\n  display: flex;\n  gap: 1rem;\n  flex-direction: column;\n  align-items: center;\n  margin: 0 auto;\n}\n@media (min-width: 576px) {\n  .ec-empty-container .ec-empty-content {\n    max-width: 45%;\n  }\n}\n@media (min-width: 1200px) {\n  .ec-empty-container .ec-empty-content {\n    max-width: 35%;\n  }\n}\n.ec-empty-container .ec-empty-content .btn-container {\n  margin-top: 1rem;\n  display: flex;\n  gap: 1rem;\n}\n.ec-empty-container .ec-empty-content .btn-container button {\n  margin: 0;\n}\n.ec-empty-container .ec-empty-content .reinit-button {\n  margin-left: 15px;\n}", ""]);
+exports.push([module.i, "/** BLACK **/\n/** RED **/\n/** YELLOW **/\n/** ORANGE **/\n/** BLUE **/\n/** GREEN **/\n/** WHITE **/\n/** GREY **/\n/** App colors **/\n/** TABS GRADIENT **/\n/** SCROLLBAR **/\n.ec-empty-container {\n  margin-top: 6rem;\n}\n.ec-empty-container .ec-empty-content {\n  color: #e0e0e0;\n  text-align: center;\n  padding: 0 1.5rem;\n  display: flex;\n  gap: 1rem;\n  flex-direction: column;\n  align-items: center;\n  margin: 0 auto;\n}\n@media (min-width: 576px) {\n  .ec-empty-container .ec-empty-content {\n    max-width: 45%;\n  }\n}\n@media (min-width: 1200px) {\n  .ec-empty-container .ec-empty-content {\n    max-width: 35%;\n  }\n}\n.ec-empty-container .ec-empty-content .btn-container {\n  margin-top: 1rem;\n  display: flex;\n  gap: 1rem;\n}\n.ec-empty-container .ec-empty-content .btn-container button {\n  margin: 0;\n}\n.ec-empty-container .ec-empty-content .btn-container button.btn2 {\n  margin-left: 1rem;\n}\n.ec-empty-container .ec-empty-content .reinit-button {\n  margin-left: 15px;\n}", ""]);
 
 
 
@@ -1393,7 +1393,7 @@ var EcogestureEmptyList = function EcogestureEmptyList(_ref) {
       navigate('/ecogesture-form');
     },
     classes: {
-      root: 'btn-highlight',
+      root: 'btn-highlight btn2',
       label: 'text-16-bold'
     }
   }, t('ecogesture.emptyList.btn2')))));
diff --git a/app/ecolyo.2b3ed6912e09b4da5a5f.js b/app/ecolyo.dcfbc89e7d447dd82770.js
similarity index 99%
rename from app/ecolyo.2b3ed6912e09b4da5a5f.js
rename to app/ecolyo.dcfbc89e7d447dd82770.js
index 5880b19eef2125aaf2e2a5fef643fcd4d1e637ba..200b7c585f3e03b520722bbd36c2befeb27ddc3c 100644
--- a/app/ecolyo.2b3ed6912e09b4da5a5f.js
+++ b/app/ecolyo.dcfbc89e7d447dd82770.js
@@ -64,7 +64,7 @@
 /******/
 /******/ 	// script path function
 /******/ 	function jsonpScriptSrc(chunkId) {
-/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"1":"c44aefc530d1de68ee3f","3":"eff4cc1e75bcc37e8fed","4":"4bdc1836bb506dfd5fea","5":"98373c556b027bc81ab4","6":"54d0e15353c0b4003a05","7":"1850b6ce28566211a509","8":"5a104e5906433ba909f2","9":"d4e0f8345c64c54574af"}[chunkId] + ".js"
+/******/ 		return __webpack_require__.p + "" + ({}[chunkId]||chunkId) + "/ecolyo." + {"1":"c44aefc530d1de68ee3f","3":"eff4cc1e75bcc37e8fed","4":"4bdc1836bb506dfd5fea","5":"cf7d1f9bca710f0b366e","6":"c03889ab8782bad3bebe","7":"1850b6ce28566211a509","8":"5a104e5906433ba909f2","9":"d4e0f8345c64c54574af"}[chunkId] + ".js"
 /******/ 	}
 /******/
 /******/ 	// The require function
@@ -415,7 +415,7 @@ var _quiz = _interopRequireDefault(__webpack_require__("CUhI"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 __webpack_require__("mFBf");
 
@@ -1695,7 +1695,7 @@ var _profileTypeEntity = _interopRequireDefault(__webpack_require__("aypK"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 var _chart = __webpack_require__("idK9");
 
@@ -2130,10 +2130,7 @@ var SplashRoot = function SplashRoot(_ref) {
                   break;
                 }
 
-                dispatch((0, _challenge2.setChallengeConsumption)({
-                  userChallenge: _updatedUserChallenge,
-                  currentDataload: dataloads
-                })); // Check is duel is done and display notification
+                dispatch((0, _challenge2.setChallengeConsumption)(_updatedUserChallenge, dataloads)); // Check is duel is done and display notification
 
                 challengeService = new _challenge.default(client);
                 _context7.next = 74;
@@ -5681,7 +5678,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 var _global = __webpack_require__("c4IZ");
 
@@ -10344,7 +10341,7 @@ var _global = __webpack_require__("YNKm");
 
 var _analysis = __webpack_require__("JQjK");
 
-var _challenge = __webpack_require__("F6Xr");
+var _challenge = __webpack_require__("TYd+");
 
 var _chart = __webpack_require__("idK9");
 
@@ -10367,7 +10364,7 @@ var defaultAction = {
 exports.defaultAction = defaultAction;
 var ecolyoReducer = (0, _redux.combineReducers)({
   analysis: _analysis.analysisSlice.reducer,
-  challenge: _challenge.challengeSlice.reducer,
+  challenge: _challenge.challengeReducer,
   chart: _chart.chartSlice.reducer,
   global: _global.globalReducer,
   modal: _modal.modalSlice.reducer,
@@ -11024,25 +11021,26 @@ var QuizService = /*#__PURE__*/function () {
     key: "startUserQuiz",
     value: function () {
       var _startUserQuiz = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(userQuiz) {
-        var questions;
+        var questions, randomizedQuestions, updatedUserQuiz;
         return _regenerator.default.wrap(function _callee4$(_context4) {
           while (1) {
             switch (_context4.prev = _context4.next) {
               case 0:
-                questions = userQuiz.questions.map(function (question) {
-                  return _objectSpread(_objectSpread({}, question), {}, {
-                    answers: (0, _lodash.shuffle)(question.answers)
-                  });
+                questions = userQuiz.questions;
+                questions.forEach(function (question) {
+                  return question.answers = (0, _lodash.shuffle)(question.answers);
                 });
-                return _context4.abrupt("return", _objectSpread(_objectSpread({}, userQuiz), {}, {
-                  questions: (0, _lodash.shuffle)(questions),
+                randomizedQuestions = (0, _lodash.shuffle)(questions);
+                updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
+                  questions: randomizedQuestions,
                   state: _userQuiz.UserQuizState.ONGOING,
                   startDate: _luxon.DateTime.local().setZone('utc', {
                     keepLocalTime: true
                   })
-                }));
+                });
+                return _context4.abrupt("return", updatedUserQuiz);
 
-              case 2:
+              case 5:
               case "end":
                 return _context4.stop();
             }
@@ -11066,27 +11064,27 @@ var QuizService = /*#__PURE__*/function () {
     key: "resetUserQuiz",
     value: function () {
       var _resetUserQuiz = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(userQuiz) {
-        var updatedQuestions, updatedCustomQuestion;
+        var updatedQuestions, updatedCustomQuestion, updatedUserQuiz;
         return _regenerator.default.wrap(function _callee5$(_context5) {
           while (1) {
             switch (_context5.prev = _context5.next) {
               case 0:
-                updatedQuestions = userQuiz.questions.map(function (question) {
-                  return _objectSpread(_objectSpread({}, question), {}, {
-                    result: _userQuiz.UserQuestionState.UNLOCKED
-                  });
+                updatedQuestions = userQuiz.questions;
+                updatedQuestions.forEach(function (question) {
+                  question.result = _userQuiz.UserQuestionState.UNLOCKED;
                 });
                 updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
                   result: _userQuiz.UserQuestionState.UNLOCKED
                 });
-                return _context5.abrupt("return", _objectSpread(_objectSpread({}, userQuiz), {}, {
+                updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
                   customQuestion: updatedCustomQuestion,
                   questions: updatedQuestions,
                   result: 0,
                   state: _userQuiz.UserQuizState.UNLOCKED
-                }));
+                });
+                return _context5.abrupt("return", updatedUserQuiz);
 
-              case 3:
+              case 5:
               case "end":
                 return _context5.stop();
             }
@@ -11146,31 +11144,32 @@ var QuizService = /*#__PURE__*/function () {
     key: "updateUserQuiz",
     value: function () {
       var _updateUserQuiz = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(userQuiz, questionResult, questionIndex) {
-        var result, updatedQuestions, updatedCustomQuestion;
+        var updatedQuestion, _updatedQuestion, quizScoreLimit, updatedUserQuiz;
+
         return _regenerator.default.wrap(function _callee7$(_context7) {
           while (1) {
             switch (_context7.prev = _context7.next) {
               case 0:
-                result = questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT;
-                updatedQuestions = userQuiz.questions.map(function (question, index) {
-                  if (index === questionIndex) {
-                    return _objectSpread(_objectSpread({}, question), {}, {
-                      result: result
-                    });
-                  }
+                if (questionIndex !== undefined) {
+                  updatedQuestion = _objectSpread(_objectSpread({}, userQuiz.questions[questionIndex]), {}, {
+                    result: questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT
+                  });
+                  userQuiz.questions[questionIndex] = updatedQuestion;
+                } else {
+                  _updatedQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
+                    result: questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT
+                  });
+                  userQuiz.customQuestion = _updatedQuestion;
+                }
 
-                  return question;
-                });
-                updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
-                  result: result
+                quizScoreLimit = userQuiz.result;
+                quizScoreLimit = quizScoreLimit + 1 > 5 ? 5 : quizScoreLimit + 1;
+                updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
+                  result: questionResult ? quizScoreLimit : userQuiz.result
                 });
-                return _context7.abrupt("return", _objectSpread(_objectSpread({}, userQuiz), {}, {
-                  questions: updatedQuestions,
-                  customQuestion: questionIndex === undefined ? updatedCustomQuestion : userQuiz.customQuestion,
-                  result: questionResult ? Math.min(userQuiz.result + 1, 5) : userQuiz.result
-                }));
+                return _context7.abrupt("return", updatedUserQuiz);
 
-              case 4:
+              case 5:
               case "end":
                 return _context7.stop();
             }
@@ -12847,19 +12846,6 @@ Object.keys(_profile).forEach(function (key) {
   });
 });
 
-var _profileEcogesture = __webpack_require__("ZzqV");
-
-Object.keys(_profileEcogesture).forEach(function (key) {
-  if (key === "default" || key === "__esModule") return;
-  if (key in exports && exports[key] === _profileEcogesture[key]) return;
-  Object.defineProperty(exports, key, {
-    enumerable: true,
-    get: function get() {
-      return _profileEcogesture[key];
-    }
-  });
-});
-
 var _profileType = __webpack_require__("G32H");
 
 Object.keys(_profileType).forEach(function (key) {
@@ -13720,105 +13706,6 @@ if(false) {}
 
 /***/ }),
 
-/***/ "F6Xr":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var _interopRequireDefault = __webpack_require__("TqRt");
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.updateUserChallengeList = exports.unlockNextUserChallenge = exports.setUserChallengeList = exports.setChallengeConsumption = exports.challengeSlice = void 0;
-
-var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA"));
-
-var _toConsumableArray2 = _interopRequireDefault(__webpack_require__("RIqP"));
-
-var _toolkit = __webpack_require__("i7Pf");
-
-var _userChallenge = __webpack_require__("dQx6");
-
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
-
-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 initialState = {
-  userChallengeList: [],
-  currentChallenge: null,
-  currentDataload: []
-};
-var challengeSlice = (0, _toolkit.createSlice)({
-  name: 'challenge',
-  initialState: initialState,
-  reducers: {
-    setUserChallengeList: function setUserChallengeList(state, action) {
-      var filteredCurrentChallenge = action.payload.filter(function (challenge) {
-        return challenge.state === _userChallenge.UserChallengeState.ONGOING || challenge.state === _userChallenge.UserChallengeState.DUEL;
-      });
-      var currentChallenge = filteredCurrentChallenge[0] || null;
-      state.userChallengeList = action.payload;
-      state.currentChallenge = currentChallenge;
-    },
-    updateUserChallengeList: function updateUserChallengeList(state, action) {
-      var id = action.payload.id;
-      var currentChallenge = action.payload.state === _userChallenge.UserChallengeState.ONGOING || action.payload.state === _userChallenge.UserChallengeState.DUEL ? action.payload : null;
-      var updatedList = (0, _toConsumableArray2.default)(state.userChallengeList);
-      var findIndex = updatedList.findIndex(function (challenge) {
-        return challenge.id === id;
-      });
-      updatedList[findIndex] = action.payload;
-      state.userChallengeList = updatedList;
-      state.currentChallenge = currentChallenge || state.currentChallenge;
-    },
-    unlockNextUserChallenge: function unlockNextUserChallenge(state, action) {
-      var id = action.payload.id;
-      var updatedList = (0, _toConsumableArray2.default)(state.userChallengeList);
-      var findIndex = updatedList.findIndex(function (challenge) {
-        return challenge.id === id;
-      });
-      updatedList[findIndex] = action.payload;
-
-      if (typeof updatedList[findIndex + 1] !== 'undefined') {
-        updatedList[findIndex + 1] = _objectSpread(_objectSpread({}, updatedList[findIndex + 1]), {}, {
-          state: _userChallenge.UserChallengeState.UNLOCKED
-        });
-      }
-
-      state.userChallengeList = updatedList;
-      state.currentChallenge = null;
-    },
-    setChallengeConsumption: function setChallengeConsumption(state, action) {
-      var id = action.payload.userChallenge.id;
-      var updatedList = (0, _toConsumableArray2.default)(state.userChallengeList);
-      var findIndex = updatedList.findIndex(function (challenge) {
-        return challenge.id === id;
-      });
-      updatedList[findIndex] = action.payload.userChallenge;
-      state.userChallengeList = updatedList;
-      state.currentDataload = action.payload.currentDataload;
-
-      if (state.currentChallenge && state.currentChallenge.id === action.payload.userChallenge.id) {
-        state.currentChallenge = action.payload.userChallenge;
-      }
-    }
-  }
-});
-exports.challengeSlice = challengeSlice;
-var _challengeSlice$actio = challengeSlice.actions,
-    setChallengeConsumption = _challengeSlice$actio.setChallengeConsumption,
-    setUserChallengeList = _challengeSlice$actio.setUserChallengeList,
-    unlockNextUserChallenge = _challengeSlice$actio.unlockNextUserChallenge,
-    updateUserChallengeList = _challengeSlice$actio.updateUserChallengeList;
-exports.updateUserChallengeList = updateUserChallengeList;
-exports.unlockNextUserChallenge = unlockNextUserChallenge;
-exports.setUserChallengeList = setUserChallengeList;
-exports.setChallengeConsumption = setChallengeConsumption;
-
-/***/ }),
-
 /***/ "FCQH":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -14100,7 +13987,7 @@ var _reactRouterDom = __webpack_require__("SOjZ");
 
 var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 var _utils = __webpack_require__("c+yx");
 
@@ -16848,8 +16735,6 @@ var _profileType2 = __webpack_require__("D9qV");
 
 var _react = _interopRequireWildcard(__webpack_require__("q1tI"));
 
-var _reactRedux = __webpack_require__("/MKj");
-
 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; }
@@ -16875,12 +16760,6 @@ var ProfileTypeFormSingleChoice = function ProfileTypeFormSingleChoice(_ref) {
       answer = _useState2[0],
       setAnswer = _useState2[1];
 
-  var _useSelector = (0, _reactRedux.useSelector)(function (state) {
-    return state.ecolyo;
-  }),
-      isProfileEcogestureCompleted = _useSelector.profile.isProfileEcogestureCompleted,
-      profileEcogesture = _useSelector.profileEcogesture;
-
   var handlePrevious = (0, _react.useCallback)(function () {
     setPreviousStep(profileType);
   }, [profileType, setPreviousStep]);
@@ -16888,16 +16767,8 @@ var ProfileTypeFormSingleChoice = function ProfileTypeFormSingleChoice(_ref) {
     setNextStep(_objectSpread(_objectSpread({}, profileType), {}, (0, _defineProperty2.default)({}, answerType.attribute, answer)));
   }, [profileType, setNextStep, answer, answerType.attribute]);
   (0, _react.useEffect)(function () {
-    // Set answer if profileType is completed
     if (step < viewedStep || isProfileTypeComplete) {
       setAnswer(profileType[answerType.attribute]);
-      return;
-    } // Set answer if ecogestureProfile is completed
-
-
-    if (isProfileEcogestureCompleted) {
-      setAnswer(profileEcogesture[answerType.attribute]);
-      return;
     }
   }, [step, viewedStep, profileType, answerType, isProfileTypeComplete]);
   return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
@@ -16915,7 +16786,7 @@ var ProfileTypeFormSingleChoice = function ProfileTypeFormSingleChoice(_ref) {
       className: (0, _classnames.default)((_classNames = {}, (0, _defineProperty2.default)(_classNames, 'radio_short', answerType.choices.length < 5), (0, _defineProperty2.default)(_classNames, 'radio_long', answerType.choices.length > 4), (0, _defineProperty2.default)(_classNames, 'answer-checked', answer === value), _classNames))
     }, /*#__PURE__*/_react.default.createElement("input", {
       type: 'radio',
-      value: value.toString(),
+      value: value,
       name: value.toString(),
       onChange: function onChange() {
         return setAnswer(value);
@@ -16926,7 +16797,7 @@ var ProfileTypeFormSingleChoice = function ProfileTypeFormSingleChoice(_ref) {
     step: step,
     handlePrevious: handlePrevious,
     handleNext: handleNext,
-    disableNextButton: answer === '' || answer === undefined
+    disableNextButton: answer === ''
   }));
 };
 
@@ -17660,7 +17531,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _quiz = _interopRequireDefault(__webpack_require__("CUhI"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 __webpack_require__("mFBf");
 
@@ -17848,7 +17719,7 @@ var _reactRouterDom = __webpack_require__("SOjZ");
 
 var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 __webpack_require__("Giwf");
 
@@ -19209,7 +19080,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 var _utils = __webpack_require__("c+yx");
 
@@ -19260,10 +19131,7 @@ var DuelUnlocked = function DuelUnlocked(_ref) {
             });
 
           case 9:
-            dispatch((0, _challenge2.setChallengeConsumption)({
-              userChallenge: updatedChallenge,
-              currentDataload: dataloads
-            }));
+            dispatch((0, _challenge2.setChallengeConsumption)(updatedChallenge, dataloads));
 
           case 10:
           case "end":
@@ -19363,6 +19231,127 @@ var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WE
 
 /***/ }),
 
+/***/ "TYd+":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var _interopRequireDefault = __webpack_require__("TqRt");
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.challengeReducer = void 0;
+
+var _toConsumableArray2 = _interopRequireDefault(__webpack_require__("RIqP"));
+
+var _defineProperty2 = _interopRequireDefault(__webpack_require__("lSNA"));
+
+var _userChallenge = __webpack_require__("dQx6");
+
+var _challenge = __webpack_require__("ojwR");
+
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+
+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 initialState = {
+  userChallengeList: [],
+  currentChallenge: null,
+  currentDataload: []
+};
+
+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:
+      {
+        var filteredCurrentChallenge = action.payload.filter(function (challenge) {
+          return challenge.state === _userChallenge.UserChallengeState.ONGOING || challenge.state === _userChallenge.UserChallengeState.DUEL;
+        });
+        var currentChallenge = filteredCurrentChallenge[0] || null;
+        return updateState({
+          userChallengeList: action.payload,
+          currentChallenge: currentChallenge
+        });
+      }
+
+    case _challenge.UPDATE_USER_CHALLENGE_LIST:
+      {
+        var id = action.payload.id;
+
+        var _currentChallenge = action.payload.state === _userChallenge.UserChallengeState.ONGOING || action.payload.state === _userChallenge.UserChallengeState.DUEL ? action.payload : null;
+
+        var updatedList = (0, _toConsumableArray2.default)(state.userChallengeList);
+        var findIndex = updatedList.findIndex(function (challenge) {
+          return challenge.id === id;
+        });
+        updatedList[findIndex] = action.payload;
+        return updateState({
+          userChallengeList: updatedList,
+          currentChallenge: _currentChallenge || state.currentChallenge
+        });
+      }
+
+    case _challenge.UNLOCK_NEXT_USER_CHALLENGE:
+      {
+        var _id = action.payload.id;
+
+        var _updatedList = (0, _toConsumableArray2.default)(state.userChallengeList);
+
+        var _findIndex = _updatedList.findIndex(function (challenge) {
+          return challenge.id === _id;
+        });
+
+        _updatedList[_findIndex] = action.payload;
+
+        if (typeof _updatedList[_findIndex + 1] !== 'undefined') {
+          _updatedList[_findIndex + 1] = _objectSpread(_objectSpread({}, _updatedList[_findIndex + 1]), {}, {
+            state: _userChallenge.UserChallengeState.UNLOCKED
+          });
+        }
+
+        return updateState({
+          userChallengeList: _updatedList,
+          currentChallenge: null
+        });
+      }
+
+    case _challenge.SET_CHALLENGE_CONSUMPTION:
+      {
+        var _id2 = action.payload.userChallenge.id;
+
+        var _updatedList2 = (0, _toConsumableArray2.default)(state.userChallengeList);
+
+        var _findIndex2 = _updatedList2.findIndex(function (challenge) {
+          return challenge.id === _id2;
+        });
+
+        _updatedList2[_findIndex2] = action.payload.userChallenge;
+        return updateState({
+          userChallengeList: _updatedList2,
+          currentChallenge: state.currentChallenge && state.currentChallenge.id === action.payload.userChallenge.id ? action.payload.userChallenge : state.currentChallenge,
+          currentDataload: action.payload.currentDataload
+        });
+      }
+
+    default:
+      return state;
+  }
+};
+
+exports.challengeReducer = challengeReducer;
+
+/***/ }),
+
 /***/ "Tg1I":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -23623,14 +23612,6 @@ var symbol = new _node_modules_svg_baker_runtime_browser_symbol_js__WEBPACK_IMPO
 var result = _node_modules_svg_sprite_loader_runtime_browser_sprite_build_js__WEBPACK_IMPORTED_MODULE_1___default.a.add(symbol);
 /* harmony default export */ __webpack_exports__["default"] = (symbol);
 
-/***/ }),
-
-/***/ "ZzqV":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
 /***/ }),
 
 /***/ "a3QZ":
@@ -26977,7 +26958,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 var _global = __webpack_require__("c4IZ");
 
@@ -28588,23 +28569,18 @@ var _react = _interopRequireDefault(__webpack_require__("q1tI"));
 
 var _reactRedux = __webpack_require__("/MKj");
 
-var DuelBar = function DuelBar(_ref) {
-  var userChallenge = _ref.userChallenge,
+var DuelBar = function DuelBar(props) {
+  var _ref = props,
+      userChallenge = _ref.userChallenge,
       finishedDataLoad = _ref.finishedDataLoad,
       timeStep = _ref.timeStep,
       average = _ref.average,
-      _ref$width = _ref.width,
-      width = _ref$width === void 0 ? 600 : _ref$width,
-      _ref$height = _ref.height,
-      height = _ref$height === void 0 ? 400 : _ref$height,
-      _ref$marginLeft = _ref.marginLeft,
-      marginLeft = _ref$marginLeft === void 0 ? 10 : _ref$marginLeft,
-      _ref$marginRight = _ref.marginRight,
-      marginRight = _ref$marginRight === void 0 ? 50 : _ref$marginRight,
-      _ref$marginTop = _ref.marginTop,
-      marginTop = _ref$marginTop === void 0 ? 20 : _ref$marginTop,
-      _ref$marginBottom = _ref.marginBottom,
-      marginBottom = _ref$marginBottom === void 0 ? 50 : _ref$marginBottom;
+      width = _ref.width,
+      height = _ref.height,
+      marginLeft = _ref.marginLeft,
+      marginRight = _ref.marginRight,
+      marginTop = _ref.marginTop,
+      marginBottom = _ref.marginBottom;
 
   var _useSelector = (0, _reactRedux.useSelector)(function (state) {
     return state.ecolyo.challenge;
@@ -28711,6 +28687,14 @@ var DuelBar = function DuelBar(_ref) {
   }));
 };
 
+DuelBar.defaultProps = {
+  width: 600,
+  height: 400,
+  marginLeft: 10,
+  marginRight: 50,
+  marginTop: 20,
+  marginBottom: 50
+};
 var _default = DuelBar;
 exports.default = _default;
 
@@ -30327,37 +30311,33 @@ var ChallengeService = /*#__PURE__*/function () {
     key: "startUserChallenge",
     value: function () {
       var _startUserChallenge = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(userChallenge) {
-        var newChallenge, _yield$this$_client$c, updatedUserChallengeEntity, updatedUserChallenge, errorMessage;
+        var _yield$this$_client$c, updatedUserChallengeEntity, updatedUserChallenge, errorMessage;
 
         return _regenerator.default.wrap(function _callee11$(_context12) {
           while (1) {
             switch (_context12.prev = _context12.next) {
               case 0:
-                newChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
-                  state: _userChallenge3.UserChallengeState.ONGOING,
-                  progress: {
-                    actionProgress: 0,
-                    explorationProgress: 0,
-                    quizProgress: 0
-                  },
-                  startDate: _luxon.DateTime.local().setZone('utc', {
-                    keepLocalTime: true
-                  }).startOf('day'),
-                  success: _userChallenge3.UserChallengeSuccess.ONGOING
-                });
-                _context12.prev = 1;
-                _context12.next = 4;
-                return this._client.create(_doctypes.USERCHALLENGE_DOCTYPE, newChallenge);
+                userChallenge.state = _userChallenge3.UserChallengeState.ONGOING;
+                userChallenge.progress.actionProgress = 0;
+                userChallenge.progress.explorationProgress = 0;
+                userChallenge.progress.quizProgress = 0;
+                userChallenge.startDate = _luxon.DateTime.local().setZone('utc', {
+                  keepLocalTime: true
+                }).startOf('day');
+                userChallenge.success = _userChallenge3.UserChallengeSuccess.ONGOING;
+                _context12.prev = 6;
+                _context12.next = 9;
+                return this._client.create(_doctypes.USERCHALLENGE_DOCTYPE, userChallenge);
 
-              case 4:
+              case 9:
                 _yield$this$_client$c = _context12.sent;
                 updatedUserChallengeEntity = _yield$this$_client$c.data;
                 updatedUserChallenge = this.parseUserChallengeEntityToUserChallenge(updatedUserChallengeEntity);
                 return _context12.abrupt("return", updatedUserChallenge);
 
-              case 10:
-                _context12.prev = 10;
-                _context12.t0 = _context12["catch"](1);
+              case 15:
+                _context12.prev = 15;
+                _context12.t0 = _context12["catch"](6);
                 errorMessage = "Challenge service error on startUserChallenge: ".concat(JSON.stringify(_context12.t0));
                 logStack('error', errorMessage);
 
@@ -30366,12 +30346,12 @@ var ChallengeService = /*#__PURE__*/function () {
                 Sentry.captureException(errorMessage);
                 throw _context12.t0;
 
-              case 17:
+              case 22:
               case "end":
                 return _context12.stop();
             }
           }
-        }, _callee11, this, [[1, 10]]);
+        }, _callee11, this, [[6, 15]]);
       }));
 
       function startUserChallenge(_x21) {
@@ -30392,7 +30372,7 @@ var ChallengeService = /*#__PURE__*/function () {
     key: "updateUserChallenge",
     value: function () {
       var _updateUserChallenge = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(userChallenge, flag, quizWithUpdatedQuestions, fluidStatus, action) {
-        var updatedUserChallenge, updatedDuel, updatedQuiz, updatedExploration, updatedAction, duelService, quizService, explorationService, actionService, updateQuizProgress, userAction, _yield$this$_client$s, userChallengeEntity, result, errorMessage;
+        var updatedUserChallenge, updatedDuel, updatedQuiz, updatedExploration, updatedAction, duelService, quizService, explorationService, actionService, userAction, _yield$this$_client$s, userChallengeEntity, result, errorMessage;
 
         return _regenerator.default.wrap(function _callee12$(_context13) {
           while (1) {
@@ -30407,12 +30387,12 @@ var ChallengeService = /*#__PURE__*/function () {
                 explorationService = new _exploration.default(this._client);
                 actionService = new _action.default(this._client);
                 _context13.t0 = flag;
-                _context13.next = _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.CHALLENGE ? 11 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_CONSUMPTION ? 11 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_UNLOCK ? 13 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_UPDATE_THRESHOLD ? 18 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_START ? 23 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_WIN ? 28 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_LOSS ? 33 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_START ? 38 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_DONE ? 43 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_UPDATE ? 49 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_RESET ? 51 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_START ? 56 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_UPDATE ? 61 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_NOTIFICATION ? 66 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_DONE ? 71 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_START ? 74 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_NOTIFICATION ? 78 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_DONE ? 81 : 84;
+                _context13.next = _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.CHALLENGE ? 11 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_CONSUMPTION ? 11 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_UNLOCK ? 13 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_UPDATE_THRESHOLD ? 18 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_START ? 23 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_WIN ? 28 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.DUEL_LOSS ? 33 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_START ? 38 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_DONE ? 43 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_UPDATE ? 50 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.QUIZ_RESET ? 52 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_START ? 57 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_UPDATE ? 62 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_NOTIFICATION ? 67 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.EXPLORATION_DONE ? 72 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_START ? 75 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_NOTIFICATION ? 79 : _context13.t0 === _userChallenge3.UserChallengeUpdateFlag.ACTION_DONE ? 82 : 85;
                 break;
 
               case 11:
                 updatedUserChallenge = userChallenge;
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
               case 13:
                 _context13.next = 15;
@@ -30424,7 +30404,7 @@ var ChallengeService = /*#__PURE__*/function () {
                   state: _userChallenge3.UserChallengeState.DUEL,
                   duel: updatedDuel
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
               case 18:
                 _context13.next = 20;
@@ -30436,7 +30416,7 @@ var ChallengeService = /*#__PURE__*/function () {
                   state: _userChallenge3.UserChallengeState.DUEL,
                   duel: updatedDuel
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
               case 23:
                 _context13.next = 25;
@@ -30448,7 +30428,7 @@ var ChallengeService = /*#__PURE__*/function () {
                   state: _userChallenge3.UserChallengeState.DUEL,
                   duel: updatedDuel
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
               case 28:
                 _context13.next = 30;
@@ -30464,7 +30444,7 @@ var ChallengeService = /*#__PURE__*/function () {
                   }).startOf('day'),
                   success: _userChallenge3.UserChallengeSuccess.WIN
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
               case 33:
                 _context13.next = 35;
@@ -30480,7 +30460,7 @@ var ChallengeService = /*#__PURE__*/function () {
                   }).startOf('day'),
                   success: _userChallenge3.UserChallengeSuccess.LOST
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
               case 38:
                 _context13.next = 40;
@@ -30491,74 +30471,78 @@ var ChallengeService = /*#__PURE__*/function () {
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   quiz: updatedQuiz
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
               case 43:
-                updateQuizProgress = Math.min(userChallenge.quiz.result, 5);
-                _context13.next = 46;
+                if (userChallenge.quiz.result > userChallenge.progress.quizProgress) {
+                  userChallenge.progress.quizProgress = userChallenge.quiz.result;
+                }
+
+                if (userChallenge.progress.quizProgress > 5) {
+                  userChallenge.progress.quizProgress = 5;
+                }
+
+                _context13.next = 47;
                 return quizService.endUserQuiz(userChallenge.quiz);
 
-              case 46:
+              case 47:
                 updatedQuiz = _context13.sent;
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
-                  quiz: updatedQuiz,
-                  progress: _objectSpread(_objectSpread({}, userChallenge.progress), {}, {
-                    quizProgress: updateQuizProgress
-                  })
+                  quiz: updatedQuiz
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
-              case 49:
+              case 50:
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   quiz: quizWithUpdatedQuestions ? quizWithUpdatedQuestions : userChallenge.quiz
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
-              case 51:
-                _context13.next = 53;
+              case 52:
+                _context13.next = 54;
                 return quizService.resetUserQuiz(userChallenge.quiz);
 
-              case 53:
+              case 54:
                 updatedQuiz = _context13.sent;
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   quiz: updatedQuiz
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
-              case 56:
-                _context13.next = 58;
+              case 57:
+                _context13.next = 59;
                 return explorationService.startUserExploration(userChallenge.exploration);
 
-              case 58:
+              case 59:
                 updatedExploration = _context13.sent;
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
-              case 61:
-                _context13.next = 63;
+              case 62:
+                _context13.next = 64;
                 return explorationService.updateUserExploration(userChallenge.exploration);
 
-              case 63:
+              case 64:
                 updatedExploration = _context13.sent;
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
-              case 66:
-                _context13.next = 68;
+              case 67:
+                _context13.next = 69;
                 return explorationService.awaitNotificationUserExploration(userChallenge.exploration);
 
-              case 68:
+              case 69:
                 updatedExploration = _context13.sent;
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
-              case 71:
+              case 72:
                 updatedExploration = explorationService.endUserExploration(userChallenge.exploration);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   exploration: updatedExploration,
@@ -30566,9 +30550,9 @@ var ChallengeService = /*#__PURE__*/function () {
                     explorationProgress: updatedExploration.progress
                   })
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
-              case 74:
+              case 75:
                 userAction = userChallenge.action;
 
                 if (action) {
@@ -30578,16 +30562,16 @@ var ChallengeService = /*#__PURE__*/function () {
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   action: userAction
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
-              case 78:
+              case 79:
                 updatedAction = actionService.awaitNotificationAction(userChallenge.action);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   action: updatedAction
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
-              case 81:
+              case 82:
                 updatedAction = actionService.endAction(userChallenge.action);
                 updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
                   action: updatedAction,
@@ -30595,26 +30579,26 @@ var ChallengeService = /*#__PURE__*/function () {
                     actionProgress: 5
                   })
                 });
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
-              case 84:
+              case 85:
                 updatedUserChallenge = userChallenge;
-                return _context13.abrupt("break", 86);
+                return _context13.abrupt("break", 87);
 
-              case 86:
-                _context13.prev = 86;
-                _context13.next = 89;
+              case 87:
+                _context13.prev = 87;
+                _context13.next = 90;
                 return this._client.save(updatedUserChallenge);
 
-              case 89:
+              case 90:
                 _yield$this$_client$s = _context13.sent;
                 userChallengeEntity = _yield$this$_client$s.data;
                 result = this.parseUserChallengeEntityToUserChallenge(userChallengeEntity);
                 return _context13.abrupt("return", result);
 
-              case 95:
-                _context13.prev = 95;
-                _context13.t1 = _context13["catch"](86);
+              case 96:
+                _context13.prev = 96;
+                _context13.t1 = _context13["catch"](87);
                 errorMessage = "Update user challenge error: ".concat(JSON.stringify(_context13.t1));
                 logStack('error', errorMessage);
 
@@ -30623,12 +30607,12 @@ var ChallengeService = /*#__PURE__*/function () {
                 Sentry.captureException(errorMessage);
                 throw _context13.t1;
 
-              case 102:
+              case 103:
               case "end":
                 return _context13.stop();
             }
           }
-        }, _callee12, this, [[86, 95]]);
+        }, _callee12, this, [[87, 96]]);
       }));
 
       function updateUserChallenge(_x22, _x23, _x24, _x25, _x26) {
@@ -30965,7 +30949,7 @@ var _reactRedux = __webpack_require__("/MKj");
 
 var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 __webpack_require__("HvHZ");
 
@@ -31972,7 +31956,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 var _global = __webpack_require__("c4IZ");
 
@@ -32257,24 +32241,16 @@ var ProfileTypeView = function ProfileTypeView() {
 
   var defineHeaderHeight = (0, _react.useCallback)(function (height) {
     setHeaderHeight(height);
-  }, []); // if ecogesture profile is completed, update default profileType
-
-  (0, _react.useEffect)(function () {
-    if (profile.isProfileEcogestureCompleted) {
-      setProfileType(_objectSpread(_objectSpread({}, profileType), {}, {
-        hotWater: curProfileEcogesture.hotWater,
-        heating: curProfileEcogesture.heating,
-        warmingFluid: curProfileEcogesture.warmingFluid,
-        equipments: curProfileEcogesture.equipments
-      }));
-    }
-  }, [profile.isProfileEcogestureCompleted]);
+  }, []);
   var setNextStep = (0, _react.useCallback)(function (_profileType) {
     var profileTypeFormService;
 
     if (_profileType) {
       setProfileType(_profileType);
       profileTypeFormService = new _profileTypeForm.default(_profileType);
+      curProfileEcogesture.heating = _profileType.heating;
+      curProfileEcogesture.hotWater = _profileType.hotWater;
+      curProfileEcogesture.warmingFluid = _profileType.warmingFluid;
     } else {
       // if equipments are updated, keep profileType as it is
       profileTypeFormService = new _profileTypeForm.default(_objectSpread({}, profileType));
@@ -32722,6 +32698,62 @@ exports.openFeedbackModal = openFeedbackModal;
 
 /***/ }),
 
+/***/ "ojwR":
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.UPDATE_USER_CHALLENGE_LIST = exports.UNLOCK_NEXT_USER_CHALLENGE = exports.SET_USER_CHALLENGE_LIST = exports.SET_CHALLENGE_CONSUMPTION = void 0;
+exports.setChallengeConsumption = setChallengeConsumption;
+exports.setUserChallengeList = setUserChallengeList;
+exports.unlockNextUserChallenge = unlockNextUserChallenge;
+exports.updateUserChallengeList = updateUserChallengeList;
+var SET_USER_CHALLENGE_LIST = 'SET_USER_CHALLENGE_LIST';
+exports.SET_USER_CHALLENGE_LIST = SET_USER_CHALLENGE_LIST;
+var UPDATE_USER_CHALLENGE_LIST = 'UPDATE_USER_CHALLENGE_LIST';
+exports.UPDATE_USER_CHALLENGE_LIST = UPDATE_USER_CHALLENGE_LIST;
+var UNLOCK_NEXT_USER_CHALLENGE = 'UNLOCK_NEXT_USER_CHALLENGE';
+exports.UNLOCK_NEXT_USER_CHALLENGE = UNLOCK_NEXT_USER_CHALLENGE;
+var SET_CHALLENGE_CONSUMPTION = 'SET_CHALLENGE_CONSUMPTION';
+exports.SET_CHALLENGE_CONSUMPTION = SET_CHALLENGE_CONSUMPTION;
+
+function setUserChallengeList(userChallengeList) {
+  return {
+    type: SET_USER_CHALLENGE_LIST,
+    payload: userChallengeList
+  };
+}
+
+function updateUserChallengeList(userChallenge) {
+  return {
+    type: UPDATE_USER_CHALLENGE_LIST,
+    payload: userChallenge
+  };
+}
+
+function unlockNextUserChallenge(userChallenge) {
+  return {
+    type: UNLOCK_NEXT_USER_CHALLENGE,
+    payload: userChallenge
+  };
+}
+
+function setChallengeConsumption(userChallenge, currentDataload) {
+  return {
+    type: SET_CHALLENGE_CONSUMPTION,
+    payload: {
+      userChallenge: userChallenge,
+      currentDataload: currentDataload
+    }
+  };
+}
+
+/***/ }),
+
 /***/ "ovFf":
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -32924,6 +32956,7 @@ var UncomingBar = function UncomingBar(_ref) {
       yScale = _ref.yScale,
       height = _ref.height,
       average = _ref.average;
+  dataload.value = average;
 
   var _useState = (0, _react.useState)(false),
       _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -32956,10 +32989,10 @@ var UncomingBar = function UncomingBar(_ref) {
     height: height + 40,
     className: "background-false",
     fill: "#E0E0E0"
-  })), height > 0 && average >= 0 && /*#__PURE__*/_react.default.createElement("g", {
-    transform: "translate(".concat(xScale(dataload.date.toLocaleString(_luxon.DateTime.DATETIME_SHORT)), ", ").concat(yScale(average), ")")
+  })), height > 0 && dataload.value >= 0 && /*#__PURE__*/_react.default.createElement("g", {
+    transform: "translate(".concat(xScale(dataload.date.toLocaleString(_luxon.DateTime.DATETIME_SHORT)), ", ").concat(yScale(dataload.value), ")")
   }, /*#__PURE__*/_react.default.createElement("path", {
-    d: topRoundedRectDashedLine(0, 0, getBandWidth(), height - yScale(average)),
+    d: topRoundedRectDashedLine(0, 0, getBandWidth(), height - yScale(dataload.value)),
     fill: "url(#gradient)",
     strokeDasharray: "5",
     stroke: '#61f0f2',
@@ -33618,7 +33651,7 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 __webpack_require__("1RIw");
 
@@ -34010,7 +34043,7 @@ var _reactRedux = __webpack_require__("/MKj");
 
 var _exploration = _interopRequireDefault(__webpack_require__("z8s1"));
 
-var _challenge = __webpack_require__("F6Xr");
+var _challenge = __webpack_require__("ojwR");
 
 var _global = __webpack_require__("c4IZ");
 
@@ -37018,14 +37051,14 @@ var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
 var _usageEvent2 = _interopRequireDefault(__webpack_require__("dECN"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 var _utils = __webpack_require__("c+yx");
 
-var _ChallengeNoFluidModal = _interopRequireDefault(__webpack_require__("rDu6"));
-
 __webpack_require__("Layg");
 
+var _ChallengeNoFluidModal = _interopRequireDefault(__webpack_require__("rDu6"));
+
 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; }
@@ -37256,7 +37289,7 @@ var _reactRedux = __webpack_require__("/MKj");
 
 var _challenge = _interopRequireDefault(__webpack_require__("kdea"));
 
-var _challenge2 = __webpack_require__("F6Xr");
+var _challenge2 = __webpack_require__("ojwR");
 
 __webpack_require__("8Eoq");
 
diff --git a/index.html b/index.html
index bced72ae60dd5c91180f73f2f5cff26c41838229..8540be1977185ec7fbf01e72a18e45752201e153 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.69beab954af56959f24c.js"></script><script src="app/ecolyo.2b3ed6912e09b4da5a5f.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.69beab954af56959f24c.js"></script><script src="app/ecolyo.dcfbc89e7d447dd82770.js"></script></div></body></html>
\ No newline at end of file
diff --git a/services/aggregatorUsageEvents/ecolyo.js b/services/aggregatorUsageEvents/ecolyo.js
index 63377266fb67af24d0962f83c7421ae2e36db259..8fbe381d962fb26e902b58ee97038581d903fbfc 100644
--- a/services/aggregatorUsageEvents/ecolyo.js
+++ b/services/aggregatorUsageEvents/ecolyo.js
@@ -44421,23 +44421,19 @@ class ChallengeService {
 
 
   async startUserChallenge(userChallenge) {
-    const newChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
-      state: _userChallenge2.UserChallengeState.ONGOING,
-      progress: {
-        actionProgress: 0,
-        explorationProgress: 0,
-        quizProgress: 0
-      },
-      startDate: _luxon.DateTime.local().setZone('utc', {
-        keepLocalTime: true
-      }).startOf('day'),
-      success: _userChallenge2.UserChallengeSuccess.ONGOING
-    });
+    userChallenge.state = _userChallenge2.UserChallengeState.ONGOING;
+    userChallenge.progress.actionProgress = 0;
+    userChallenge.progress.explorationProgress = 0;
+    userChallenge.progress.quizProgress = 0;
+    userChallenge.startDate = _luxon.DateTime.local().setZone('utc', {
+      keepLocalTime: true
+    }).startOf('day');
+    userChallenge.success = _userChallenge2.UserChallengeSuccess.ONGOING;
 
     try {
       const {
         data: updatedUserChallengeEntity
-      } = await this._client.create(_doctypes.USERCHALLENGE_DOCTYPE, newChallenge);
+      } = await this._client.create(_doctypes.USERCHALLENGE_DOCTYPE, userChallenge);
       const updatedUserChallenge = this.parseUserChallengeEntityToUserChallenge(updatedUserChallengeEntity);
       return updatedUserChallenge;
     } catch (error) {
@@ -44532,18 +44528,20 @@ class ChallengeService {
         break;
 
       case _userChallenge2.UserChallengeUpdateFlag.QUIZ_DONE:
-        {
-          const updateQuizProgress = Math.min(userChallenge.quiz.result, 5);
-          updatedQuiz = await quizService.endUserQuiz(userChallenge.quiz);
-          updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
-            quiz: updatedQuiz,
-            progress: _objectSpread(_objectSpread({}, userChallenge.progress), {}, {
-              quizProgress: updateQuizProgress
-            })
-          });
-          break;
+        if (userChallenge.quiz.result > userChallenge.progress.quizProgress) {
+          userChallenge.progress.quizProgress = userChallenge.quiz.result;
         }
 
+        if (userChallenge.progress.quizProgress > 5) {
+          userChallenge.progress.quizProgress = 5;
+        }
+
+        updatedQuiz = await quizService.endUserQuiz(userChallenge.quiz);
+        updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
+          quiz: updatedQuiz
+        });
+        break;
+
       case _userChallenge2.UserChallengeUpdateFlag.QUIZ_UPDATE:
         updatedUserChallenge = _objectSpread(_objectSpread({}, userChallenge), {}, {
           quiz: quizWithUpdatedQuestions ? quizWithUpdatedQuestions : userChallenge.quiz
@@ -100580,16 +100578,21 @@ class QuizService {
 
 
   async startUserQuiz(userQuiz) {
-    const questions = userQuiz.questions.map(question => _objectSpread(_objectSpread({}, question), {}, {
-      answers: (0, _lodash.shuffle)(question.answers)
-    }));
-    return _objectSpread(_objectSpread({}, userQuiz), {}, {
-      questions: (0, _lodash.shuffle)(questions),
+    const {
+      questions
+    } = userQuiz;
+    questions.forEach(question => question.answers = (0, _lodash.shuffle)(question.answers));
+    const randomizedQuestions = (0, _lodash.shuffle)(questions);
+
+    const updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
+      questions: randomizedQuestions,
       state: _userQuiz.UserQuizState.ONGOING,
       startDate: _luxon.DateTime.local().setZone('utc', {
         keepLocalTime: true
       })
     });
+
+    return updatedUserQuiz;
   }
   /**
    * Return quiz with updated state to UserQuizState.UNLOCKED and updated questions with false result
@@ -100599,20 +100602,23 @@ class QuizService {
 
 
   async resetUserQuiz(userQuiz) {
-    const updatedQuestions = userQuiz.questions.map(question => _objectSpread(_objectSpread({}, question), {}, {
-      result: _userQuiz.UserQuestionState.UNLOCKED
-    }));
+    const updatedQuestions = userQuiz.questions;
+    updatedQuestions.forEach(question => {
+      question.result = _userQuiz.UserQuestionState.UNLOCKED;
+    });
 
     const updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
       result: _userQuiz.UserQuestionState.UNLOCKED
     });
 
-    return _objectSpread(_objectSpread({}, userQuiz), {}, {
+    const updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
       customQuestion: updatedCustomQuestion,
       questions: updatedQuestions,
       result: 0,
       state: _userQuiz.UserQuizState.UNLOCKED
     });
+
+    return updatedUserQuiz;
   }
   /**
    * Return quiz with updated state to UserQuizState.DONE
@@ -100638,26 +100644,28 @@ class QuizService {
 
 
   async updateUserQuiz(userQuiz, questionResult, questionIndex) {
-    const result = questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT;
-    const updatedQuestions = userQuiz.questions.map((question, index) => {
-      if (index === questionIndex) {
-        return _objectSpread(_objectSpread({}, question), {}, {
-          result: result
-        });
-      }
+    if (questionIndex !== undefined) {
+      const updatedQuestion = _objectSpread(_objectSpread({}, userQuiz.questions[questionIndex]), {}, {
+        result: questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT
+      });
 
-      return question;
-    });
+      userQuiz.questions[questionIndex] = updatedQuestion;
+    } else {
+      const updatedQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
+        result: questionResult ? _userQuiz.UserQuestionState.CORRECT : _userQuiz.UserQuestionState.UNCORRECT
+      });
 
-    const updatedCustomQuestion = _objectSpread(_objectSpread({}, userQuiz.customQuestion), {}, {
-      result: result
-    });
+      userQuiz.customQuestion = updatedQuestion;
+    }
 
-    return _objectSpread(_objectSpread({}, userQuiz), {}, {
-      questions: updatedQuestions,
-      customQuestion: questionIndex === undefined ? updatedCustomQuestion : userQuiz.customQuestion,
-      result: questionResult ? Math.min(userQuiz.result + 1, 5) : userQuiz.result
+    let quizScoreLimit = userQuiz.result;
+    quizScoreLimit = quizScoreLimit + 1 > 5 ? 5 : quizScoreLimit + 1;
+
+    const updatedUserQuiz = _objectSpread(_objectSpread({}, userQuiz), {}, {
+      result: questionResult ? quizScoreLimit : userQuiz.result
     });
+
+    return updatedUserQuiz;
   }
   /**
    * Build a custom question with the customQuestionEntity