diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 690954bfba4c89915f26005f17a9e46a952f6573..22fc8967f41b599cb8e10b8c6db4be33a3deaf0a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,12 +5,16 @@ default:
       alias: docker
 
 stages:
+  - buildenv
   - quality
   - test
   - build
   - deploy
   - publish
 
+variables:
+  DEPENDENCY_PROXY: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/
+
 # Sast analysis should be fixed
 # sast:
 #  stage: test
@@ -88,7 +92,12 @@ build:
     - master
 
 build_stack:
-  stage: build
+  stage: buildenv
+  variables:
+    DOCKER_TLS_CERTDIR: ''
+    DOCKER_HOST: tcp://docker:2375/
+    DOCKER_DRIVER: overlay2
+  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/docker:18.09
   before_script:
     - docker login ${CI_DEPENDENCY_PROXY_SERVER} -u ${CI_DEPENDENCY_PROXY_USER} -p ${CI_DEPENDENCY_PROXY_PASSWORD}
   script:
@@ -97,6 +106,7 @@ build_stack:
     - docker push $CI_REGISTRY_IMAGE/cozy-env:latest
   only:
     - master
+    - dev
   when: manual
 
 publish:
@@ -113,13 +123,14 @@ sonarqube:
   stage: quality
   only:
     - dev
-  when: manual
-  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/skilldlabs/sonar-scanner:4.0.0
+  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/sonarsource/sonar-scanner-cli:4
   variables:
-    GIT_STRATEGY: clone
-    GIT_DEPTH: 0
-  before_script:
-    - npm install --save sonar-scanner
+    SONAR_USER_HOME: '${CI_PROJECT_DIR}/.sonar' # Defines the location of the analysis task cache
+    GIT_DEPTH: '0' # T
+  cache:
+    key: '${CI_JOB_NAME}'
+    paths:
+      - .sonar/cache
   script:
     - >
       sonar-scanner
@@ -137,13 +148,14 @@ sonarqube-mr:
   stage: quality
   only:
     - merge_requests
-  when: manual
-  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/skilldlabs/sonar-scanner:4.0.0
+  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/sonarsource/sonar-scanner-cli:4
   variables:
-    GIT_STRATEGY: clone
-    GIT_DEPTH: 0
-  before_script:
-    - npm install --save sonar-scanner
+    SONAR_USER_HOME: '${CI_PROJECT_DIR}/.sonar' # Defines the location of the analysis task cache
+    GIT_DEPTH: '0' # T
+  cache:
+    key: '${CI_JOB_NAME}'
+    paths:
+      - .sonar/cache
   script:
     - >
       sonar-scanner
diff --git a/.gitlab/issue_templates/Bug.md b/.gitlab/issue_templates/Bug.md
deleted file mode 100644
index ff4c321c398f30696cfc2b285ce0141b33d63b8e..0000000000000000000000000000000000000000
--- a/.gitlab/issue_templates/Bug.md
+++ /dev/null
@@ -1,50 +0,0 @@
-## Description du problème
-
-(Donnez une description briève du problème)
-
-## L'environnement
-
-* Utilisez vous l'application sur:
-
-  - [ ] Mobile
-  - [ ] Ordinateur
-(Mettez un x dans la case correspondante)
-
-* En cas de mobile: 
-  
-  - Quel type de mobile utilisez-vous?
-
-  - [ ] Android
-  - [ ] iphone / iOS
-  (Mettez un x dans la case correspondante)
-
-  - Quel navigateur utilisez-vous?
-
-  - [ ] Chrome
-  - [ ] Safari
-  - [ ] Autre
-  (Mettez un x dans la case correspondante)
-
-* En cas d'ordinateur: 
-
-  - Quel navigateur utilisez-vous?
-
-  - [ ] Chrome
-  - [ ] Firefox
-  - [ ] Safari
-  - [ ] Autre
-  (Mettez un x dans la case correspondante)
-
-## Le problème
-
-  - Quelles sont les étapes réalisée qui ont menées au problème?
-
-  (Donnez une description des étapes, celle-ci peut être appuyé par des captures d'écran)
-
-  - Quel est le comportement obtenu?
-
-  (Donnez une description du comportement obtenu, celle-ci peut être appuyé par des captures d'écran)
-
-  - Quel est le comportement attendu?
-
-  (Donnez une description du comportement attendu)
diff --git a/.gitlab/issue_templates/Ecolyo.md b/.gitlab/issue_templates/Ecolyo.md
new file mode 100644
index 0000000000000000000000000000000000000000..1eb07eec3f924249c5118cfcd910f29c985d0012
--- /dev/null
+++ b/.gitlab/issue_templates/Ecolyo.md
@@ -0,0 +1,38 @@
+/title [Scope] Description
+
+### Résumé du problème
+
+_Donnez une description briève du problème._
+
+### L'environnement
+
+1. Utilisez vous l'application sur:
+
+   - [ ] Mobile
+   - [ ] Ordinateur
+
+   - En cas de mobile, quel type de mobile utilisez-vous ?
+     - [ ] Android
+     - [ ] iphone / iOS
+
+2. Quel navigateur utilisez-vous ?
+
+   - [ ] Chrome
+   - [ ] Firefox
+   - [ ] Safari
+   - [ ] Autre
+
+### Les étapes pour reproduire le bug
+
+_Listez les étapes qui vous permettent de reproduire ce bug, cette étape est très importante._
+
+### Décrivez le comportement du _bug_ ?
+
+### Quel serez le comportement _attendu_ ?
+
+### Logs et/ou screenshots
+
+### Possible fixes
+
+/label ~"type::bug"
+/label ~"type::ecolyo"
diff --git a/.gitlab/issue_templates/Konnector.md b/.gitlab/issue_templates/Konnector.md
new file mode 100644
index 0000000000000000000000000000000000000000..a065e1ee6d593ad5e690f59c761d4f52f7cd2814
--- /dev/null
+++ b/.gitlab/issue_templates/Konnector.md
@@ -0,0 +1,20 @@
+/title [Konnecteur] Description
+
+### Résumé du problème
+
+_Donnez une briève description du problème._
+
+### Les étapes pour reproduire le bug
+
+_Listez les étapes qui vous permettent de reproduire ce bug, cette étape est très importante._
+
+### Décrivez le comportement du _bug_ ?
+
+### Quel serez le comportement _attendu_ ?
+
+### Logs et/ou screenshots
+
+### Possible fixes
+
+/label ~"type::bug"
+/label ~"type::konnector"
diff --git a/.gitlab/issue_templates/default.md b/.gitlab/issue_templates/default.md
new file mode 100644
index 0000000000000000000000000000000000000000..8b588b917da97eafcd21c2b8f3f54082e7833c72
--- /dev/null
+++ b/.gitlab/issue_templates/default.md
@@ -0,0 +1,19 @@
+/title [Scope] Description
+
+### Résumé du problème
+
+_Donnez une description briève du problème._
+
+### Les étapes pour reproduire le bug
+
+_Listez les étapes qui vous permettent de reproduire ce bug, cette étape est très importante._
+
+### Décrivez le comportement du _bug_ ?
+
+### Quel serez le comportement _attendu_ ?
+
+### Logs et/ou screenshots
+
+### Possible fixes
+
+/label ~"type::bug"
diff --git a/.gitlab/merge_request_templates/default.md b/.gitlab/merge_request_templates/default.md
new file mode 100644
index 0000000000000000000000000000000000000000..19982d0027e7c778bf136bb773b2a64da959545c
--- /dev/null
+++ b/.gitlab/merge_request_templates/default.md
@@ -0,0 +1,62 @@
+## What does this MR do and why?
+
+_Describe in detail what your merge request does and why._
+
+| :warning: Keep an up to date checklist based on your icescrum tasks during all the draft phase to help any other developer who would take the job after you to finish it. |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+
+
+## Screenshots or screen recordings
+
+_These are strongly recommended to assist reviewers and reduce the time to merge your change._
+
+## How to set up and validate locally (or on alpha)
+
+_List all steps to set up and validate the changes on local environment._
+
+## MR acceptance checklist
+
+_To be completed by the chosen reviewer._
+
+<!---
+Using checklists improves quality in software engineering and other jobs such as with surgeons and airline pilots.
+More reading on checklists can be found in the "Checklist Manifesto": http://atulgawande.com/book/the-checklist-manifesto/
+
+"It is common to misconceive how checklists function in complex lines of work. They are not comprehensive how-to guides, whether for building a skyscraper or getting a plane out of trouble. They are quick and simple tools aimed to buttress the skills of expert professionals." - Gawande, Atul. The Checklist Manifesto
+--->
+
+### Quality
+
+- [ ] Confirmed
+
+1. For the code that this change impacts, I believe that the automated tests validate functionality that is highly important to users. If the existing automated tests do not cover this functionality, I have added the necessary additional tests or I have added an issue to describe the automation testing gap and linked it to this MR.
+1. I have made sure that the sonar quality coverage is up to standards.
+1. I have considered the impact of this change on the front-end, back-end, and database portions of the system where appropriate and applied.
+1. I have tested this MR in all supported browsers or determined that this testing is not needed.
+1. I have confirmed that this change is backwards compatible across updates (migrate up needs a migrate down), or I have decided that this does not apply.
+
+### Performance, reliability and availability
+
+- [ ] Confirmed
+
+1. I am confident that this MR does not harm performance, or I have asked a reviewer to help assess the performance impact.
+1. I have considered the scalability risk based on future predicted growth.
+
+### Documentation
+
+- [ ] Confirmed
+
+1. I have prepared a squash commit to feed the changelog linked to the current milestone.
+1. I have added/updated documentation (also updated if the changes feature a deprecation) or I have decided that documentation changes are not needed for this MR.
+
+### Security
+
+- [ ] Confirmed
+
+1. I have confirmed that if this MR does not contains any sensitive informations hidden in the changes.
+
+### Deployment
+
+- [ ] Confirmed
+
+1. When featured on a self-data project release, i have made sure my app version in the manifest and package.json is incremented and any relative changes to the permissions are clearly written and transmitted to Cozy.
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000000000000000000000000000000000000..6a50941bbfee46167b6d79f21c98bcff405b8035
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,11 @@
+{
+  "recommendations": [
+    "esbenp.prettier-vscode",
+    "dsznajder.es7-react-js-snippets",
+    "eamodio.gitlens",
+    "sonarsource.sonarlint-vscode",
+    "formulahendry.auto-rename-tag",
+    "dbaeumer.vscode-eslint",
+    "andrejunges.handlebars"
+  ]
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a5e5926bf127c0eddfb1d86396098a43d07e4456..e702b5a4b05d9b0e2f4f5459269edf24a1f19a06 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,48 @@
 
 All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
 
+### [1.9.3](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/compare/v1.9.2...v1.9.3) (2022-05-10)
+
+### Bug Fixes
+
+- **accounts:** Prevent account doctype index to crash the first konnector init ([a8fd313](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/a8fd31320a8a49cf35af29d87c2498188ef302a6))
+
+### [1.9.2](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/compare/v1.9.1...v1.9.2) (2022-05-09)
+
+### Bug Fixes
+
+- **init:** Prevent backoffice issue to make the app crash ([df75529](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/df75529265787eaba84ae44d2445ed6244495f4c))
+
+## [1.9.0](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/compare/v1.8.3...v1.9.0) (2022-05-05)
+
+### Features
+
+- **matomo:** Add Matomo for data tracking ([8781e06](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/8781e065296166646582210b187467a0c84ee3d1))
+
+### [1.9.1](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/compare/v1.8.3...v1.9.1) (2022-05-06)
+
+### Features
+
+- **challenge:** remove banner ([ef371eb](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/ef371ebd0f1c12dc1131e7fbd26fec13017a6133))
+- **dacc:** Add new indicator "uninitialized-konnector-attempts-monthly" ([bd62c3c](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/bd62c3c41f0a8a170bbb359dd704410e050546b2))
+- **dacc:** Add recalculation for 2 indicators since january ([ff051d1](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/ff051d17843521dc5d29c744d268ce5f3d636f06))
+- **dacc:** 0 monthly connections are now reported ([a9e7a6f](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/-/commit/a9e7a6fc512cd20688c937a37ee0d0ccbf539039))
+- **ecogesture:** Allow users to reset ecogesture selection and change form flow ([7556c49](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/7556c498877e01348b1e4c988493e921c00adc94))
+- **equipments:** Equipments selection added in big profile ([a370e9e](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/-/commit/a370e9edd8f418cbf31f2e9d9509af83f9b2f6e4))
+- **water alert:** Consumption details for water alert ([0f78cf8](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/-/commit/0f78cf8823fe555206b2610af97fcdcc74304e86))
+- **units:** Gas and elec units are now displayed in kWh in analysis page ([3d76e29](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/-/commit/3d76e29d0847587e55b6b689ace4c0c0cf4f6ea0))
+
+### Bug Fixes
+
+- **cicd:** restore sonar conf and small code correction for quality quate status ([126eb10](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/126eb10ac38c562afc6b675bcb60fcbf91eb1e1a))
+- **indicator:** Fix variation dacc indicator ([fda1bcc](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/fda1bccc9747c6ea43253801baa334bcde40b9a8))
+- **konnector:** Handle Login failed error for oauth konnectors ([94ae4dc](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/94ae4dc7be22978f13e8705566f5c7bba14d8069))
+- **margin challenge card:** alignment ecogesture button for tablet ([67b7b23](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/67b7b23d022ffcab045baff948d594fa08afe390))
+- **analysis:** Mega units were not displayed ([05a54e7](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/commit/05a54e7858bd5d94520b16a10c4ecccbce753fa8))
+- **challenge cards:** Better responsive for challenge cards with small heights ([a1672f3](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/-/commit/a1672f3bd9c3909d173084372d945924342979ad))
+- **loading bar:** Design adjustment ([773dd8d](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/-/commit/773dd8dd686bc2c63ad1522e8ffe5cffdffe68dd))
+- **PWA status bar color:** PWA status bar is now at Ecolyo colors for IOS pwa ([c8af717](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/-/commit/c8af7178833d91dcf7ade68a8c4aea4d68cde5fa))
+
 ### [1.8.3](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/compare/v1.8.2...v1.8.3) (2022-03-22)
 
 ### [1.8.2](https://forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/compare/v1.8.1...v1.8.2) (2022-03-16)
diff --git a/docker-compose.yml b/docker-compose.yml
index 31cbcaa2be47dc25b1e896437885b36653375f86..cebbbbb7a65d2cfdeb796490cb65c8cfb939945a 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,17 +1,14 @@
 version: '3.7'
 services:
-  app:
-    image: registry.forge.grandlyon.com/web-et-numerique/llle_project/ecolyo:latest
-    hostname: app
-    restart: 'no'
-
   stack:
-    image: registry.forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/cozy-env:latest
+    image: cozy/cozy-app-dev:1.5.4
     ports:
       - 8080:8080
       - 5984:5984
       - 8025:8025
     volumes:
+      - ./docker/cozy-app-dev-with-app.sh:/usr/bin/cozy-app-dev.sh
       - ./build:/data/cozy-app/ecolyo
-      - ./data:/usr/local/couchdb/data
+      - ./data/db:/usr/local/couchdb/data
+      - ./data/storage:/data/cozy-storage
       - ./docker/disableCSP.yaml:/etc/cozy/cozy.yaml
diff --git a/docker/cozy-app-dev-with-app.sh b/docker/cozy-app-dev-with-app.sh
old mode 100644
new mode 100755
index b14d7c4bbc445a29bdf169ec31e32fab091538a0..3847650d3f0034fe2a57b16f38d23a88b1ee873d
--- a/docker/cozy-app-dev-with-app.sh
+++ b/docker/cozy-app-dev-with-app.sh
@@ -190,17 +190,22 @@ do_create_instances() {
 }
 
 do_install_app() {
-        echo "Installing apps (home, collect..)"
+        echo "Installing apps home, store, collect"
         if cozy-stack apps ls | grep 'home'; then
                 echo "Removing home..."
                 cozy-stack apps uninstall home
         fi
-        if cozy-stack apps ls | grep 'collect'; then
-                echo "Removing collect..."
-                cozy-stack apps uninstall collect
+        if cozy-stack apps ls | grep 'store'; then
+                echo "Removing store..."
+                cozy-stack apps uninstall store
         fi
-        echo "Installing home, collect, store..."
-
+				if cozy-stack apps ls | grep 'settings'; then
+								echo "Removing settings..."
+								cozy-stack apps uninstall settings
+        fi
+        cozy-stack apps install --all-domains home
+        cozy-stack apps install --all-domains store
+        cozy-stack apps install --all-domains settings
         echo "App succesfully installed"
 
         echo "Installing konnectors"
diff --git a/manifest.webapp b/manifest.webapp
index f8f05612b78e65bc6f33c69490b6e55fe12d3da7..a824ec250f9bc387300dd5dfbfe62e9a0043fb40 100644
--- a/manifest.webapp
+++ b/manifest.webapp
@@ -3,7 +3,7 @@
   "slug": "ecolyo",
   "icon": "icon.svg",
   "categories": ["energy"],
-  "version": "1.8.3",
+  "version": "1.9.3",
   "licence": "AGPL-3.0",
   "editor": "Métropole de Lyon",
   "default_locale": "fr",
diff --git a/package.json b/package.json
index 8fbaf0d8cccebc48c3e3e1d9dcc95dc46116444b..a93d4328cb275dd5f907948a086bfa909113c8f2 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "ecolyo",
-  "version": "1.8.3",
+  "version": "1.9.3",
   "scripts": {
     "tx": "tx pull --all || true",
     "lint": "yarn lint:js && yarn lint:styles",
@@ -27,8 +27,6 @@
     "build": "yarn run build:css && yarn run build:browser",
     "build-dev": "yarn run build:css && yarn run build-dev:browser",
     "release": "standard-version --no-verify",
-    "winstack": "start powershell -command docker run --rm -it -p 8080:8080 -p 5984:5984 -p 8025:8025 -v $PWD/build:/data/cozy-app/ecolyo -v $PWD/data:/usr/local/couchdb/data -v $PWD/docker/disableCSP.yaml:/etc/cozy/cozy.yaml registry.forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/cozy-env",
-    "linuxstack": "docker run --rm -it -p 8080:8080 -p 5984:5984 -p 8025:8025 -v $(pwd)/build:/data/cozy-app/ecolyo -v ~/cozy/data/db:/usr/local/couchdb/data -v ~/cozy/data/storage:/data/cozy-storage -v $(pwd)/docker/disableCSP.yaml:/etc/cozy/cozy.yaml registry.forge.grandlyon.com/web-et-numerique/llle_project/ecolyo/cozy-env",
     "load-data": "cd test && importData.bat",
     "start-stack": "cs start --hot --browser --stack"
   },
diff --git a/scripts/exportDataFromInstance.bat b/scripts/exportDataFromInstance.bat
new file mode 100644
index 0000000000000000000000000000000000000000..c92d1ef3da9e9ece82cc45504fa80cdacaae8005
--- /dev/null
+++ b/scripts/exportDataFromInstance.bat
@@ -0,0 +1,13 @@
+@echo off
+echo This script to export data from a cozy doctype
+echo Please provide cozysessid (can be found after connection in browser dev tool)
+set /p token="CozySessid ? : "
+echo Please select your cozy instance name : 'https://mon.instance.cozygrandlyon.cloud/'
+set /p instance="Instance ? : "
+echo Please select the doctype name you wish to export (ex : com.grandlyon.egl.day)
+set /p name="Choice ? : "
+echo Please select the file name for exported data
+set /p filename="Filename ? : "
+echo Execute ACH -t %token% -u %instance% export %name% %filename%
+echo Do not forget to delete tour token (AAAAA....etc.json) before executing another ACH command !
+ACH -t %token% -u %instance% export %name% %filename%
diff --git a/scripts/importOrDropDataFromInstance.bat b/scripts/importOrDropDataFromInstance.bat
new file mode 100644
index 0000000000000000000000000000000000000000..f56423f8eccf9abc742ed421808d7efa08e79af9
--- /dev/null
+++ b/scripts/importOrDropDataFromInstance.bat
@@ -0,0 +1,14 @@
+@echo off
+echo This script allows you to edit data in cozy alpha
+echo Please provide cozysessid (can be found after connection in browser dev tool)
+set /p token="CozySessid ? : "
+echo Please select an action between drop and import
+set /p action="Action ? : "
+echo Please select your cozy instance name : 'https://mon.instance.cozygrandlyon.cloud/'
+set /p instance="Instance ? : "
+echo Please select the doctype name you wish to drop (ex : com.grandlyon.egl.day) or the pathh to the data file you wish to import
+set /p name="Choice ? : "
+echo Execute ACH -t %token% -u %instance% %action% %name%
+echo Do not forget to delete tour token (AAAAA....etc.json) before executing another ACH command !
+
+ACH -t %token% -u %instance% %action% %name%
diff --git a/src/components/Analysis/AnalysisConsumption.tsx b/src/components/Analysis/AnalysisConsumption.tsx
index d2b298c9a1cb5dc267ee958c153802279420392a..2a589da8f8f2ba16c067c01a98b870934a6d1fba 100644
--- a/src/components/Analysis/AnalysisConsumption.tsx
+++ b/src/components/Analysis/AnalysisConsumption.tsx
@@ -12,11 +12,14 @@ import Button from '@material-ui/core/Button'
 import AnalysisConsumptionRow from 'components/Analysis/AnalysisConsumptionRow'
 import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
 import StyledCard from 'components/CommonKit/Card/StyledCard'
+import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
 import ProfileTypeService from 'services/profileType.service'
 import { Client, useClient } from 'cozy-client'
 import { DateTime } from 'luxon'
 import ProfileTypeEntityService from 'services/profileTypeEntity.service'
 import PlaceHolderIcon from 'assets/icons/visu/analysis/no-profile-placeholder.svg'
+import ProfileEditIcon from 'assets/icons/ico/profile-edit.svg'
+import AnalysisIcon from 'assets/icons/visu/analysis/analysis.svg'
 
 interface AnalysisConsumptionProps {
   aggregatedPerformanceIndicator: PerformanceIndicator
@@ -120,84 +123,110 @@ const AnalysisConsumption: React.FC<AnalysisConsumptionProps> = ({
     analysisDate,
   ])
 
+  const profileNotCompleted = () => (
+    <div className="no-profile">
+      <div className="text-16-normal">
+        {t('analysis.approximative_description')}
+      </div>
+      <Button
+        aria-label={t('analysis.accessibility.button_go_to_profil')}
+        onClick={goToForm}
+        classes={{
+          root: 'btn-highlight',
+          label: 'text-18-bold',
+        }}
+      >
+        {t('analysis.accessibility.button_go_to_profil')}
+      </Button>
+      <Icon
+        icon={PlaceHolderIcon}
+        width="100%"
+        height="60%"
+        alt="pas de profil remplis"
+      />
+    </div>
+  )
+
   return (
-    <div className="analysis-graph">
-      {!profile.isProfileTypeCompleted ? (
-        <div className="no-profile">
-          <div className="text-16-normal">
-            {t('analysis.approximative_description')}
-          </div>
+    <>
+      <div className="status-header">
+        <div>
+          <StyledIcon icon={AnalysisIcon} size={44} />
+          <p className="text-16-normal">{t('analysis.compare.title')}</p>
+        </div>
+        {profile.isProfileTypeCompleted && (
           <Button
             aria-label={t('analysis.accessibility.button_go_to_profil')}
             onClick={goToForm}
             classes={{
-              root: 'btn-highlight',
-              label: 'text-18-bold',
+              root: 'btn-secondary-negative',
+              label: 'text-16-normal',
             }}
           >
-            {t('analysis.accessibility.button_go_to_profil')}
+            <StyledIcon icon={ProfileEditIcon} size={40} />
           </Button>
-          <Icon
-            icon={PlaceHolderIcon}
-            width="100%"
-            height="60%"
-            alt="pas de profil remplis"
-          />
-        </div>
-      ) : !isLoading ? (
-        <>
-          <div className="consumption-title text-20-bold">
-            <div className="user-title">{t('analysis.user_consumption')}</div>
-            <div className={`${toggleHome}-title`}>
-              {t(`analysis.comparison`)}
-            </div>
-          </div>
-          <div className="consumption-price">
-            {fluidTypes.length > 0 ? (
-              <AnalysisConsumptionRow
-                fluid={FluidType.MULTIFLUID}
-                userPriceConsumption={userPriceConsumption}
-                homePriceConsumption={homePriceConsumption}
-                performanceValue={null}
-                forecast={forecast}
-                toggleHome={toggleHome}
-                connected={true}
-                noData={false}
-              />
-            ) : (
-              <AnalysisConsumptionRow
-                fluid={FluidType.MULTIFLUID}
-                userPriceConsumption={userPriceConsumption}
-                homePriceConsumption={homePriceConsumption}
-                performanceValue={null}
-                forecast={forecast}
-                toggleHome={toggleHome}
-                connected={false}
-                noData={false}
-              />
-            )}
+        )}
+      </div>
+
+      <div className="analysis-graph">
+        {!profile.isProfileTypeCompleted ? (
+          profileNotCompleted()
+        ) : isLoading ? (
+          <div className="loader-container">
+            <StyledSpinner size="5em" fluidType={FluidType.ELECTRICITY} />
           </div>
-          {fluidTypes.map((fluid, index) => {
-            return (
-              performanceIndicators[fluid] &&
-              performanceIndicators[fluid].value && (
+        ) : (
+          <>
+            <div className="consumption-title text-20-bold">
+              <div className="user-title">{t('analysis.user_consumption')}</div>
+              <div className={`${toggleHome}-title`}>
+                {t(`analysis.comparison`)}
+              </div>
+            </div>
+            <div className="consumption-price">
+              {fluidTypes.length > 0 ? (
                 <AnalysisConsumptionRow
-                  key={index}
-                  fluid={fluid}
+                  fluid={FluidType.MULTIFLUID}
                   userPriceConsumption={userPriceConsumption}
                   homePriceConsumption={homePriceConsumption}
-                  performanceValue={performanceIndicators[fluid].value}
+                  performanceValue={null}
                   forecast={forecast}
                   toggleHome={toggleHome}
                   connected={true}
                   noData={false}
                 />
-              )
-            )
-          })}
-          {fluidTypes.length < 3 && <hr className="consumption-sep" />}
-          {disconnectedFluidTypes.map((fluid, index) => {
-            return (
+              ) : (
+                <AnalysisConsumptionRow
+                  fluid={FluidType.MULTIFLUID}
+                  userPriceConsumption={userPriceConsumption}
+                  homePriceConsumption={homePriceConsumption}
+                  performanceValue={null}
+                  forecast={forecast}
+                  toggleHome={toggleHome}
+                  connected={false}
+                  noData={false}
+                />
+              )}
+            </div>
+            {fluidTypes.map(
+              (fluid, index) =>
+                performanceIndicators[fluid] &&
+                performanceIndicators[fluid].value && (
+                  <AnalysisConsumptionRow
+                    key={index}
+                    fluid={fluid}
+                    userPriceConsumption={userPriceConsumption}
+                    homePriceConsumption={homePriceConsumption}
+                    performanceValue={performanceIndicators[fluid].value}
+                    forecast={forecast}
+                    toggleHome={toggleHome}
+                    connected={true}
+                    noData={false}
+                  />
+                )
+            )}
+            {fluidTypes.length < 3 && <hr className="consumption-sep" />}
+            {disconnectedFluidTypes.map((fluid, index) => (
               <AnalysisConsumptionRow
                 key={index}
                 fluid={fluid}
@@ -209,10 +238,8 @@ const AnalysisConsumption: React.FC<AnalysisConsumptionProps> = ({
                 connected={false}
                 noData={false}
               />
-            )
-          })}
-          {emptyFluidTypes.map((fluid, index) => {
-            return (
+            ))}
+            {emptyFluidTypes.map((fluid, index) => (
               <AnalysisConsumptionRow
                 key={index}
                 fluid={fluid}
@@ -224,36 +251,32 @@ const AnalysisConsumption: React.FC<AnalysisConsumptionProps> = ({
                 connected={false}
                 noData={true}
               />
-            )
-          })}
+            ))}
 
-          <StyledCard
-            onClick={toggleAverage}
-            className={`link-average ${toggleHome === 'average' &&
-              'active'} grid-align`}
-          >
-            <span className="check-icon"></span>
-            <span className="link-label text-16-normal">
-              {t('analysis.average_home')}
-            </span>
-          </StyledCard>
-          <StyledCard
-            onClick={toggleIdeal}
-            className={`link-ideal ${toggleHome === 'ideal' &&
-              'active'} grid-align`}
-          >
-            <span className="check-icon"></span>
-            <span className="link-label text-16-normal">
-              {t('analysis.ideal_home')}
-            </span>
-          </StyledCard>
-        </>
-      ) : (
-        <div className="loader-container">
-          <StyledSpinner size="5em" fluidType={FluidType.ELECTRICITY} />
-        </div>
-      )}
-    </div>
+            <StyledCard
+              onClick={toggleAverage}
+              className={`link-average ${toggleHome === 'average' &&
+                'active'} grid-align`}
+            >
+              <span className="check-icon"></span>
+              <span className="link-label text-16-normal">
+                {t('analysis.average_home')}
+              </span>
+            </StyledCard>
+            <StyledCard
+              onClick={toggleIdeal}
+              className={`link-ideal ${toggleHome === 'ideal' &&
+                'active'} grid-align`}
+            >
+              <span className="check-icon"></span>
+              <span className="link-label text-16-normal">
+                {t('analysis.ideal_home')}
+              </span>
+            </StyledCard>
+          </>
+        )}
+      </div>
+    </>
   )
 }
 
diff --git a/src/components/Analysis/AnalysisConsumptionRow.spec.tsx b/src/components/Analysis/AnalysisConsumptionRow.spec.tsx
index 1c78d3b58a8057f2ea1aa3f87de9f04ea6cddcd0..6bc0b0db5935c6e8819af0705eef162c299a126a 100644
--- a/src/components/Analysis/AnalysisConsumptionRow.spec.tsx
+++ b/src/components/Analysis/AnalysisConsumptionRow.spec.tsx
@@ -106,13 +106,13 @@ describe('AnalysisConsumptionRow component', () => {
         .find('.price')
         .first()
         .text()
-    ).toBe('0,03 FLUID.ELECTRICITY.MEGAUNIT')
+    ).toBe('25 FLUID.ELECTRICITY.UNIT')
     expect(
       wrapper
         .find('.price')
         .last()
         .text()
-    ).toBe('4,34 FLUID.ELECTRICITY.MEGAUNIT')
+    ).toBe('4340 FLUID.ELECTRICITY.UNIT')
     expect(wrapper.find('.graph').exists()).toBeTruthy()
     expect(wrapper.find('.not-connected').exists()).toBeFalsy()
   })
@@ -137,13 +137,13 @@ describe('AnalysisConsumptionRow component', () => {
         .find('.price')
         .first()
         .text()
-    ).toBe('0,03 FLUID.ELECTRICITY.MEGAUNIT')
+    ).toBe('25 FLUID.ELECTRICITY.UNIT')
     expect(
       wrapper
         .find('.price')
         .last()
         .text()
-    ).toBe('3,91 FLUID.ELECTRICITY.MEGAUNIT')
+    ).toBe('3906 FLUID.ELECTRICITY.UNIT')
     expect(wrapper.find('.graph').exists()).toBeTruthy()
     expect(wrapper.find('.not-connected').exists()).toBeFalsy()
   })
@@ -174,7 +174,7 @@ describe('AnalysisConsumptionRow component', () => {
         .find('.price')
         .last()
         .text()
-    ).toBe('4,34 FLUID.ELECTRICITY.MEGAUNIT')
+    ).toBe('4340 FLUID.ELECTRICITY.UNIT')
     expect(wrapper.find('.graph').exists()).toBeFalsy()
     expect(wrapper.find('.not-connected').exists()).toBeTruthy()
   })
@@ -205,7 +205,7 @@ describe('AnalysisConsumptionRow component', () => {
         .find('.price')
         .last()
         .text()
-    ).toBe('4,34 FLUID.ELECTRICITY.MEGAUNIT')
+    ).toBe('4340 FLUID.ELECTRICITY.UNIT')
     expect(wrapper.find('.graph').exists()).toBeTruthy()
     expect(wrapper.find('.not-connected').exists()).toBeFalsy()
   })
diff --git a/src/components/Analysis/AnalysisConsumptionRow.tsx b/src/components/Analysis/AnalysisConsumptionRow.tsx
index ed40c2fc916908f08729e0bbb4e69f665ee8a411..405dd753585707d8d499dfbe006da307c0bbe4df 100644
--- a/src/components/Analysis/AnalysisConsumptionRow.tsx
+++ b/src/components/Analysis/AnalysisConsumptionRow.tsx
@@ -52,6 +52,12 @@ const AnalysisConsumptionRow: React.FC<AnalysisConsumptionRowProps> = ({
       return `${formatNumberValues(userPriceConsumption).toString()} €`
     } else {
       if (performanceValue) {
+        // keeps unit in kWh for electricity and gas
+        if (_fluid === FluidType.ELECTRICITY || _fluid === FluidType.GAS) {
+          return `${Math.round(performanceValue)} ${t(
+            `FLUID.${FluidType[_fluid]}.UNIT`
+          )}`
+        }
         return performanceValue >= 1000 || fluidLoad >= 1000
           ? formatNumberValues(performanceValue / 1000).toString() +
               ' ' +
@@ -73,6 +79,12 @@ const AnalysisConsumptionRow: React.FC<AnalysisConsumptionRowProps> = ({
       if (toggleHome === 'ideal') {
         _fluidLoad = fluidLoad - fluidLoad * idealCoefficient
       }
+      // keeps unit in kWh for electricity and gas
+      if (_fluid === FluidType.ELECTRICITY || _fluid === FluidType.GAS) {
+        return `${Math.round(_fluidLoad)} ${t(
+          `FLUID.${FluidType[_fluid]}.UNIT`
+        )}`
+      }
       return (performanceValue && performanceValue >= 1000) ||
         _fluidLoad >= 1000
         ? formatNumberValues(_fluidLoad / 1000).toString() +
diff --git a/src/components/Analysis/MaxConsumptionCard.spec.tsx b/src/components/Analysis/MaxConsumptionCard.spec.tsx
index b7cd102a5ecf72cf7b758ce6b48a2669eec2402c..bf2cf699dd5406776c9e7904849120c106294235 100644
--- a/src/components/Analysis/MaxConsumptionCard.spec.tsx
+++ b/src/components/Analysis/MaxConsumptionCard.spec.tsx
@@ -1,18 +1,12 @@
 import React from 'react'
 import { mount } from 'enzyme'
-
-import MonthlyAnalysis from 'components/Analysis/MonthlyAnalysis'
 import { DateTime } from 'luxon'
-
 import * as reactRedux from 'react-redux'
-import { userChallengeExplo1OnGoing } from '../../../tests/__mocks__/userChallengeData.mock'
-
 import { globalStateData } from '../../../tests/__mocks__/globalStateData.mock'
 import { Provider } from 'react-redux'
 import configureStore from 'redux-mock-store'
 import MaxConsumptionCard from './MaxConsumptionCard'
 import { FluidType } from 'enum/fluid.enum'
-import { baseDataLoad } from '../../../tests/__mocks__/datachartData.mock'
 
 jest.mock('cozy-ui/transpiled/react/I18n', () => {
   return {
diff --git a/src/components/Analysis/MaxConsumptionCard.tsx b/src/components/Analysis/MaxConsumptionCard.tsx
index 6693e85f715fcaa4420c71f1905f26019fbd5f43..3d95f0ec3d15f8abdb56338af830766b54314e38 100644
--- a/src/components/Analysis/MaxConsumptionCard.tsx
+++ b/src/components/Analysis/MaxConsumptionCard.tsx
@@ -128,10 +128,7 @@ const MaxConsumptionCard: React.FC<MaxConsumptionCardProps> = ({
                 size={38}
               />
               <div className="maxDay-load">
-                {formatNumberValues(
-                  maxDayData.value,
-                  FluidType[fluidTypes[index]]
-                ) >= 1000 ? (
+                {maxDayData.value >= 1000 ? (
                   <>
                     {formatNumberValues(
                       maxDayData.value,
diff --git a/src/components/Analysis/MonthlyAnalysis.tsx b/src/components/Analysis/MonthlyAnalysis.tsx
index 3f27d49a2df76b35bfc7b54d416273e691c39e37..9349cf5284c3193003ea010af02042a8d2ecb846 100644
--- a/src/components/Analysis/MonthlyAnalysis.tsx
+++ b/src/components/Analysis/MonthlyAnalysis.tsx
@@ -1,5 +1,4 @@
 import React, { useEffect, useState } from 'react'
-import { useI18n } from 'cozy-ui/transpiled/react/I18n'
 import { useClient } from 'cozy-client'
 import { useSelector } from 'react-redux'
 import { AppStore } from 'store'
@@ -12,16 +11,11 @@ import ConsumptionService from 'services/consumption.service'
 import PerformanceIndicatorService from 'services/performanceIndicator.service'
 import ConfigService from 'services/fluidConfig.service'
 import FluidPerformanceIndicator from 'components/PerformanceIndicator/FluidPerformanceIndicator'
-import ProfileEditIcon from 'assets/icons/ico/profile-edit.svg'
-import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
-import Button from '@material-ui/core/Button'
 import AnalysisConsumption from './AnalysisConsumption'
-import { useHistory } from 'react-router-dom'
 import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
 import AnalysisErrorModal from './AnalysisErrorModal'
 import { DateTime } from 'luxon'
 import MaxConsumptionCard from './MaxConsumptionCard'
-import AnalysisIcon from 'assets/icons/visu/analysis/analysis.svg'
 import TotalAnalysisChart from './TotalAnalysisChart'
 import ElecHalfHourMonthlyAnalysis from './ElecHalfHourMonthlyAnalysis'
 
@@ -36,13 +30,8 @@ const MonthlyAnalysis: React.FC<MonthlyAnalysisProps> = ({
   saveLastScrollPosition,
   scrollPosition,
 }: MonthlyAnalysisProps) => {
-  const { t } = useI18n()
   const client = useClient()
-  const history = useHistory()
   const { fluidTypes } = useSelector((state: AppStore) => state.ecolyo.global)
-  const { isProfileTypeCompleted } = useSelector(
-    (state: AppStore) => state.ecolyo.profile
-  )
   const [performanceIndicators, setPerformanceIndicators] = useState<
     PerformanceIndicator[]
   >([])
@@ -59,13 +48,9 @@ const MonthlyAnalysis: React.FC<MonthlyAnalysisProps> = ({
   const configService = new ConfigService()
   const fluidConfig = configService.getFluidConfig()
   const timeStep = TimeStep.MONTH
-  const goToForm = () => {
-    history.push('/profileType')
-  }
 
   useEffect(() => {
     let subscribed = true
-
     async function populateData() {
       if (subscribed) {
         setIsLoaded(false)
@@ -166,28 +151,6 @@ const MonthlyAnalysis: React.FC<MonthlyAnalysisProps> = ({
                   </div>
                   <div className="analysis-content">
                     <div className="card rich-card">
-                      <div className="status-header">
-                        <div>
-                          <StyledIcon icon={AnalysisIcon} size={44} />
-                          <p className="text-16-normal">
-                            {t('analysis.compare.title')}
-                          </p>
-                        </div>
-                        {isProfileTypeCompleted && (
-                          <Button
-                            aria-label={t(
-                              'analysis.accessibility.button_go_to_profil'
-                            )}
-                            onClick={goToForm}
-                            classes={{
-                              root: 'btn-secondary-negative',
-                              label: 'text-16-normal',
-                            }}
-                          >
-                            <StyledIcon icon={ProfileEditIcon} size={40} />
-                          </Button>
-                        )}
-                      </div>
                       <AnalysisConsumption
                         aggregatedPerformanceIndicator={
                           aggregatedPerformanceIndicators
diff --git a/src/components/Challenge/ChallengeView.tsx b/src/components/Challenge/ChallengeView.tsx
index 17fd422778224cb6702939696b60e44158fb8bff..0b1c7d76c21944b23b22e47d80bf9e35fcad4221 100644
--- a/src/components/Challenge/ChallengeView.tsx
+++ b/src/components/Challenge/ChallengeView.tsx
@@ -131,11 +131,10 @@ const ChallengeView: React.FC = () => {
 
   return (
     <>
-      <CozyBar titleKey={'common.title_challenge'} isBuilding={true} />
+      <CozyBar titleKey={'common.title_challenge'} />
       <Header
         setHeaderHeight={defineHeaderHeight}
         desktopTitleKey={'common.title_challenge'}
-        isBuilding={true}
       ></Header>
       <Content height={headerHeight}>
         <div
@@ -148,10 +147,6 @@ const ChallengeView: React.FC = () => {
           onMouseMove={handleClickOrTouchMove}
           onMouseUp={handleClickOrTouchEnd}
         >
-          <div className="building-banner">
-            <div className="title">{t('challenge.banner.title')}</div>
-            <div className="content">{t('challenge.banner.content')}</div>
-          </div>
           <div
             className="challenge-container"
             style={{
diff --git a/src/components/Challenge/__snapshots__/ChallengeView.spec.tsx.snap b/src/components/Challenge/__snapshots__/ChallengeView.spec.tsx.snap
index 5f7dfa0f965a157f1e7727250d4b17fe4761cbbf..ee1c09130e36abbe633c586977028ea7a54e1e2f 100644
--- a/src/components/Challenge/__snapshots__/ChallengeView.spec.tsx.snap
+++ b/src/components/Challenge/__snapshots__/ChallengeView.spec.tsx.snap
@@ -3,12 +3,10 @@
 exports[`ChallengeView component should be rendered correctly 1`] = `
 <React.Fragment>
   <CozyBar
-    isBuilding={true}
     titleKey="common.title_challenge"
   />
   <Header
     desktopTitleKey="common.title_challenge"
-    isBuilding={true}
     setHeaderHeight={[Function]}
   />
   <Content
@@ -24,20 +22,6 @@ exports[`ChallengeView component should be rendered correctly 1`] = `
       onTouchMove={[Function]}
       onTouchStart={[Function]}
     >
-      <div
-        className="building-banner"
-      >
-        <div
-          className="title"
-        >
-          challenge.banner.title
-        </div>
-        <div
-          className="content"
-        >
-          challenge.banner.content
-        </div>
-      </div>
       <div
         className="challenge-container"
         style={
diff --git a/src/components/Challenge/challengeCardDone.scss b/src/components/Challenge/challengeCardDone.scss
index b2b80c1ad974c4bbdd9900e1b9b5816e717bc20f..9b2ce26a7af4317567010328a4eda29e66aa1fd4 100644
--- a/src/components/Challenge/challengeCardDone.scss
+++ b/src/components/Challenge/challengeCardDone.scss
@@ -1,40 +1,39 @@
 @import '../../styles/base/typo-variables';
 @import '../../styles/base/color';
 
-.cardDone {
-  border: 1px solid $grey-bright;
-  border-radius: 4px;
-  display: flex;
-  flex-direction: column;
-  justify-content: space-around;
-  align-items: center;
-  .challengeName,
-  .labelResult {
-    margin-bottom: 1rem;
-  }
-  .iconResult {
+.cardContent {
+  &.cardDone {
+    border: 1px solid $grey-bright;
+    border-radius: 4px;
     display: flex;
-    @media all and(max-height: 700px) {
-      width: 55%;
-      margin: auto;
+    flex-direction: column;
+    justify-content: space-between;
+    align-items: center;
+
+    .iconResult {
+      display: flex;
+      @media all and(max-height: 700px) {
+        width: 55%;
+        margin: auto;
+      }
+    }
+    .imgResult {
+      width: 100%;
+      height: 100%;
+    }
+    .labelResult {
+      font-weight: bold;
+      font-size: 24px;
+      line-height: 120%;
+    }
+    .win {
+      color: $gold;
+    }
+    .lost {
+      color: $red-primary;
+    }
+    .statsResult {
+      text-align: center;
     }
-  }
-  .imgResult {
-    width: 100%;
-    height: 100%;
-  }
-  .labelResult {
-    font-weight: bold;
-    font-size: 24px;
-    line-height: 120%;
-  }
-  .win {
-    color: $gold;
-  }
-  .lost {
-    color: $red-primary;
-  }
-  .statsResult {
-    text-align: center;
   }
 }
diff --git a/src/components/Challenge/challengeView.scss b/src/components/Challenge/challengeView.scss
index 31e0d2537f02d08fc6b4b2bbd9ae70f61815e4ba..00af8a20ba27b7d7fa017dbbd9ba83c5b2102999 100644
--- a/src/components/Challenge/challengeView.scss
+++ b/src/components/Challenge/challengeView.scss
@@ -12,41 +12,13 @@
   align-items: center;
   padding: 0 2rem;
 }
-.building-banner {
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  justify-content: center;
-  background: linear-gradient(
-    45deg,
-    #e3b82a 25%,
-    #e2a70d 25%,
-    #e2a70d 50%,
-    #e3b82a 50%,
-    #e3b82a 75%,
-    #e2a70d 75%,
-    #e2a70d 100%
-  );
-  background-size: 56.57px 56.57px;
-  width: -webkit-fill-available;
-  box-sizing: border-box;
-  padding: 0.5rem 1rem;
-  text-align: center;
-  height: 75px;
-  margin: 1rem -1rem 0;
-  z-index: calc(#{$z-header} - 1);
-  border-radius: 6px;
-  .title {
-    font-weight: 700;
-    margin-bottom: 0.1rem;
-  }
-}
 .challenge-container {
   position: relative;
   width: 100%;
   display: flex;
   flex: 1;
   transition: all 300ms ease;
+  margin-top: 3rem;
 }
 .cardContent {
   margin: auto;
diff --git a/src/components/Connection/ConnectionOAuth.tsx b/src/components/Connection/ConnectionOAuth.tsx
index 1bd69c164cb941b594abd1c27f3b3a15833904af..97e56a07737753752f745f554fb45e74db0accda 100644
--- a/src/components/Connection/ConnectionOAuth.tsx
+++ b/src/components/Connection/ConnectionOAuth.tsx
@@ -101,6 +101,7 @@ const ConnectionOAuth: React.FC<ConnectionOAuthProps> = ({
         <ConnectionOAuthWithPartnerAccount
           konnectorSlug={konnectorSlug}
           konnector={konnector}
+          fluidStatus={fluidStatus}
           handleSuccess={handleSuccess}
           togglePartnerConnectionModal={togglePartnerConnectionModal}
         />
@@ -108,6 +109,7 @@ const ConnectionOAuth: React.FC<ConnectionOAuthProps> = ({
         <ConnectionOAuthNoPartnerAccount
           konnectorSlug={konnectorSlug}
           konnector={konnector}
+          fluidStatus={fluidStatus}
           handleSuccess={handleSuccess}
           togglePartnerConnectionModal={togglePartnerConnectionModal}
         />
diff --git a/src/components/Connection/ConnectionOAuthNoPartnerAccount.tsx b/src/components/Connection/ConnectionOAuthNoPartnerAccount.tsx
index 807e20753cba4ee1412dc81bde39d8d9310f3501..12df683d866a2a9bad6131425a1ed5fc4327dbb3 100644
--- a/src/components/Connection/ConnectionOAuthNoPartnerAccount.tsx
+++ b/src/components/Connection/ConnectionOAuthNoPartnerAccount.tsx
@@ -1,7 +1,7 @@
 import React from 'react'
 import { useI18n } from 'cozy-ui/transpiled/react/I18n'
 import './connectionOAuth.scss'
-import { Konnector } from 'models'
+import { FluidStatus, Konnector } from 'models'
 import FormOAuth from 'components/Connection/FormOAuth'
 import Button from '@material-ui/core/Button'
 
@@ -10,6 +10,7 @@ interface ConnectionOAuthNoPartnerAccountProps {
   konnector: Konnector | null
   handleSuccess: (accountId: string) => Promise<void>
   togglePartnerConnectionModal: () => void
+  fluidStatus: FluidStatus
 }
 
 const ConnectionOAuthNoPartnerAccount = ({
@@ -17,6 +18,7 @@ const ConnectionOAuthNoPartnerAccount = ({
   konnector,
   handleSuccess,
   togglePartnerConnectionModal,
+  fluidStatus,
 }: ConnectionOAuthNoPartnerAccountProps) => {
   const { t } = useI18n()
 
@@ -53,9 +55,9 @@ const ConnectionOAuthNoPartnerAccount = ({
           konnector={konnector}
           onSuccess={handleSuccess}
           highlightedStyle={false}
+          fluidStatus={fluidStatus}
         />
       </div>
-
       <div className="koauthform-infotext text-16-italic">
         {t('auth.' + `${konnectorSlug}` + '.no_account.info')}
       </div>
diff --git a/src/components/Connection/ConnectionOAuthWithPartnerAccount.tsx b/src/components/Connection/ConnectionOAuthWithPartnerAccount.tsx
index c0d9bbb26e0101afbc6b82ef23b917fcc4a54185..d0a81c48ec455841e48f0da8ec1552a743b79eff 100644
--- a/src/components/Connection/ConnectionOAuthWithPartnerAccount.tsx
+++ b/src/components/Connection/ConnectionOAuthWithPartnerAccount.tsx
@@ -1,7 +1,7 @@
 import React, { useCallback } from 'react'
 import { useI18n } from 'cozy-ui/transpiled/react/I18n'
 import './connectionOAuth.scss'
-import { Konnector } from 'models'
+import { FluidStatus, Konnector } from 'models'
 import FormOAuth from 'components/Connection/FormOAuth'
 import Button from '@material-ui/core/Button'
 
@@ -10,6 +10,7 @@ interface ConnectionOAuthWithPartnerAccountProps {
   konnector: Konnector | null
   handleSuccess: (accountId: string) => Promise<void>
   togglePartnerConnectionModal: () => void
+  fluidStatus: FluidStatus
 }
 
 const ConnectionOAuthWithPartnerAccount = ({
@@ -17,6 +18,7 @@ const ConnectionOAuthWithPartnerAccount = ({
   konnector,
   handleSuccess,
   togglePartnerConnectionModal,
+  fluidStatus,
 }: ConnectionOAuthWithPartnerAccountProps) => {
   const { t } = useI18n()
 
@@ -41,6 +43,7 @@ const ConnectionOAuthWithPartnerAccount = ({
           konnector={konnector}
           onSuccess={handleSuccess}
           highlightedStyle={true}
+          fluidStatus={fluidStatus}
         />
       </div>
       {konnectorSlug === 'grdfgrandlyon' && (
diff --git a/src/components/Connection/ConnectionResult.tsx b/src/components/Connection/ConnectionResult.tsx
index e3357ca96d3b9f8b4bcab6e701cb888cf51ccd5a..e5e94863b03e0a687dbb1d88b052d31dad6967e0 100644
--- a/src/components/Connection/ConnectionResult.tsx
+++ b/src/components/Connection/ConnectionResult.tsx
@@ -176,27 +176,32 @@ const ConnectionResult: React.FC<ConnectionResultProps> = ({
               title="Attention"
               ariaHidden={false}
             />
-
-            <div className="text-16-normal">
-              {t(`konnector_form.${konnectorError}`, {
-                fluid:
-                  fluidType === FluidType.GAS
-                    ? 'de gaz'
-                    : fluidType === FluidType.ELECTRICITY
-                    ? "d'électricité"
-                    : "d'eau",
-              })}
-              {konnectorError !== 'error_update_oauth' && (
-                <>
-                  <div className="connection-caption">
-                    {t('konnector_form.label_updated_at')}
-                  </div>
-                  <div className="text-16-bold">
-                    {lastExecutionDate.toLocaleString()}
-                  </div>
-                </>
-              )}
-            </div>
+            {konnectorError === 'login_failed' ? (
+              <div className="text-16-normal">
+                {t('konnector_form.login_failed')}
+              </div>
+            ) : (
+              <div className="text-16-normal">
+                {t(`konnector_form.${konnectorError}`, {
+                  fluid:
+                    fluidType === FluidType.GAS
+                      ? 'de gaz'
+                      : fluidType === FluidType.ELECTRICITY
+                      ? "d'électricité"
+                      : "d'eau",
+                })}
+                {konnectorError !== 'error_update_oauth' && (
+                  <>
+                    <div className="connection-caption">
+                      {t('konnector_form.label_updated_at')}
+                    </div>
+                    <div className="text-16-bold">
+                      {lastExecutionDate.toLocaleString()}
+                    </div>
+                  </>
+                )}
+              </div>
+            )}
           </div>
         ) : outDatedDataDays ? (
           // Else check if data is outdated
diff --git a/src/components/Connection/FormLogin.tsx b/src/components/Connection/FormLogin.tsx
index 9bfd1ddb1fca7274158f660bc99a4aa2b0b090f5..c184fa7155e7936461b9487879ddf58e7829c9d5 100644
--- a/src/components/Connection/FormLogin.tsx
+++ b/src/components/Connection/FormLogin.tsx
@@ -82,6 +82,12 @@ const FormLogin: React.FC<FormLoginProps> = ({
   const connect = async () => {
     const connectionService = new ConnectionService(client)
     try {
+      // If first connexion, send the usage event
+      await UsageEventService.addEvent(client, {
+        type: UsageEventType.KONNECTOR_ATTEMPT_EVENT,
+        target: konnectorSlug,
+        result: 'error',
+      })
       const {
         account: _account,
         trigger: _trigger,
@@ -97,7 +103,6 @@ const FormLogin: React.FC<FormLoginProps> = ({
         trigger: _trigger,
       }
       setLoading(false)
-      // await sendUsageEventSuccess(konnectorSlug)
       dispatch(updatedFluidConnection(fluidStatus.fluidType, updatedConnection))
       handleSuccess()
     } catch (err) {
diff --git a/src/components/Connection/FormOAuth.tsx b/src/components/Connection/FormOAuth.tsx
index 3be62fdb0518a240ac55cb6a29965799f8fb9f8c..5a2378c53a5dc61431b575010a408ad0b595ad46 100644
--- a/src/components/Connection/FormOAuth.tsx
+++ b/src/components/Connection/FormOAuth.tsx
@@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useState } from 'react'
 import { useI18n } from 'cozy-ui/transpiled/react/I18n'
 import { useClient } from 'cozy-client'
 import './auth.scss'
-import { Konnector } from 'models'
+import { FluidStatus, Konnector } from 'models'
 import { OAuthWindow } from 'cozy-harvest-lib/dist/components/OAuthWindow'
 import Button from '@material-ui/core/Button'
 import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
@@ -11,17 +11,21 @@ import { getPartnerPicto } from 'utils/picto'
 import { useDispatch, useSelector } from 'react-redux'
 import { AppStore } from 'store'
 import { setShouldRefreshConsent } from 'store/global/global.actions'
+import { UsageEventType } from 'enum/usageEvent.enum'
+import UsageEventService from 'services/usageEvent.service'
 
 interface FormOAuthProps {
   konnector: Konnector | null
   onSuccess: Function
   highlightedStyle?: boolean
+  fluidStatus: FluidStatus
 }
 
 const FormOAuth: React.FC<FormOAuthProps> = ({
   konnector,
   onSuccess,
   highlightedStyle = true,
+  fluidStatus,
 }: FormOAuthProps) => {
   const IDLE = 'idle'
   const WAITING = 'waiting'
@@ -39,9 +43,17 @@ const FormOAuth: React.FC<FormOAuthProps> = ({
     dispatch(setShouldRefreshConsent(false))
   }, [dispatch])
 
-  const startOAuth = useCallback(() => {
+  const startOAuth = useCallback(async () => {
+    // If first connexion, send the usage event
+    if (konnector && konnector.slug && fluidStatus.lastDataDate === null) {
+      await UsageEventService.addEvent(client, {
+        type: UsageEventType.KONNECTOR_ATTEMPT_EVENT,
+        target: konnector.slug,
+        result: 'error',
+      })
+    }
     setStatus(WAITING)
-  }, [])
+  }, [client, fluidStatus.lastDataDate, konnector])
 
   const handleAccountId = useCallback(
     (accountId: string) => {
diff --git a/src/components/Ecogesture/EcogestureCard.tsx b/src/components/Ecogesture/EcogestureCard.tsx
index 5e9311124a90512a769afd1cdf4dd0caf24326c9..da0e18a3e2c7f502e40e2c1895aa78c76210da04 100644
--- a/src/components/Ecogesture/EcogestureCard.tsx
+++ b/src/components/Ecogesture/EcogestureCard.tsx
@@ -11,10 +11,12 @@ import { Link } from '@material-ui/core/'
 
 interface EcogestureCardProps {
   ecogesture: Ecogesture
+  selectionCompleted: boolean
 }
 
 const EcogestureCard: React.FC<EcogestureCardProps> = ({
   ecogesture,
+  selectionCompleted,
 }: EcogestureCardProps) => {
   const [ecogestureIcon, setEcogestureIcon] = useState<string>('')
   useEffect(() => {
@@ -33,7 +35,10 @@ const EcogestureCard: React.FC<EcogestureCardProps> = ({
 
   return (
     <Link
-      to={`/ecogesture/${ecogesture.id}`}
+      to={{
+        pathname: `/ecogesture/${ecogesture.id}`,
+        state: { selectionCompleted },
+      }}
       component={RouterLink}
       className="ecogesture-list-item"
     >
diff --git a/src/components/Ecogesture/EcogestureEmptyList.tsx b/src/components/Ecogesture/EcogestureEmptyList.tsx
index d83cdec613cb77fdfb8df8a14d6fa632760a977a..234614fcb21c6bedfa61b9241554f158233548d1 100644
--- a/src/components/Ecogesture/EcogestureEmptyList.tsx
+++ b/src/components/Ecogesture/EcogestureEmptyList.tsx
@@ -12,11 +12,13 @@ interface EcogestureEmptyListProps {
   setTab: React.Dispatch<React.SetStateAction<number>>
   isObjective: boolean
   isSelectionDone: boolean
+  handleReinitClick: () => void
 }
 const EcogestureEmptyList: React.FC<EcogestureEmptyListProps> = ({
   setTab,
   isObjective,
   isSelectionDone,
+  handleReinitClick,
 }: EcogestureEmptyListProps) => {
   const { t } = useI18n()
   const history = useHistory()
@@ -57,6 +59,20 @@ const EcogestureEmptyList: React.FC<EcogestureEmptyListProps> = ({
           >
             {t('ecogesture.emptyList.btn1')}
           </Button>
+
+          {isSelectionDone && (
+            <Button
+              aria-label={t('ecogesture.emptyList.reinit')}
+              onClick={handleReinitClick}
+              classes={{
+                root: 'reinit-button btn-profile-next rounded',
+                label: 'text-16-bold',
+              }}
+            >
+              {t('ecogesture.reinit')}
+            </Button>
+          )}
+
           {!isSelectionDone && (
             <Button
               aria-label={t('ecogesture.emptyList.btn2')}
diff --git a/src/components/Ecogesture/EcogestureList.tsx b/src/components/Ecogesture/EcogestureList.tsx
index 029e36748d843c2b69784bb22bf0fb7a1ebe798a..cec76aff46bb1c3cc68e104b9d9ba5ebbf7d11b2 100644
--- a/src/components/Ecogesture/EcogestureList.tsx
+++ b/src/components/Ecogesture/EcogestureList.tsx
@@ -11,13 +11,15 @@ import EcogestureCard from 'components/Ecogesture/EcogestureCard'
 import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
 import Button from '@material-ui/core/Button'
 import './ecogestureList.scss'
-import { Usage } from 'enum/ecogesture.enum'
+import { EcogestureStatus, Usage } from 'enum/ecogesture.enum'
 
 interface EcogestureListProps {
   list: Ecogesture[]
   displaySelection: boolean
   selectionTotal: number
   selectionViewed: number
+  index: number
+  handleReinitClick: () => void
 }
 
 const EcogestureList: React.FC<EcogestureListProps> = ({
@@ -25,6 +27,8 @@ const EcogestureList: React.FC<EcogestureListProps> = ({
   displaySelection,
   selectionTotal,
   selectionViewed,
+  index,
+  handleReinitClick,
 }: EcogestureListProps) => {
   const { t } = useI18n()
   const history = useHistory()
@@ -50,7 +54,10 @@ const EcogestureList: React.FC<EcogestureListProps> = ({
       .filter(ecogesture => Usage[ecogesture.usage] === activeFilter)
       .map((ecogesture, index) => (
         <div key={index} className="ecogesture-list-item">
-          <EcogestureCard ecogesture={ecogesture} />
+          <EcogestureCard
+            ecogesture={ecogesture}
+            selectionCompleted={selectionViewed === selectionTotal}
+          />
         </div>
       ))
     if (filtered.length > 0) {
@@ -163,23 +170,30 @@ const EcogestureList: React.FC<EcogestureListProps> = ({
         )}
       </div>
       <div className="ecogesture-content">
-        {list.length > 0 && activeFilter === Usage[Usage.ALL] ? (
-          list.map((ecogesture, index) => (
-            <EcogestureCard ecogesture={ecogesture} key={index} />
-          ))
-        ) : list.length > 0 && activeFilter !== Usage[Usage.ALL] ? (
-          filterEcogesture(list)
-        ) : !displaySelection ? (
-          <div className="ec-filter-error">
-            <div className="text-20-normal">
-              {t('ecogesture.no_ecogesture_filter.text1')}
-            </div>
-            <div className="text-16-italic">
-              {t('ecogesture.no_ecogesture_filter.text2')}
-            </div>
-          </div>
-        ) : (
-          ''
+        {list.length > 0 && activeFilter === Usage[Usage.ALL]
+          ? list.map((ecogesture, index) => (
+              <EcogestureCard
+                ecogesture={ecogesture}
+                key={index}
+                selectionCompleted={selectionViewed === selectionTotal}
+              />
+            ))
+          : list.length > 0 && activeFilter !== Usage[Usage.ALL]
+          ? filterEcogesture(list)
+          : !displaySelection && (
+              <div className="ec-filter-error">
+                <div className="text-20-normal">
+                  {t('ecogesture.no_ecogesture_filter.text1')}
+                </div>
+                <div className="text-16-italic">
+                  {t('ecogesture.no_ecogesture_filter.text2')}
+                </div>
+              </div>
+            )}
+        {!displaySelection && index !== EcogestureStatus.ALL && (
+          <button className="reinit-button" onClick={handleReinitClick}>
+            <span>{t('ecogesture.reinit')}</span>
+          </button>
         )}
       </div>
     </div>
diff --git a/src/components/Ecogesture/EcogestureReinitModal.spec.tsx b/src/components/Ecogesture/EcogestureReinitModal.spec.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..2cc0a86e1516b66cb9ee543a30271f818bc2e7b9
--- /dev/null
+++ b/src/components/Ecogesture/EcogestureReinitModal.spec.tsx
@@ -0,0 +1,50 @@
+import React from 'react'
+import { mount } from 'enzyme'
+import toJson from 'enzyme-to-json'
+import configureStore from 'redux-mock-store'
+import { globalStateData } from '../../../tests/__mocks__/globalStateData.mock'
+import { challengeStateData } from '../../../tests/__mocks__/challengeStateData.mock'
+import { Provider } from 'react-redux'
+import EcogestureReinitModal from './EcogestureReinitModal'
+
+jest.mock('cozy-ui/transpiled/react/I18n', () => {
+  return {
+    useI18n: jest.fn(() => {
+      return {
+        t: (str: string) => str,
+      }
+    }),
+  }
+})
+const mockImportIconbyId = jest.fn()
+jest.mock('utils/utils', () => {
+  return {
+    importIconbyId: jest.fn(() => {
+      return mockImportIconbyId
+    }),
+  }
+})
+
+const mockStore = configureStore([])
+
+describe('EcogestureReinitModal component', () => {
+  it('should be rendered correctly', async () => {
+    const store = mockStore({
+      ecolyo: {
+        global: globalStateData,
+        challenge: challengeStateData,
+      },
+    })
+
+    const wrapper = mount(
+      <Provider store={store}>
+        <EcogestureReinitModal
+          open={true}
+          handleCloseClick={jest.fn()}
+          handleLaunchReinit={jest.fn()}
+        />
+      </Provider>
+    )
+    expect(toJson(wrapper)).toMatchSnapshot()
+  })
+})
diff --git a/src/components/Ecogesture/EcogestureReinitModal.tsx b/src/components/Ecogesture/EcogestureReinitModal.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..cb6325857acdc3db7bfc7e071ff3c0f75f155939
--- /dev/null
+++ b/src/components/Ecogesture/EcogestureReinitModal.tsx
@@ -0,0 +1,90 @@
+import React from 'react'
+import Dialog from '@material-ui/core/Dialog'
+import { Button, IconButton } from '@material-ui/core'
+import Icon from 'cozy-ui/transpiled/react/Icon'
+import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import CloseIcon from 'assets/icons/ico/close.svg'
+import './ecogestureReinitModal.scss'
+import warningIcon from 'assets/icons/ico/warn-orange.svg'
+interface EcogestureReinitModalProps {
+  open: boolean
+  handleCloseClick: () => void
+  handleLaunchReinit: () => void
+}
+const EcogestureReinitModal: React.FC<EcogestureReinitModalProps> = ({
+  open,
+  handleCloseClick,
+  handleLaunchReinit,
+}: EcogestureReinitModalProps) => {
+  const { t } = useI18n()
+  return (
+    <Dialog
+      open={open}
+      onClose={handleCloseClick}
+      aria-labelledby={'accessibility-title'}
+      classes={{
+        root: 'modal-root',
+        paper: 'modal-paper',
+      }}
+    >
+      <div id={'accessibility-title'}>
+        {t('feedback.accessibility.window_title')}
+      </div>
+      <IconButton
+        aria-label={t('feedback.accessibility.button_close')}
+        className="modal-paper-close-button"
+        onClick={handleCloseClick}
+      >
+        <Icon icon={CloseIcon} size={16} />
+      </IconButton>
+      <div className="eg-reinit-modal">
+        <Icon icon={warningIcon} size={63} />
+        <div className="title text-20-bold">
+          {t('ecogesture.reinitModal.title_part1')}
+          <span className="warn-title">
+            {t('ecogesture.reinitModal.title_part2')}
+          </span>
+          {t('ecogesture.reinitModal.title_part3')}
+          <span className="warn-title">
+            {t('ecogesture.reinitModal.title_part4')}
+          </span>
+          {t('ecogesture.reinitModal.title_part5')}
+          <span className="warn-title">
+            {t('ecogesture.reinitModal.title_part6')}
+          </span>
+        </div>
+        <div className="text-16-normal text">
+          {t('ecogesture.reinitModal.text1')}
+        </div>
+        <div className="text-16-bold text">
+          {t('ecogesture.reinitModal.text2')}
+        </div>
+        <div className="buttons-container">
+          <Button
+            aria-label={t('ecogesture.reinitModal.btn1')}
+            onClick={handleCloseClick}
+            className="btn1"
+            classes={{
+              root: 'btn-secondary-negative',
+              label: 'text-16-bold',
+            }}
+          >
+            {t('ecogesture.reinitModal.btn1')}
+          </Button>
+          <Button
+            aria-label={t('ecogesture.reinitModal.btn2')}
+            onClick={handleLaunchReinit}
+            classes={{
+              root: 'btn-profile-next rounded',
+              label: 'text-16-bold',
+            }}
+          >
+            {t('ecogesture.reinitModal.btn2')}
+          </Button>
+        </div>
+      </div>
+    </Dialog>
+  )
+}
+
+export default EcogestureReinitModal
diff --git a/src/components/Ecogesture/EcogestureView.tsx b/src/components/Ecogesture/EcogestureView.tsx
index 3a4110cca29bb1bcf55966cfeb2968e9cf2150df..afd4096cc011e072107f3918ecff3dfc69cf08e2 100644
--- a/src/components/Ecogesture/EcogestureView.tsx
+++ b/src/components/Ecogesture/EcogestureView.tsx
@@ -18,6 +18,7 @@ import { FluidType } from 'enum/fluid.enum'
 import EcogestureEmptyList from './EcogestureEmptyList'
 import { EcogestureStatus } from 'enum/ecogesture.enum'
 import EcogestureInitModal from './EcogestureInitModal'
+import EcogestureReinitModal from './EcogestureReinitModal'
 import { updateProfile } from 'store/profile/profile.actions'
 import { useHistory, useLocation } from 'react-router-dom'
 import { ProfileEcogesture } from 'models/profileEcogesture.model'
@@ -79,6 +80,13 @@ const EcogestureView: React.FC = () => {
   const [openEcogestureInitModal, setOpenEcogestureInitModal] = useState<
     boolean
   >(!haveSeenEcogestureModal)
+  const [openEcogestureReinitModal, setOpenEcogestureReinitModal] = useState<
+    boolean
+  >(false)
+
+  const handleReinitClick = useCallback(() => {
+    setOpenEcogestureReinitModal(true)
+  }, [])
 
   const handleLaunchForm = useCallback(async () => {
     dispatch(updateProfile({ haveSeenEcogestureModal: true }))
@@ -91,6 +99,22 @@ const EcogestureView: React.FC = () => {
     setOpenEcogestureInitModal(false)
   }, [dispatch])
 
+  const handleLaunchReinit = useCallback(async () => {
+    setOpenEcogestureReinitModal(false)
+    setIsLoaded(false)
+    const ecogestureService = new EcogestureService(client)
+    const reset = await ecogestureService.reinitAllEcogestures()
+    if (reset) {
+      setOpenEcogestureReinitModal(false)
+      setIsLoaded(true)
+      history.push('/ecogesture-form?modal=true')
+    }
+  }, [client, history])
+
+  const handleCloseEcogestureReinitModal = useCallback(() => {
+    setOpenEcogestureReinitModal(false)
+  }, [])
+
   const handleChange = useCallback(
     (event: React.ChangeEvent<{}>, newValue: any) => {
       event.preventDefault()
@@ -197,6 +221,7 @@ const EcogestureView: React.FC = () => {
                 })}
                 {...tabProps(EcogestureStatus.DOING)}
               ></Tab>
+
               <Tab
                 label={getLabel(EcogestureStatus.ALL)}
                 className={classNames('single-tab', {
@@ -215,6 +240,7 @@ const EcogestureView: React.FC = () => {
                     setTab={setTabValue}
                     isObjective={true}
                     isSelectionDone={true}
+                    handleReinitClick={handleReinitClick}
                   />
                 ) : (
                   <EcogestureList
@@ -222,6 +248,8 @@ const EcogestureView: React.FC = () => {
                     displaySelection={totalAvailable !== totalViewed}
                     selectionTotal={totalAvailable}
                     selectionViewed={totalViewed}
+                    index={EcogestureStatus.OBJECTIVE}
+                    handleReinitClick={handleReinitClick}
                   />
                 )
               ) : (
@@ -229,6 +257,7 @@ const EcogestureView: React.FC = () => {
                   setTab={setTabValue}
                   isObjective={true}
                   isSelectionDone={false}
+                  handleReinitClick={handleReinitClick}
                 />
               )}
             </TabPanel>
@@ -241,6 +270,7 @@ const EcogestureView: React.FC = () => {
                     setTab={setTabValue}
                     isObjective={false}
                     isSelectionDone={true}
+                    handleReinitClick={handleReinitClick}
                   />
                 ) : (
                   <EcogestureList
@@ -248,6 +278,8 @@ const EcogestureView: React.FC = () => {
                     displaySelection={totalAvailable !== totalViewed}
                     selectionTotal={totalAvailable}
                     selectionViewed={totalViewed}
+                    index={EcogestureStatus.DOING}
+                    handleReinitClick={handleReinitClick}
                   />
                 )
               ) : (
@@ -255,9 +287,11 @@ const EcogestureView: React.FC = () => {
                   setTab={setTabValue}
                   isObjective={false}
                   isSelectionDone={false}
+                  handleReinitClick={handleReinitClick}
                 />
               )}
             </TabPanel>
+
             <TabPanel value={tabValue} index={EcogestureStatus.ALL}>
               {allEcogestureList.length && (
                 <EcogestureList
@@ -265,6 +299,8 @@ const EcogestureView: React.FC = () => {
                   displaySelection={false}
                   selectionTotal={totalAvailable}
                   selectionViewed={totalViewed}
+                  index={EcogestureStatus.ALL}
+                  handleReinitClick={handleReinitClick}
                 />
               )}
             </TabPanel>
@@ -278,6 +314,13 @@ const EcogestureView: React.FC = () => {
           handleLaunchForm={handleLaunchForm}
         />
       )}
+      {openEcogestureReinitModal && (
+        <EcogestureReinitModal
+          open={openEcogestureReinitModal}
+          handleCloseClick={handleCloseEcogestureReinitModal}
+          handleLaunchReinit={handleLaunchReinit}
+        />
+      )}
     </>
   )
 }
diff --git a/src/components/Ecogesture/SingleEcogesture.spec.tsx b/src/components/Ecogesture/SingleEcogesture.spec.tsx
index 8f45017fcaf5eb431b6a1d88e135d84c4bdc2df0..ae4e3360ee6982f4c34bbc59f26ad5c20eebfa3a 100644
--- a/src/components/Ecogesture/SingleEcogesture.spec.tsx
+++ b/src/components/Ecogesture/SingleEcogesture.spec.tsx
@@ -52,6 +52,12 @@ jest.mock('services/ecogesture.service', () => {
 
 const mockStore = configureStore([])
 
+jest.mock('react-router-dom', () => ({
+  useLocation: jest.fn().mockReturnValue({
+    state: { selectionCompleted: true },
+  }),
+}))
+
 describe('SingleEcogesture component', () => {
   // eslint-disable-next-line @typescript-eslint/no-explicit-any
 
diff --git a/src/components/Ecogesture/SingleEcogesture.tsx b/src/components/Ecogesture/SingleEcogesture.tsx
index 96154c6c9c667603003ebb574e2bd079f663b76e..5694040186f35cc094a56adf5b7e7620272d51ed 100644
--- a/src/components/Ecogesture/SingleEcogesture.tsx
+++ b/src/components/Ecogesture/SingleEcogesture.tsx
@@ -24,6 +24,8 @@ import { useClient } from 'cozy-client'
 import ErrorPage from 'components/CommonKit/ErrorPage/ErrorPage'
 import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
 import { FluidType } from 'enum/fluid.enum'
+import { useLocation } from 'react-router-dom'
+import { Location } from 'history'
 
 interface SingleEcogestureProps {
   match: { params: { id: string } }
@@ -34,6 +36,7 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
 }: SingleEcogestureProps) => {
   const { t } = useI18n()
   const client = useClient()
+  const location: Location<any> = useLocation<any>()
   const [ecogesture, setEcogesture] = useState<Ecogesture>()
   const [ecogestureIcon, setEcogestureIcon] = useState<string>('')
   const [isMoreDetail, setIsMoreDetail] = useState<boolean>(false)
@@ -41,6 +44,7 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
   const [isObjective, setIsObjective] = useState<boolean>(false)
   const [isLoading, setIsLoading] = useState<boolean>(true)
   const ecogestureID: string = match.params.id
+  const selectionCompleted = location.state.selectionCompleted
 
   const ecogestureService = useMemo(() => new EcogestureService(client), [
     client,
@@ -132,6 +136,7 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
       </Content>
     )
   }
+
   return ecogesture ? (
     <>
       <CozyBar
@@ -182,41 +187,44 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
                 : t('ecogesture_modal.show_more')}
             </div>
           </div>
-          <div className="buttons-selection">
-            <IconButton
-              aria-label={t('ecogesture.objective')}
-              onClick={toggleObjective}
-              classes={{
-                root: `btn-secondary-negative objective-btn ${isObjective &&
-                  'active'}`,
-                label: 'text-15-normal',
-              }}
-            >
-              <Icon
-                className="status-icon"
-                icon={
-                  isObjective ? objectiveEnabledIcon : objectiveDisabledIcon
-                }
-                size={40}
-              />
-              <span>{t('ecogesture.objective')}</span>
-            </IconButton>
-            <IconButton
-              aria-label={t('ecogesture.doing')}
-              onClick={toggleDoing}
-              classes={{
-                root: `btn-secondary-negative doing-btn ${isDoing && 'active'}`,
-                label: 'text-15-normal',
-              }}
-            >
-              <Icon
-                className="status-icon"
-                icon={isDoing ? doingEnabledIcon : doingDisabledIcon}
-                size={40}
-              />
-              <span>{t('ecogesture.doing')}</span>
-            </IconButton>
-          </div>
+          {selectionCompleted && (
+            <div className="buttons-selection">
+              <IconButton
+                aria-label={t('ecogesture.objective')}
+                onClick={toggleObjective}
+                classes={{
+                  root: `btn-secondary-negative objective-btn ${isObjective &&
+                    'active'}`,
+                  label: 'text-15-normal',
+                }}
+              >
+                <Icon
+                  className="status-icon"
+                  icon={
+                    isObjective ? objectiveEnabledIcon : objectiveDisabledIcon
+                  }
+                  size={40}
+                />
+                <span>{t('ecogesture.objective')}</span>
+              </IconButton>
+              <IconButton
+                aria-label={t('ecogesture.doing')}
+                onClick={toggleDoing}
+                classes={{
+                  root: `btn-secondary-negative doing-btn ${isDoing &&
+                    'active'}`,
+                  label: 'text-15-normal',
+                }}
+              >
+                <Icon
+                  className="status-icon"
+                  icon={isDoing ? doingEnabledIcon : doingDisabledIcon}
+                  size={40}
+                />
+                <span>{t('ecogesture.doing')}</span>
+              </IconButton>
+            </div>
+          )}
         </div>
       </Content>
     </>
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap
index f919091582e7d742b443f548059551526e767bcb..5101707fde8e729be87ba46df5f4ed6d8eb7abf9 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureCard.spec.tsx.snap
@@ -87,7 +87,14 @@ exports[`EcogestureCard component should be rendered correctly 1`] = `
               "render": [Function],
             }
           }
-          to="/ecogesture/ECOGESTURE001"
+          to={
+            Object {
+              "pathname": "/ecogesture/ECOGESTURE001",
+              "state": Object {
+                "selectionCompleted": undefined,
+              },
+            }
+          }
         >
           <ForwardRef(Link)
             className="ecogesture-list-item"
@@ -115,7 +122,14 @@ exports[`EcogestureCard component should be rendered correctly 1`] = `
                 "render": [Function],
               }
             }
-            to="/ecogesture/ECOGESTURE001"
+            to={
+              Object {
+                "pathname": "/ecogesture/ECOGESTURE001",
+                "state": Object {
+                  "selectionCompleted": undefined,
+                },
+              }
+            }
           >
             <WithStyles(ForwardRef(Typography))
               className="MuiLink-root MuiLink-underlineHover ecogesture-list-item"
@@ -136,7 +150,14 @@ exports[`EcogestureCard component should be rendered correctly 1`] = `
               }
               onBlur={[Function]}
               onFocus={[Function]}
-              to="/ecogesture/ECOGESTURE001"
+              to={
+                Object {
+                  "pathname": "/ecogesture/ECOGESTURE001",
+                  "state": Object {
+                    "selectionCompleted": undefined,
+                  },
+                }
+              }
               variant="inherit"
             >
               <ForwardRef(Typography)
@@ -192,14 +213,28 @@ exports[`EcogestureCard component should be rendered correctly 1`] = `
                 }
                 onBlur={[Function]}
                 onFocus={[Function]}
-                to="/ecogesture/ECOGESTURE001"
+                to={
+                  Object {
+                    "pathname": "/ecogesture/ECOGESTURE001",
+                    "state": Object {
+                      "selectionCompleted": undefined,
+                    },
+                  }
+                }
                 variant="inherit"
               >
                 <Link
                   className="MuiTypography-root MuiLink-root MuiLink-underlineHover ecogesture-list-item MuiTypography-colorPrimary"
                   onBlur={[Function]}
                   onFocus={[Function]}
-                  to="/ecogesture/ECOGESTURE001"
+                  to={
+                    Object {
+                      "pathname": "/ecogesture/ECOGESTURE001",
+                      "state": Object {
+                        "selectionCompleted": undefined,
+                      },
+                    }
+                  }
                 >
                   <LinkAnchor
                     className="MuiTypography-root MuiLink-root MuiLink-underlineHover ecogesture-list-item MuiTypography-colorPrimary"
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap
index 5ecf8327ab3872c13aa3cbb97aa041c35957cb8b..2b952c562e3f62fd514c329cf197985559249d2c 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureList.spec.tsx.snap
@@ -1871,6 +1871,7 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                 }
               }
               key="0"
+              selectionCompleted={true}
             />
             <mock-ecogesturecard
               ecogesture={
@@ -1908,6 +1909,7 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                 }
               }
               key="1"
+              selectionCompleted={true}
             />
             <mock-ecogesturecard
               ecogesture={
@@ -1948,7 +1950,15 @@ exports[`EcogesturesList component should be rendered correctly 1`] = `
                 }
               }
               key="2"
+              selectionCompleted={true}
             />
+            <button
+              className="reinit-button"
+            >
+              <span>
+                ecogesture.reinit
+              </span>
+            </button>
           </div>
         </div>
       </EcogestureList>
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureReinitModal.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureReinitModal.spec.tsx.snap
new file mode 100644
index 0000000000000000000000000000000000000000..49f0e57d37977177e6f46d84c0f160ae16bbab66
--- /dev/null
+++ b/src/components/Ecogesture/__snapshots__/EcogestureReinitModal.spec.tsx.snap
@@ -0,0 +1,1211 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`EcogestureReinitModal component should be rendered correctly 1`] = `
+<Provider
+  store={
+    Object {
+      "clearActions": [Function],
+      "dispatch": [Function],
+      "getActions": [Function],
+      "getState": [Function],
+      "replaceReducer": [Function],
+      "subscribe": [Function],
+    }
+  }
+>
+  <EcogestureReinitModal
+    handleCloseClick={[MockFunction]}
+    handleLaunchReinit={[MockFunction]}
+    open={true}
+  >
+    <WithStyles(ForwardRef(Dialog))
+      aria-labelledby="accessibility-title"
+      classes={
+        Object {
+          "paper": "modal-paper",
+          "root": "modal-root",
+        }
+      }
+      onClose={[MockFunction]}
+      open={true}
+    >
+      <ForwardRef(Dialog)
+        aria-labelledby="accessibility-title"
+        classes={
+          Object {
+            "container": "MuiDialog-container",
+            "paper": "MuiDialog-paper modal-paper",
+            "paperFullScreen": "MuiDialog-paperFullScreen",
+            "paperFullWidth": "MuiDialog-paperFullWidth",
+            "paperScrollBody": "MuiDialog-paperScrollBody",
+            "paperScrollPaper": "MuiDialog-paperScrollPaper",
+            "paperWidthFalse": "MuiDialog-paperWidthFalse",
+            "paperWidthLg": "MuiDialog-paperWidthLg",
+            "paperWidthMd": "MuiDialog-paperWidthMd",
+            "paperWidthSm": "MuiDialog-paperWidthSm",
+            "paperWidthXl": "MuiDialog-paperWidthXl",
+            "paperWidthXs": "MuiDialog-paperWidthXs",
+            "root": "MuiDialog-root modal-root",
+            "scrollBody": "MuiDialog-scrollBody",
+            "scrollPaper": "MuiDialog-scrollPaper",
+          }
+        }
+        onClose={[MockFunction]}
+        open={true}
+      >
+        <ForwardRef(Modal)
+          BackdropComponent={
+            Object {
+              "$$typeof": Symbol(react.forward_ref),
+              "Naked": Object {
+                "$$typeof": Symbol(react.forward_ref),
+                "propTypes": Object {
+                  "children": [Function],
+                  "className": [Function],
+                  "classes": [Function],
+                  "invisible": [Function],
+                  "open": [Function],
+                  "transitionDuration": [Function],
+                },
+                "render": [Function],
+              },
+              "displayName": "WithStyles(ForwardRef(Backdrop))",
+              "options": Object {
+                "defaultTheme": Object {
+                  "breakpoints": Object {
+                    "between": [Function],
+                    "down": [Function],
+                    "keys": Array [
+                      "xs",
+                      "sm",
+                      "md",
+                      "lg",
+                      "xl",
+                    ],
+                    "only": [Function],
+                    "up": [Function],
+                    "values": Object {
+                      "lg": 1280,
+                      "md": 960,
+                      "sm": 600,
+                      "xl": 1920,
+                      "xs": 0,
+                    },
+                    "width": [Function],
+                  },
+                  "direction": "ltr",
+                  "mixins": Object {
+                    "gutters": [Function],
+                    "toolbar": Object {
+                      "@media (min-width:0px) and (orientation: landscape)": Object {
+                        "minHeight": 48,
+                      },
+                      "@media (min-width:600px)": Object {
+                        "minHeight": 64,
+                      },
+                      "minHeight": 56,
+                    },
+                  },
+                  "overrides": Object {},
+                  "palette": Object {
+                    "action": Object {
+                      "active": "rgba(0, 0, 0, 0.54)",
+                      "disabled": "rgba(0, 0, 0, 0.26)",
+                      "disabledBackground": "rgba(0, 0, 0, 0.12)",
+                      "hover": "rgba(0, 0, 0, 0.08)",
+                      "hoverOpacity": 0.08,
+                      "selected": "rgba(0, 0, 0, 0.14)",
+                    },
+                    "augmentColor": [Function],
+                    "background": Object {
+                      "default": "#fafafa",
+                      "paper": "#fff",
+                    },
+                    "common": Object {
+                      "black": "#000",
+                      "white": "#fff",
+                    },
+                    "contrastThreshold": 3,
+                    "divider": "rgba(0, 0, 0, 0.12)",
+                    "error": Object {
+                      "contrastText": "#fff",
+                      "dark": "#d32f2f",
+                      "light": "#e57373",
+                      "main": "#f44336",
+                    },
+                    "getContrastText": [Function],
+                    "grey": Object {
+                      "100": "#f5f5f5",
+                      "200": "#eeeeee",
+                      "300": "#e0e0e0",
+                      "400": "#bdbdbd",
+                      "50": "#fafafa",
+                      "500": "#9e9e9e",
+                      "600": "#757575",
+                      "700": "#616161",
+                      "800": "#424242",
+                      "900": "#212121",
+                      "A100": "#d5d5d5",
+                      "A200": "#aaaaaa",
+                      "A400": "#303030",
+                      "A700": "#616161",
+                    },
+                    "info": Object {
+                      "contrastText": "#fff",
+                      "dark": "#1976d2",
+                      "light": "#64b5f6",
+                      "main": "#2196f3",
+                    },
+                    "primary": Object {
+                      "contrastText": "#fff",
+                      "dark": "#303f9f",
+                      "light": "#7986cb",
+                      "main": "#3f51b5",
+                    },
+                    "secondary": Object {
+                      "contrastText": "#fff",
+                      "dark": "#c51162",
+                      "light": "#ff4081",
+                      "main": "#f50057",
+                    },
+                    "success": Object {
+                      "contrastText": "rgba(0, 0, 0, 0.87)",
+                      "dark": "#388e3c",
+                      "light": "#81c784",
+                      "main": "#4caf50",
+                    },
+                    "text": Object {
+                      "disabled": "rgba(0, 0, 0, 0.38)",
+                      "hint": "rgba(0, 0, 0, 0.38)",
+                      "primary": "rgba(0, 0, 0, 0.87)",
+                      "secondary": "rgba(0, 0, 0, 0.54)",
+                    },
+                    "tonalOffset": 0.2,
+                    "type": "light",
+                    "warning": Object {
+                      "contrastText": "rgba(0, 0, 0, 0.87)",
+                      "dark": "#f57c00",
+                      "light": "#ffb74d",
+                      "main": "#ff9800",
+                    },
+                  },
+                  "props": Object {},
+                  "shadows": Array [
+                    "none",
+                    "0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)",
+                    "0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)",
+                    "0px 3px 3px -2px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 1px 8px 0px rgba(0,0,0,0.12)",
+                    "0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)",
+                    "0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)",
+                    "0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)",
+                    "0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)",
+                    "0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)",
+                    "0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)",
+                    "0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)",
+                    "0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)",
+                    "0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)",
+                    "0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)",
+                    "0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)",
+                    "0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)",
+                    "0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)",
+                    "0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)",
+                    "0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)",
+                    "0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)",
+                    "0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)",
+                    "0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)",
+                    "0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)",
+                    "0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)",
+                    "0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)",
+                  ],
+                  "shape": Object {
+                    "borderRadius": 4,
+                  },
+                  "spacing": [Function],
+                  "transitions": Object {
+                    "create": [Function],
+                    "duration": Object {
+                      "complex": 375,
+                      "enteringScreen": 225,
+                      "leavingScreen": 195,
+                      "short": 250,
+                      "shorter": 200,
+                      "shortest": 150,
+                      "standard": 300,
+                    },
+                    "easing": Object {
+                      "easeIn": "cubic-bezier(0.4, 0, 1, 1)",
+                      "easeInOut": "cubic-bezier(0.4, 0, 0.2, 1)",
+                      "easeOut": "cubic-bezier(0.0, 0, 0.2, 1)",
+                      "sharp": "cubic-bezier(0.4, 0, 0.6, 1)",
+                    },
+                    "getAutoHeightDuration": [Function],
+                  },
+                  "typography": Object {
+                    "body1": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "1rem",
+                      "fontWeight": 400,
+                      "letterSpacing": "0.00938em",
+                      "lineHeight": 1.5,
+                    },
+                    "body2": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "0.875rem",
+                      "fontWeight": 400,
+                      "letterSpacing": "0.01071em",
+                      "lineHeight": 1.43,
+                    },
+                    "button": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "0.875rem",
+                      "fontWeight": 500,
+                      "letterSpacing": "0.02857em",
+                      "lineHeight": 1.75,
+                      "textTransform": "uppercase",
+                    },
+                    "caption": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "0.75rem",
+                      "fontWeight": 400,
+                      "letterSpacing": "0.03333em",
+                      "lineHeight": 1.66,
+                    },
+                    "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                    "fontSize": 14,
+                    "fontWeightBold": 700,
+                    "fontWeightLight": 300,
+                    "fontWeightMedium": 500,
+                    "fontWeightRegular": 400,
+                    "h1": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "6rem",
+                      "fontWeight": 300,
+                      "letterSpacing": "-0.01562em",
+                      "lineHeight": 1.167,
+                    },
+                    "h2": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "3.75rem",
+                      "fontWeight": 300,
+                      "letterSpacing": "-0.00833em",
+                      "lineHeight": 1.2,
+                    },
+                    "h3": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "3rem",
+                      "fontWeight": 400,
+                      "letterSpacing": "0em",
+                      "lineHeight": 1.167,
+                    },
+                    "h4": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "2.125rem",
+                      "fontWeight": 400,
+                      "letterSpacing": "0.00735em",
+                      "lineHeight": 1.235,
+                    },
+                    "h5": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "1.5rem",
+                      "fontWeight": 400,
+                      "letterSpacing": "0em",
+                      "lineHeight": 1.334,
+                    },
+                    "h6": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "1.25rem",
+                      "fontWeight": 500,
+                      "letterSpacing": "0.0075em",
+                      "lineHeight": 1.6,
+                    },
+                    "htmlFontSize": 16,
+                    "overline": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "0.75rem",
+                      "fontWeight": 400,
+                      "letterSpacing": "0.08333em",
+                      "lineHeight": 2.66,
+                      "textTransform": "uppercase",
+                    },
+                    "pxToRem": [Function],
+                    "round": [Function],
+                    "subtitle1": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "1rem",
+                      "fontWeight": 400,
+                      "letterSpacing": "0.00938em",
+                      "lineHeight": 1.75,
+                    },
+                    "subtitle2": Object {
+                      "fontFamily": "\\"Roboto\\", \\"Helvetica\\", \\"Arial\\", sans-serif",
+                      "fontSize": "0.875rem",
+                      "fontWeight": 500,
+                      "letterSpacing": "0.00714em",
+                      "lineHeight": 1.57,
+                    },
+                  },
+                  "zIndex": Object {
+                    "appBar": 1100,
+                    "drawer": 1200,
+                    "mobileStepper": 1000,
+                    "modal": 1300,
+                    "snackbar": 1400,
+                    "speedDial": 1050,
+                    "tooltip": 1500,
+                  },
+                },
+                "name": "MuiBackdrop",
+              },
+              "propTypes": Object {
+                "classes": [Function],
+                "innerRef": [Function],
+              },
+              "render": [Function],
+              "useStyles": [Function],
+            }
+          }
+          BackdropProps={
+            Object {
+              "transitionDuration": Object {
+                "enter": 225,
+                "exit": 195,
+              },
+            }
+          }
+          className="MuiDialog-root modal-root"
+          closeAfterTransition={true}
+          disableBackdropClick={false}
+          disableEscapeKeyDown={false}
+          onClose={[MockFunction]}
+          open={true}
+        >
+          <ForwardRef(Portal)
+            disablePortal={false}
+          >
+            <Portal
+              containerInfo={
+                <body
+                  style="padding-right: 0px; overflow: hidden;"
+                >
+                  <div
+                    class="MuiDialog-root modal-root"
+                    role="presentation"
+                    style="position: fixed; z-index: 1300; right: 0px; bottom: 0px; top: 0px; left: 0px;"
+                  >
+                    <div
+                      aria-hidden="true"
+                      class="MuiBackdrop-root"
+                      style="opacity: 1; webkit-transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;"
+                    />
+                    <div
+                      data-test="sentinelStart"
+                      tabindex="0"
+                    />
+                    <div
+                      class="MuiDialog-container MuiDialog-scrollPaper"
+                      role="none presentation"
+                      style="opacity: 1; webkit-transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms; transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;"
+                      tabindex="-1"
+                    >
+                      <div
+                        aria-labelledby="accessibility-title"
+                        class="MuiPaper-root MuiDialog-paper modal-paper MuiDialog-paperScrollPaper MuiDialog-paperWidthSm MuiPaper-elevation24 MuiPaper-rounded"
+                        role="dialog"
+                      >
+                        <div
+                          id="accessibility-title"
+                        >
+                          feedback.accessibility.window_title
+                        </div>
+                        <button
+                          aria-label="feedback.accessibility.button_close"
+                          class="MuiButtonBase-root MuiIconButton-root modal-paper-close-button"
+                          tabindex="0"
+                          type="button"
+                        >
+                          <span
+                            class="MuiIconButton-label"
+                          >
+                            <svg
+                              class="styles__icon___23x3R"
+                              height="16"
+                              width="16"
+                            >
+                              <use
+                                xlink:href="#test-file-stub"
+                              />
+                            </svg>
+                          </span>
+                          <span
+                            class="MuiTouchRipple-root"
+                          />
+                        </button>
+                        <div
+                          class="eg-reinit-modal"
+                        >
+                          <svg
+                            class="styles__icon___23x3R"
+                            height="63"
+                            width="63"
+                          >
+                            <use
+                              xlink:href="#test-file-stub"
+                            />
+                          </svg>
+                          <div
+                            class="title text-20-bold"
+                          >
+                            ecogesture.reinitModal.title_part1
+                            <span
+                              class="warn-title"
+                            >
+                              ecogesture.reinitModal.title_part2
+                            </span>
+                            ecogesture.reinitModal.title_part3
+                            <span
+                              class="warn-title"
+                            >
+                              ecogesture.reinitModal.title_part4
+                            </span>
+                            ecogesture.reinitModal.title_part5
+                            <span
+                              class="warn-title"
+                            >
+                              ecogesture.reinitModal.title_part6
+                            </span>
+                          </div>
+                          <div
+                            class="text-16-normal text"
+                          >
+                            ecogesture.reinitModal.text1
+                          </div>
+                          <div
+                            class="text-16-bold text"
+                          >
+                            ecogesture.reinitModal.text2
+                          </div>
+                          <div
+                            class="buttons-container"
+                          >
+                            <button
+                              aria-label="ecogesture.reinitModal.btn1"
+                              class="MuiButtonBase-root MuiButton-root btn-secondary-negative MuiButton-text btn1"
+                              tabindex="0"
+                              type="button"
+                            >
+                              <span
+                                class="MuiButton-label text-16-bold"
+                              >
+                                ecogesture.reinitModal.btn1
+                              </span>
+                              <span
+                                class="MuiTouchRipple-root"
+                              />
+                            </button>
+                            <button
+                              aria-label="ecogesture.reinitModal.btn2"
+                              class="MuiButtonBase-root MuiButton-root btn-profile-next rounded MuiButton-text"
+                              tabindex="0"
+                              type="button"
+                            >
+                              <span
+                                class="MuiButton-label text-16-bold"
+                              >
+                                ecogesture.reinitModal.btn2
+                              </span>
+                              <span
+                                class="MuiTouchRipple-root"
+                              />
+                            </button>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+                    <div
+                      data-test="sentinelEnd"
+                      tabindex="0"
+                    />
+                  </div>
+                </body>
+              }
+            >
+              <div
+                className="MuiDialog-root modal-root"
+                onKeyDown={[Function]}
+                role="presentation"
+                style={
+                  Object {
+                    "bottom": 0,
+                    "left": 0,
+                    "position": "fixed",
+                    "right": 0,
+                    "top": 0,
+                    "zIndex": 1300,
+                  }
+                }
+              >
+                <WithStyles(ForwardRef(Backdrop))
+                  onClick={[Function]}
+                  open={true}
+                  transitionDuration={
+                    Object {
+                      "enter": 225,
+                      "exit": 195,
+                    }
+                  }
+                >
+                  <ForwardRef(Backdrop)
+                    classes={
+                      Object {
+                        "invisible": "MuiBackdrop-invisible",
+                        "root": "MuiBackdrop-root",
+                      }
+                    }
+                    onClick={[Function]}
+                    open={true}
+                    transitionDuration={
+                      Object {
+                        "enter": 225,
+                        "exit": 195,
+                      }
+                    }
+                  >
+                    <ForwardRef(Fade)
+                      in={true}
+                      onClick={[Function]}
+                      timeout={
+                        Object {
+                          "enter": 225,
+                          "exit": 195,
+                        }
+                      }
+                    >
+                      <Transition
+                        appear={true}
+                        enter={true}
+                        exit={true}
+                        in={true}
+                        mountOnEnter={false}
+                        onClick={[Function]}
+                        onEnter={[Function]}
+                        onEntered={[Function]}
+                        onEntering={[Function]}
+                        onExit={[Function]}
+                        onExited={[Function]}
+                        onExiting={[Function]}
+                        timeout={
+                          Object {
+                            "enter": 225,
+                            "exit": 195,
+                          }
+                        }
+                        unmountOnExit={false}
+                      >
+                        <div
+                          aria-hidden={true}
+                          className="MuiBackdrop-root"
+                          onClick={[Function]}
+                          style={
+                            Object {
+                              "opacity": 1,
+                              "visibility": undefined,
+                            }
+                          }
+                        />
+                      </Transition>
+                    </ForwardRef(Fade)>
+                  </ForwardRef(Backdrop)>
+                </WithStyles(ForwardRef(Backdrop))>
+                <TrapFocus
+                  disableAutoFocus={false}
+                  disableEnforceFocus={false}
+                  disableRestoreFocus={false}
+                  getDoc={[Function]}
+                  isEnabled={[Function]}
+                  open={true}
+                >
+                  <div
+                    data-test="sentinelStart"
+                    tabIndex={0}
+                  />
+                  <ForwardRef(Fade)
+                    appear={true}
+                    in={true}
+                    onEnter={[Function]}
+                    onExited={[Function]}
+                    role="none presentation"
+                    tabIndex="-1"
+                    timeout={
+                      Object {
+                        "enter": 225,
+                        "exit": 195,
+                      }
+                    }
+                  >
+                    <Transition
+                      appear={true}
+                      enter={true}
+                      exit={true}
+                      in={true}
+                      mountOnEnter={false}
+                      onEnter={[Function]}
+                      onEntered={[Function]}
+                      onEntering={[Function]}
+                      onExit={[Function]}
+                      onExited={[Function]}
+                      onExiting={[Function]}
+                      role="none presentation"
+                      tabIndex="-1"
+                      timeout={
+                        Object {
+                          "enter": 225,
+                          "exit": 195,
+                        }
+                      }
+                      unmountOnExit={false}
+                    >
+                      <div
+                        className="MuiDialog-container MuiDialog-scrollPaper"
+                        onClick={[Function]}
+                        onMouseDown={[Function]}
+                        role="none presentation"
+                        style={
+                          Object {
+                            "opacity": 1,
+                            "visibility": undefined,
+                          }
+                        }
+                        tabIndex="-1"
+                      >
+                        <WithStyles(ForwardRef(Paper))
+                          aria-labelledby="accessibility-title"
+                          className="MuiDialog-paper modal-paper MuiDialog-paperScrollPaper MuiDialog-paperWidthSm"
+                          elevation={24}
+                          role="dialog"
+                        >
+                          <ForwardRef(Paper)
+                            aria-labelledby="accessibility-title"
+                            className="MuiDialog-paper modal-paper MuiDialog-paperScrollPaper MuiDialog-paperWidthSm"
+                            classes={
+                              Object {
+                                "elevation0": "MuiPaper-elevation0",
+                                "elevation1": "MuiPaper-elevation1",
+                                "elevation10": "MuiPaper-elevation10",
+                                "elevation11": "MuiPaper-elevation11",
+                                "elevation12": "MuiPaper-elevation12",
+                                "elevation13": "MuiPaper-elevation13",
+                                "elevation14": "MuiPaper-elevation14",
+                                "elevation15": "MuiPaper-elevation15",
+                                "elevation16": "MuiPaper-elevation16",
+                                "elevation17": "MuiPaper-elevation17",
+                                "elevation18": "MuiPaper-elevation18",
+                                "elevation19": "MuiPaper-elevation19",
+                                "elevation2": "MuiPaper-elevation2",
+                                "elevation20": "MuiPaper-elevation20",
+                                "elevation21": "MuiPaper-elevation21",
+                                "elevation22": "MuiPaper-elevation22",
+                                "elevation23": "MuiPaper-elevation23",
+                                "elevation24": "MuiPaper-elevation24",
+                                "elevation3": "MuiPaper-elevation3",
+                                "elevation4": "MuiPaper-elevation4",
+                                "elevation5": "MuiPaper-elevation5",
+                                "elevation6": "MuiPaper-elevation6",
+                                "elevation7": "MuiPaper-elevation7",
+                                "elevation8": "MuiPaper-elevation8",
+                                "elevation9": "MuiPaper-elevation9",
+                                "outlined": "MuiPaper-outlined",
+                                "root": "MuiPaper-root",
+                                "rounded": "MuiPaper-rounded",
+                              }
+                            }
+                            elevation={24}
+                            role="dialog"
+                          >
+                            <div
+                              aria-labelledby="accessibility-title"
+                              className="MuiPaper-root MuiDialog-paper modal-paper MuiDialog-paperScrollPaper MuiDialog-paperWidthSm MuiPaper-elevation24 MuiPaper-rounded"
+                              role="dialog"
+                            >
+                              <div
+                                id="accessibility-title"
+                              >
+                                feedback.accessibility.window_title
+                              </div>
+                              <WithStyles(ForwardRef(IconButton))
+                                aria-label="feedback.accessibility.button_close"
+                                className="modal-paper-close-button"
+                                onClick={[MockFunction]}
+                              >
+                                <ForwardRef(IconButton)
+                                  aria-label="feedback.accessibility.button_close"
+                                  className="modal-paper-close-button"
+                                  classes={
+                                    Object {
+                                      "colorInherit": "MuiIconButton-colorInherit",
+                                      "colorPrimary": "MuiIconButton-colorPrimary",
+                                      "colorSecondary": "MuiIconButton-colorSecondary",
+                                      "disabled": "Mui-disabled",
+                                      "edgeEnd": "MuiIconButton-edgeEnd",
+                                      "edgeStart": "MuiIconButton-edgeStart",
+                                      "label": "MuiIconButton-label",
+                                      "root": "MuiIconButton-root",
+                                      "sizeSmall": "MuiIconButton-sizeSmall",
+                                    }
+                                  }
+                                  onClick={[MockFunction]}
+                                >
+                                  <WithStyles(ForwardRef(ButtonBase))
+                                    aria-label="feedback.accessibility.button_close"
+                                    centerRipple={true}
+                                    className="MuiIconButton-root modal-paper-close-button"
+                                    disabled={false}
+                                    focusRipple={true}
+                                    onClick={[MockFunction]}
+                                  >
+                                    <ForwardRef(ButtonBase)
+                                      aria-label="feedback.accessibility.button_close"
+                                      centerRipple={true}
+                                      className="MuiIconButton-root modal-paper-close-button"
+                                      classes={
+                                        Object {
+                                          "disabled": "Mui-disabled",
+                                          "focusVisible": "Mui-focusVisible",
+                                          "root": "MuiButtonBase-root",
+                                        }
+                                      }
+                                      disabled={false}
+                                      focusRipple={true}
+                                      onClick={[MockFunction]}
+                                    >
+                                      <button
+                                        aria-label="feedback.accessibility.button_close"
+                                        className="MuiButtonBase-root MuiIconButton-root modal-paper-close-button"
+                                        disabled={false}
+                                        onBlur={[Function]}
+                                        onClick={[MockFunction]}
+                                        onDragLeave={[Function]}
+                                        onFocus={[Function]}
+                                        onKeyDown={[Function]}
+                                        onKeyUp={[Function]}
+                                        onMouseDown={[Function]}
+                                        onMouseLeave={[Function]}
+                                        onMouseUp={[Function]}
+                                        onTouchEnd={[Function]}
+                                        onTouchMove={[Function]}
+                                        onTouchStart={[Function]}
+                                        tabIndex={0}
+                                        type="button"
+                                      >
+                                        <span
+                                          className="MuiIconButton-label"
+                                        >
+                                          <Icon
+                                            icon="test-file-stub"
+                                            size={16}
+                                            spin={false}
+                                          >
+                                            <Component
+                                              className="styles__icon___23x3R"
+                                              height={16}
+                                              style={Object {}}
+                                              width={16}
+                                            >
+                                              <svg
+                                                className="styles__icon___23x3R"
+                                                height={16}
+                                                style={Object {}}
+                                                width={16}
+                                              >
+                                                <use
+                                                  xlinkHref="#test-file-stub"
+                                                />
+                                              </svg>
+                                            </Component>
+                                          </Icon>
+                                        </span>
+                                        <NoSsr>
+                                          <WithStyles(memo)
+                                            center={true}
+                                          >
+                                            <ForwardRef(TouchRipple)
+                                              center={true}
+                                              classes={
+                                                Object {
+                                                  "child": "MuiTouchRipple-child",
+                                                  "childLeaving": "MuiTouchRipple-childLeaving",
+                                                  "childPulsate": "MuiTouchRipple-childPulsate",
+                                                  "ripple": "MuiTouchRipple-ripple",
+                                                  "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                  "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                  "root": "MuiTouchRipple-root",
+                                                }
+                                              }
+                                            >
+                                              <span
+                                                className="MuiTouchRipple-root"
+                                              >
+                                                <TransitionGroup
+                                                  childFactory={[Function]}
+                                                  component={null}
+                                                  exit={true}
+                                                />
+                                              </span>
+                                            </ForwardRef(TouchRipple)>
+                                          </WithStyles(memo)>
+                                        </NoSsr>
+                                      </button>
+                                    </ForwardRef(ButtonBase)>
+                                  </WithStyles(ForwardRef(ButtonBase))>
+                                </ForwardRef(IconButton)>
+                              </WithStyles(ForwardRef(IconButton))>
+                              <div
+                                className="eg-reinit-modal"
+                              >
+                                <Icon
+                                  icon="test-file-stub"
+                                  size={63}
+                                  spin={false}
+                                >
+                                  <Component
+                                    className="styles__icon___23x3R"
+                                    height={63}
+                                    style={Object {}}
+                                    width={63}
+                                  >
+                                    <svg
+                                      className="styles__icon___23x3R"
+                                      height={63}
+                                      style={Object {}}
+                                      width={63}
+                                    >
+                                      <use
+                                        xlinkHref="#test-file-stub"
+                                      />
+                                    </svg>
+                                  </Component>
+                                </Icon>
+                                <div
+                                  className="title text-20-bold"
+                                >
+                                  ecogesture.reinitModal.title_part1
+                                  <span
+                                    className="warn-title"
+                                  >
+                                    ecogesture.reinitModal.title_part2
+                                  </span>
+                                  ecogesture.reinitModal.title_part3
+                                  <span
+                                    className="warn-title"
+                                  >
+                                    ecogesture.reinitModal.title_part4
+                                  </span>
+                                  ecogesture.reinitModal.title_part5
+                                  <span
+                                    className="warn-title"
+                                  >
+                                    ecogesture.reinitModal.title_part6
+                                  </span>
+                                </div>
+                                <div
+                                  className="text-16-normal text"
+                                >
+                                  ecogesture.reinitModal.text1
+                                </div>
+                                <div
+                                  className="text-16-bold text"
+                                >
+                                  ecogesture.reinitModal.text2
+                                </div>
+                                <div
+                                  className="buttons-container"
+                                >
+                                  <WithStyles(ForwardRef(Button))
+                                    aria-label="ecogesture.reinitModal.btn1"
+                                    className="btn1"
+                                    classes={
+                                      Object {
+                                        "label": "text-16-bold",
+                                        "root": "btn-secondary-negative",
+                                      }
+                                    }
+                                    onClick={[MockFunction]}
+                                  >
+                                    <ForwardRef(Button)
+                                      aria-label="ecogesture.reinitModal.btn1"
+                                      className="btn1"
+                                      classes={
+                                        Object {
+                                          "colorInherit": "MuiButton-colorInherit",
+                                          "contained": "MuiButton-contained",
+                                          "containedPrimary": "MuiButton-containedPrimary",
+                                          "containedSecondary": "MuiButton-containedSecondary",
+                                          "containedSizeLarge": "MuiButton-containedSizeLarge",
+                                          "containedSizeSmall": "MuiButton-containedSizeSmall",
+                                          "disableElevation": "MuiButton-disableElevation",
+                                          "disabled": "Mui-disabled",
+                                          "endIcon": "MuiButton-endIcon",
+                                          "focusVisible": "Mui-focusVisible",
+                                          "fullWidth": "MuiButton-fullWidth",
+                                          "iconSizeLarge": "MuiButton-iconSizeLarge",
+                                          "iconSizeMedium": "MuiButton-iconSizeMedium",
+                                          "iconSizeSmall": "MuiButton-iconSizeSmall",
+                                          "label": "MuiButton-label text-16-bold",
+                                          "outlined": "MuiButton-outlined",
+                                          "outlinedPrimary": "MuiButton-outlinedPrimary",
+                                          "outlinedSecondary": "MuiButton-outlinedSecondary",
+                                          "outlinedSizeLarge": "MuiButton-outlinedSizeLarge",
+                                          "outlinedSizeSmall": "MuiButton-outlinedSizeSmall",
+                                          "root": "MuiButton-root btn-secondary-negative",
+                                          "sizeLarge": "MuiButton-sizeLarge",
+                                          "sizeSmall": "MuiButton-sizeSmall",
+                                          "startIcon": "MuiButton-startIcon",
+                                          "text": "MuiButton-text",
+                                          "textPrimary": "MuiButton-textPrimary",
+                                          "textSecondary": "MuiButton-textSecondary",
+                                          "textSizeLarge": "MuiButton-textSizeLarge",
+                                          "textSizeSmall": "MuiButton-textSizeSmall",
+                                        }
+                                      }
+                                      onClick={[MockFunction]}
+                                    >
+                                      <WithStyles(ForwardRef(ButtonBase))
+                                        aria-label="ecogesture.reinitModal.btn1"
+                                        className="MuiButton-root btn-secondary-negative MuiButton-text btn1"
+                                        component="button"
+                                        disabled={false}
+                                        focusRipple={true}
+                                        focusVisibleClassName="Mui-focusVisible"
+                                        onClick={[MockFunction]}
+                                        type="button"
+                                      >
+                                        <ForwardRef(ButtonBase)
+                                          aria-label="ecogesture.reinitModal.btn1"
+                                          className="MuiButton-root btn-secondary-negative MuiButton-text btn1"
+                                          classes={
+                                            Object {
+                                              "disabled": "Mui-disabled",
+                                              "focusVisible": "Mui-focusVisible",
+                                              "root": "MuiButtonBase-root",
+                                            }
+                                          }
+                                          component="button"
+                                          disabled={false}
+                                          focusRipple={true}
+                                          focusVisibleClassName="Mui-focusVisible"
+                                          onClick={[MockFunction]}
+                                          type="button"
+                                        >
+                                          <button
+                                            aria-label="ecogesture.reinitModal.btn1"
+                                            className="MuiButtonBase-root MuiButton-root btn-secondary-negative MuiButton-text btn1"
+                                            disabled={false}
+                                            onBlur={[Function]}
+                                            onClick={[MockFunction]}
+                                            onDragLeave={[Function]}
+                                            onFocus={[Function]}
+                                            onKeyDown={[Function]}
+                                            onKeyUp={[Function]}
+                                            onMouseDown={[Function]}
+                                            onMouseLeave={[Function]}
+                                            onMouseUp={[Function]}
+                                            onTouchEnd={[Function]}
+                                            onTouchMove={[Function]}
+                                            onTouchStart={[Function]}
+                                            tabIndex={0}
+                                            type="button"
+                                          >
+                                            <span
+                                              className="MuiButton-label text-16-bold"
+                                            >
+                                              ecogesture.reinitModal.btn1
+                                            </span>
+                                            <NoSsr>
+                                              <WithStyles(memo)
+                                                center={false}
+                                              >
+                                                <ForwardRef(TouchRipple)
+                                                  center={false}
+                                                  classes={
+                                                    Object {
+                                                      "child": "MuiTouchRipple-child",
+                                                      "childLeaving": "MuiTouchRipple-childLeaving",
+                                                      "childPulsate": "MuiTouchRipple-childPulsate",
+                                                      "ripple": "MuiTouchRipple-ripple",
+                                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                      "root": "MuiTouchRipple-root",
+                                                    }
+                                                  }
+                                                >
+                                                  <span
+                                                    className="MuiTouchRipple-root"
+                                                  >
+                                                    <TransitionGroup
+                                                      childFactory={[Function]}
+                                                      component={null}
+                                                      exit={true}
+                                                    />
+                                                  </span>
+                                                </ForwardRef(TouchRipple)>
+                                              </WithStyles(memo)>
+                                            </NoSsr>
+                                          </button>
+                                        </ForwardRef(ButtonBase)>
+                                      </WithStyles(ForwardRef(ButtonBase))>
+                                    </ForwardRef(Button)>
+                                  </WithStyles(ForwardRef(Button))>
+                                  <WithStyles(ForwardRef(Button))
+                                    aria-label="ecogesture.reinitModal.btn2"
+                                    classes={
+                                      Object {
+                                        "label": "text-16-bold",
+                                        "root": "btn-profile-next rounded",
+                                      }
+                                    }
+                                    onClick={[MockFunction]}
+                                  >
+                                    <ForwardRef(Button)
+                                      aria-label="ecogesture.reinitModal.btn2"
+                                      classes={
+                                        Object {
+                                          "colorInherit": "MuiButton-colorInherit",
+                                          "contained": "MuiButton-contained",
+                                          "containedPrimary": "MuiButton-containedPrimary",
+                                          "containedSecondary": "MuiButton-containedSecondary",
+                                          "containedSizeLarge": "MuiButton-containedSizeLarge",
+                                          "containedSizeSmall": "MuiButton-containedSizeSmall",
+                                          "disableElevation": "MuiButton-disableElevation",
+                                          "disabled": "Mui-disabled",
+                                          "endIcon": "MuiButton-endIcon",
+                                          "focusVisible": "Mui-focusVisible",
+                                          "fullWidth": "MuiButton-fullWidth",
+                                          "iconSizeLarge": "MuiButton-iconSizeLarge",
+                                          "iconSizeMedium": "MuiButton-iconSizeMedium",
+                                          "iconSizeSmall": "MuiButton-iconSizeSmall",
+                                          "label": "MuiButton-label text-16-bold",
+                                          "outlined": "MuiButton-outlined",
+                                          "outlinedPrimary": "MuiButton-outlinedPrimary",
+                                          "outlinedSecondary": "MuiButton-outlinedSecondary",
+                                          "outlinedSizeLarge": "MuiButton-outlinedSizeLarge",
+                                          "outlinedSizeSmall": "MuiButton-outlinedSizeSmall",
+                                          "root": "MuiButton-root btn-profile-next rounded",
+                                          "sizeLarge": "MuiButton-sizeLarge",
+                                          "sizeSmall": "MuiButton-sizeSmall",
+                                          "startIcon": "MuiButton-startIcon",
+                                          "text": "MuiButton-text",
+                                          "textPrimary": "MuiButton-textPrimary",
+                                          "textSecondary": "MuiButton-textSecondary",
+                                          "textSizeLarge": "MuiButton-textSizeLarge",
+                                          "textSizeSmall": "MuiButton-textSizeSmall",
+                                        }
+                                      }
+                                      onClick={[MockFunction]}
+                                    >
+                                      <WithStyles(ForwardRef(ButtonBase))
+                                        aria-label="ecogesture.reinitModal.btn2"
+                                        className="MuiButton-root btn-profile-next rounded MuiButton-text"
+                                        component="button"
+                                        disabled={false}
+                                        focusRipple={true}
+                                        focusVisibleClassName="Mui-focusVisible"
+                                        onClick={[MockFunction]}
+                                        type="button"
+                                      >
+                                        <ForwardRef(ButtonBase)
+                                          aria-label="ecogesture.reinitModal.btn2"
+                                          className="MuiButton-root btn-profile-next rounded MuiButton-text"
+                                          classes={
+                                            Object {
+                                              "disabled": "Mui-disabled",
+                                              "focusVisible": "Mui-focusVisible",
+                                              "root": "MuiButtonBase-root",
+                                            }
+                                          }
+                                          component="button"
+                                          disabled={false}
+                                          focusRipple={true}
+                                          focusVisibleClassName="Mui-focusVisible"
+                                          onClick={[MockFunction]}
+                                          type="button"
+                                        >
+                                          <button
+                                            aria-label="ecogesture.reinitModal.btn2"
+                                            className="MuiButtonBase-root MuiButton-root btn-profile-next rounded MuiButton-text"
+                                            disabled={false}
+                                            onBlur={[Function]}
+                                            onClick={[MockFunction]}
+                                            onDragLeave={[Function]}
+                                            onFocus={[Function]}
+                                            onKeyDown={[Function]}
+                                            onKeyUp={[Function]}
+                                            onMouseDown={[Function]}
+                                            onMouseLeave={[Function]}
+                                            onMouseUp={[Function]}
+                                            onTouchEnd={[Function]}
+                                            onTouchMove={[Function]}
+                                            onTouchStart={[Function]}
+                                            tabIndex={0}
+                                            type="button"
+                                          >
+                                            <span
+                                              className="MuiButton-label text-16-bold"
+                                            >
+                                              ecogesture.reinitModal.btn2
+                                            </span>
+                                            <NoSsr>
+                                              <WithStyles(memo)
+                                                center={false}
+                                              >
+                                                <ForwardRef(TouchRipple)
+                                                  center={false}
+                                                  classes={
+                                                    Object {
+                                                      "child": "MuiTouchRipple-child",
+                                                      "childLeaving": "MuiTouchRipple-childLeaving",
+                                                      "childPulsate": "MuiTouchRipple-childPulsate",
+                                                      "ripple": "MuiTouchRipple-ripple",
+                                                      "ripplePulsate": "MuiTouchRipple-ripplePulsate",
+                                                      "rippleVisible": "MuiTouchRipple-rippleVisible",
+                                                      "root": "MuiTouchRipple-root",
+                                                    }
+                                                  }
+                                                >
+                                                  <span
+                                                    className="MuiTouchRipple-root"
+                                                  >
+                                                    <TransitionGroup
+                                                      childFactory={[Function]}
+                                                      component={null}
+                                                      exit={true}
+                                                    />
+                                                  </span>
+                                                </ForwardRef(TouchRipple)>
+                                              </WithStyles(memo)>
+                                            </NoSsr>
+                                          </button>
+                                        </ForwardRef(ButtonBase)>
+                                      </WithStyles(ForwardRef(ButtonBase))>
+                                    </ForwardRef(Button)>
+                                  </WithStyles(ForwardRef(Button))>
+                                </div>
+                              </div>
+                            </div>
+                          </ForwardRef(Paper)>
+                        </WithStyles(ForwardRef(Paper))>
+                      </div>
+                    </Transition>
+                  </ForwardRef(Fade)>
+                  <div
+                    data-test="sentinelEnd"
+                    tabIndex={0}
+                  />
+                </TrapFocus>
+              </div>
+            </Portal>
+          </ForwardRef(Portal)>
+        </ForwardRef(Modal)>
+      </ForwardRef(Dialog)>
+    </WithStyles(ForwardRef(Dialog))>
+  </EcogestureReinitModal>
+</Provider>
+`;
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap
index a438baf66a1755b3470bab2b62e3fb1b59f1502a..32c9365cd3446fe235df5db765ea157aaba4e915 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap
@@ -565,6 +565,7 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
           role="tabpanel"
         >
           <EcogestureEmptyList
+            handleReinitClick={[Function]}
             isObjective={true}
             isSelectionDone={false}
             setTab={[Function]}
@@ -904,6 +905,7 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
           role="tabpanel"
         >
           <EcogestureEmptyList
+            handleReinitClick={[Function]}
             isObjective={false}
             isSelectionDone={false}
             setTab={[Function]}
@@ -1244,6 +1246,8 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
         >
           <mock-ecogesturelist
             displaySelection={false}
+            handleReinitClick={[Function]}
+            index={2}
             list={
               Array [
                 Object {
diff --git a/src/components/Ecogesture/ecogestureEmptyList.scss b/src/components/Ecogesture/ecogestureEmptyList.scss
index 56ec9b82958fa9e5272625c59018612b5393ac4d..08a6ade8e032f81643da044b480f9e24a7b9eb96 100644
--- a/src/components/Ecogesture/ecogestureEmptyList.scss
+++ b/src/components/Ecogesture/ecogestureEmptyList.scss
@@ -25,5 +25,8 @@
         margin-left: 1rem;
       }
     }
+    .reinit-button {
+      margin-left: 15px;
+    }
   }
 }
diff --git a/src/components/Ecogesture/ecogestureList.scss b/src/components/Ecogesture/ecogestureList.scss
index 07b207a0f9df5e8d05bf12e8f7f662c968718ec2..501534cc2b6d0885885cd91ee5164a26d521aa3e 100644
--- a/src/components/Ecogesture/ecogestureList.scss
+++ b/src/components/Ecogesture/ecogestureList.scss
@@ -29,9 +29,6 @@
       color: white;
       text-align: center;
       margin: 1rem auto;
-      @media #{$large-phone} {
-        margin: 1rem 0;
-      }
       button.btn-highlight {
         padding: 0.625rem;
       }
@@ -178,7 +175,7 @@ div.filter-menu {
   }
 }
 .filter-menu-list li {
-  color: white;
+  color: $white;
   text-transform: initial;
   font-family: $text-font;
   &.item-active {
@@ -189,3 +186,17 @@ div.filter-menu {
   margin-left: auto;
   min-width: 0;
 }
+.reinit-button {
+  background: transparent;
+  border: 1px solid $white-light;
+  border-radius: 2px;
+  margin: 20px 6px;
+  padding: 3px;
+  width: 100%;
+  cursor: pointer;
+  span {
+    color: $white;
+    display: inline-block;
+    max-width: 200px;
+  }
+}
diff --git a/src/components/Ecogesture/ecogestureReinitModal.scss b/src/components/Ecogesture/ecogestureReinitModal.scss
new file mode 100644
index 0000000000000000000000000000000000000000..a73ec8a1c8f733a2f3253102806b6c692c012ab3
--- /dev/null
+++ b/src/components/Ecogesture/ecogestureReinitModal.scss
@@ -0,0 +1,28 @@
+@import '../../styles/base/color';
+
+.eg-reinit-modal {
+  color: $grey-bright;
+  margin: 1rem 0;
+  text-align: center;
+  .title {
+    color: $white;
+  }
+  .warn-title {
+    color: $orange;
+    margin: 0 0.3rem;
+  }
+  .text {
+    margin: 1rem 0;
+    text-align: left;
+  }
+  .buttons-container {
+    display: flex;
+    button {
+      min-height: 45px;
+      cursor: pointer;
+    }
+    button.btn1 {
+      margin-right: 1rem;
+    }
+  }
+}
diff --git a/src/components/EcogestureForm/EcogestureFormEquipment.spec.tsx b/src/components/EcogestureForm/EcogestureFormEquipment.spec.tsx
index b03d7b959c22cd28e74a599f9bde95b6dc2b29a9..536dcb3817aa92add426165d4cde497eb1c7d746 100644
--- a/src/components/EcogestureForm/EcogestureFormEquipment.spec.tsx
+++ b/src/components/EcogestureForm/EcogestureFormEquipment.spec.tsx
@@ -10,6 +10,7 @@ import { waitForComponentToPaint } from '../../../tests/__mocks__/testUtils'
 import EcogestureFormEquipment from './EcogestureFormEquipment'
 import { mockProfileEcogesture } from '../../../tests/__mocks__/profileEcogesture.mock'
 import { Button } from '@material-ui/core'
+import { mockInitialEcolyoState } from '../../../tests/__mocks__/store'
 
 jest.mock('cozy-ui/transpiled/react/I18n', () => {
   return {
@@ -22,6 +23,7 @@ jest.mock('cozy-ui/transpiled/react/I18n', () => {
 })
 const mockStore = configureStore([])
 const mockSetPreviousStep = jest.fn()
+const useSelectorSpy = jest.spyOn(reactRedux, 'useSelector')
 
 const mockHistoryPush = jest.fn()
 jest.mock('react-router-dom', () => ({
@@ -34,6 +36,10 @@ jest.mock('./EquipmentIcon', () => 'mock-equipment-icon')
 const mockUseDispatch = jest.spyOn(reactRedux, 'useDispatch')
 
 describe('EcogestureFormEquipment component', () => {
+  useSelectorSpy.mockReturnValue({
+    ...mockInitialEcolyoState.profile,
+  })
+
   it('should be rendered correctly', async () => {
     const store = mockStore({
       ecolyo: {
@@ -46,6 +52,8 @@ describe('EcogestureFormEquipment component', () => {
         <EcogestureFormEquipment
           profileEcogesture={mockProfileEcogesture}
           setPreviousStep={mockSetPreviousStep}
+          setNextStep={jest.fn()}
+          step={0}
         />
       </Provider>
     )
@@ -66,6 +74,8 @@ describe('EcogestureFormEquipment component', () => {
         <EcogestureFormEquipment
           profileEcogesture={mockProfileEcogesture}
           setPreviousStep={mockSetPreviousStep}
+          setNextStep={jest.fn()}
+          step={0}
         />
       </Provider>
     )
@@ -89,6 +99,8 @@ describe('EcogestureFormEquipment component', () => {
         <EcogestureFormEquipment
           profileEcogesture={mockProfileEcogesture}
           setPreviousStep={mockSetPreviousStep}
+          setNextStep={jest.fn()}
+          step={0}
         />
       </Provider>
     )
@@ -130,6 +142,8 @@ describe('EcogestureFormEquipment component', () => {
         <EcogestureFormEquipment
           profileEcogesture={mockProfileEcogesture}
           setPreviousStep={mockSetPreviousStep}
+          setNextStep={jest.fn()}
+          step={0}
         />
       </Provider>
     )
diff --git a/src/components/EcogestureForm/EcogestureFormEquipment.tsx b/src/components/EcogestureForm/EcogestureFormEquipment.tsx
index 6d5d656fc0f5e4de2b6910ca6b56eeed74952767..857f575a6383a374013fd4145c76611ee1317532 100644
--- a/src/components/EcogestureForm/EcogestureFormEquipment.tsx
+++ b/src/components/EcogestureForm/EcogestureFormEquipment.tsx
@@ -8,34 +8,50 @@ import { EquipmentType } from 'enum/ecogesture.enum'
 import EquipmentIcon from './EquipmentIcon'
 import './ecogestureFormEquipment.scss'
 import { newProfileEcogestureEntry } from 'store/profileEcogesture/profileEcogesture.actions'
-import { useDispatch } from 'react-redux'
+import { useDispatch, useSelector } from 'react-redux'
 import { updateProfile } from 'store/profile/profile.actions'
 import { useHistory } from 'react-router-dom'
+import { ProfileTypeStepForm } from 'enum/profileType.enum'
+import { AppStore } from 'store'
 
 interface EcogestureFormEquipmentProps {
   profileEcogesture: ProfileEcogesture
   setPreviousStep: Function
+  setNextStep?: Function
+  step: ProfileTypeStepForm | EcogestureStepForm
 }
 
 const EcogestureFormEquipment: React.FC<EcogestureFormEquipmentProps> = ({
   profileEcogesture,
   setPreviousStep,
+  setNextStep,
+  step,
 }: EcogestureFormEquipmentProps) => {
   const { t } = useI18n()
   const dispatch = useDispatch()
   const history = useHistory()
-  const [answer, setAnswer] = useState<string[]>([])
+  const { isProfileEcogestureCompleted } = useSelector(
+    (state: AppStore) => state.ecolyo.profile
+  )
+  const [answer, setAnswer] = useState<string[]>(
+    isProfileEcogestureCompleted ? profileEcogesture.equipments : []
+  )
 
   const handlePrevious = useCallback(() => {
     setPreviousStep(profileEcogesture)
   }, [profileEcogesture, setPreviousStep])
 
-  const handleFinish = useCallback(() => {
+  const handleNext = useCallback(() => {
     profileEcogesture.equipments = answer as EquipmentType[]
     dispatch(newProfileEcogestureEntry(profileEcogesture))
-    dispatch(updateProfile({ isProfileEcogestureCompleted: true }))
-    history.push('/ecogesture-selection')
-  }, [profileEcogesture, answer, dispatch, history])
+    // Check if gestureForm is used from Big profile or small profile
+    if (setNextStep) {
+      setNextStep()
+    } else {
+      dispatch(updateProfile({ isProfileEcogestureCompleted: true }))
+      history.push('/ecogesture-selection')
+    }
+  }, [profileEcogesture, setNextStep, answer, dispatch, history])
 
   const isChecked = useCallback(
     (value: string): boolean => {
@@ -103,9 +119,9 @@ const EcogestureFormEquipment: React.FC<EcogestureFormEquipmentProps> = ({
         </div>
       </div>
       <FormNavigation
-        step={EcogestureStepForm.EQUIPMENTS}
+        step={step}
         handlePrevious={handlePrevious}
-        handleNext={handleFinish}
+        handleNext={handleNext}
         disableNextButton={answer === []}
         isEcogesture={true}
       />
diff --git a/src/components/EcogestureForm/EcogestureFormSingleChoice.tsx b/src/components/EcogestureForm/EcogestureFormSingleChoice.tsx
index 790e0b4dbe99bd6bf5c6d7aa41d6d8ef96225bb1..7fa2f94474fc34ced9ad17b5605e9a120fe16f28 100644
--- a/src/components/EcogestureForm/EcogestureFormSingleChoice.tsx
+++ b/src/components/EcogestureForm/EcogestureFormSingleChoice.tsx
@@ -10,6 +10,8 @@ import {
   ProfileEcogestureAnswerChoices,
 } from 'models/profileEcogesture.model'
 import './ecogestureFormSingleChoice.scss'
+import { useSelector } from 'react-redux'
+import { AppStore } from 'store'
 interface EcogestureFormSingleChoiceProps {
   step: EcogestureStepForm
   viewedStep: EcogestureStepForm
@@ -28,7 +30,12 @@ const EcogestureFormSingleChoice: React.FC<EcogestureFormSingleChoiceProps> = ({
   setPrevioustStep,
 }: EcogestureFormSingleChoiceProps) => {
   const { t } = useI18n()
-  const [answer, setAnswer] = useState<ProfileEcogestureAnswerChoices>('')
+  const { isProfileEcogestureCompleted } = useSelector(
+    (state: AppStore) => state.ecolyo.profile
+  )
+  const [answer, setAnswer] = useState<ProfileEcogestureAnswerChoices>(
+    isProfileEcogestureCompleted ? profileEcogesture[answerType.attribute] : ''
+  )
 
   const handlePrevious = useCallback(() => {
     setPrevioustStep(profileEcogesture)
diff --git a/src/components/EcogestureForm/EcogestureFormView.spec.tsx b/src/components/EcogestureForm/EcogestureFormView.spec.tsx
index e3e0cbce3cc84773501f7aa58d87eb5de7631303..7dfa7f922b5d8feaaf630112efdb69031dce99f6 100644
--- a/src/components/EcogestureForm/EcogestureFormView.spec.tsx
+++ b/src/components/EcogestureForm/EcogestureFormView.spec.tsx
@@ -29,10 +29,6 @@ jest.mock(
   'components/EcogestureForm/EcogestureLaunchFormModal',
   () => 'mock-ecogesturelaunchmodal'
 )
-jest.mock(
-  'components/EcogestureForm/EcogestureFormEquipment',
-  () => 'mock-ecogestureformequipment'
-)
 jest.mock('components/Content/Content', () => 'mock-content')
 
 jest.mock('react-router-dom', () => ({
@@ -68,7 +64,7 @@ describe('EcogestureFormView component', () => {
     await waitForComponentToPaint(wrapper)
     expect(wrapper.find('.ecogesture-form-single').exists()).toBeTruthy()
   })
-  it('should render equipment step because profiletype is completed', async () => {
+  it('should render profiletype form step because profiletype is completed', async () => {
     const updatedProfile: Profile = {
       ...mockInitialEcolyoState.profile,
       isProfileTypeCompleted: true,
@@ -80,12 +76,7 @@ describe('EcogestureFormView component', () => {
       </Provider>
     )
     await waitForComponentToPaint(wrapper)
-    expect(
-      wrapper
-        .find('mock-ecogestureformequipment')
-        .first()
-        .exists()
-    ).toBeTruthy()
+    expect(wrapper.find('.profile-type-container').exists()).toBeTruthy()
   })
   it('should go to next step', async () => {
     const wrapper = mount(
diff --git a/src/components/EcogestureForm/EcogestureFormView.tsx b/src/components/EcogestureForm/EcogestureFormView.tsx
index 5f5e80505c237c999e1c997f552b553369a1d520..18812975d292be79358555e9dd838169b6e434ae 100644
--- a/src/components/EcogestureForm/EcogestureFormView.tsx
+++ b/src/components/EcogestureForm/EcogestureFormView.tsx
@@ -15,14 +15,16 @@ import {
   ProfileEcogesture,
   ProfileEcogestureAnswer,
 } from 'models/profileEcogesture.model'
-import { Profile, ProfileType } from 'models'
+import { Profile } from 'models'
 import ProfileEcogestureFormService from 'services/profileEcogestureForm.service'
 import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
 import { FluidType } from 'enum/fluid.enum'
 import './ecogestureFormView.scss'
-import { useLocation } from 'react-router-dom'
+import { useHistory, useLocation } from 'react-router-dom'
+import ProfileTypeView from 'components/ProfileType/ProfileTypeView'
 
 const EcogestureFormView: React.FC = () => {
+  const history = useHistory()
   const [headerHeight, setHeaderHeight] = useState<number>(0)
   const defineHeaderHeight = (height: number) => {
     setHeaderHeight(height)
@@ -33,9 +35,6 @@ const EcogestureFormView: React.FC = () => {
   const curProfileEcogesture: ProfileEcogesture = useSelector(
     (state: AppStore) => state.ecolyo.profileEcogesture
   )
-  const profileType: ProfileType = useSelector(
-    (state: AppStore) => state.ecolyo.profileType
-  )
   const shouldOpenModal = new URLSearchParams(useLocation().search).get('modal')
   const [step, setStep] = useState<EcogestureStepForm>(
     EcogestureStepForm.HEATING_TYPE
@@ -64,12 +63,12 @@ const EcogestureFormView: React.FC = () => {
         setViewedStep(nextStep)
       }
       const _answerType: ProfileEcogestureAnswer = ProfileEcogestureFormService.getAnswerForStep(
-        isProfileTypeCompleted ? EcogestureStepForm.EQUIPMENTS : nextStep
+        nextStep
       )
       setAnswerType(_answerType)
       setStep(nextStep)
     },
-    [isProfileTypeCompleted, step, viewedStep]
+    [step, viewedStep]
   )
   const setPreviousStep = useCallback(
     (_profileEcogesture: ProfileEcogesture) => {
@@ -87,27 +86,12 @@ const EcogestureFormView: React.FC = () => {
   )
 
   useEffect(() => {
-    let subscribed = true
-    if (isProfileTypeCompleted) {
-      if (subscribed) {
-        curProfileEcogesture.heating = profileType.heating
-        curProfileEcogesture.hotWater = profileType.hotWater
-        curProfileEcogesture.warmingFluid = profileType.warmingFluid
-        setStep(EcogestureStepForm.EQUIPMENTS)
-      }
-    }
     const _answerType: ProfileEcogestureAnswer = ProfileEcogestureFormService.getAnswerForStep(
-      isProfileTypeCompleted ? EcogestureStepForm.EQUIPMENTS : step
+      step
     )
     setAnswerType(_answerType)
-    if (subscribed) {
-      setAnswerType(_answerType)
-      setIsLoading(false)
-    }
-    return () => {
-      subscribed = false
-    }
-  }, [step, curProfileEcogesture, isProfileTypeCompleted, profileType])
+    setIsLoading(false)
+  }, [step])
 
   if (isLoading) {
     return (
@@ -126,21 +110,30 @@ const EcogestureFormView: React.FC = () => {
         desktopTitleKey={'common.title_ecogestures'}
       ></Header>
       <Content height={headerHeight}>
-        {step === EcogestureStepForm.EQUIPMENTS && (
-          <EcogestureFormEquipment
-            profileEcogesture={profileEcogesture}
-            setPreviousStep={setPreviousStep}
-          />
-        )}
-        {step !== EcogestureStepForm.EQUIPMENTS && (
-          <EcogestureFormSingleChoice
-            step={step}
-            viewedStep={viewedStep}
-            profileEcogesture={profileEcogesture}
-            answerType={answerType}
-            setNextStep={setNextStep}
-            setPrevioustStep={setPreviousStep}
+        {isProfileTypeCompleted ? (
+          <ProfileTypeView
+            handleEnd={() => history.push('/ecogesture-selection')}
           />
+        ) : (
+          <>
+            {step === EcogestureStepForm.EQUIPMENTS && (
+              <EcogestureFormEquipment
+                step={EcogestureStepForm.EQUIPMENTS}
+                profileEcogesture={profileEcogesture}
+                setPreviousStep={setPreviousStep}
+              />
+            )}
+            {step !== EcogestureStepForm.EQUIPMENTS && (
+              <EcogestureFormSingleChoice
+                step={step}
+                viewedStep={viewedStep}
+                profileEcogesture={profileEcogesture}
+                answerType={answerType}
+                setNextStep={setNextStep}
+                setPrevioustStep={setPreviousStep}
+              />
+            )}
+          </>
         )}
       </Content>
       <EcogestureLaunchFormModal
diff --git a/src/components/EcogestureForm/__snapshots__/EcogestureFormEquipment.spec.tsx.snap b/src/components/EcogestureForm/__snapshots__/EcogestureFormEquipment.spec.tsx.snap
index 26e73e2ed207751330783f75d9d96753f0bf4c5c..8d8812b8b13da3ff901bfff8ed673c388ac52ad4 100644
--- a/src/components/EcogestureForm/__snapshots__/EcogestureFormEquipment.spec.tsx.snap
+++ b/src/components/EcogestureForm/__snapshots__/EcogestureFormEquipment.spec.tsx.snap
@@ -22,7 +22,9 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
         "warmingFluid": 0,
       }
     }
+    setNextStep={[MockFunction]}
     setPreviousStep={[MockFunction]}
+    step={0}
   >
     <div
       className="ecogesture-profile-container"
@@ -305,7 +307,7 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
         handleNext={[Function]}
         handlePrevious={[Function]}
         isEcogesture={true}
-        step={3}
+        step={0}
       >
         <div
           className="profile-navigation"
@@ -319,7 +321,7 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
                 "root": "btn-profile-back",
               }
             }
-            disabled={false}
+            disabled={true}
             onClick={[Function]}
           >
             <ForwardRef(Button)
@@ -358,14 +360,14 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
                   "textSizeSmall": "MuiButton-textSizeSmall",
                 }
               }
-              disabled={false}
+              disabled={true}
               onClick={[Function]}
             >
               <WithStyles(ForwardRef(ButtonBase))
                 aria-label="profile_type.accessibility.button_previous"
-                className="MuiButton-root btn-profile-back MuiButton-text profile-navigation-button"
+                className="MuiButton-root btn-profile-back MuiButton-text profile-navigation-button Mui-disabled"
                 component="button"
-                disabled={false}
+                disabled={true}
                 focusRipple={true}
                 focusVisibleClassName="Mui-focusVisible"
                 onClick={[Function]}
@@ -373,7 +375,7 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
               >
                 <ForwardRef(ButtonBase)
                   aria-label="profile_type.accessibility.button_previous"
-                  className="MuiButton-root btn-profile-back MuiButton-text profile-navigation-button"
+                  className="MuiButton-root btn-profile-back MuiButton-text profile-navigation-button Mui-disabled"
                   classes={
                     Object {
                       "disabled": "Mui-disabled",
@@ -382,7 +384,7 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
                     }
                   }
                   component="button"
-                  disabled={false}
+                  disabled={true}
                   focusRipple={true}
                   focusVisibleClassName="Mui-focusVisible"
                   onClick={[Function]}
@@ -390,8 +392,8 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
                 >
                   <button
                     aria-label="profile_type.accessibility.button_previous"
-                    className="MuiButtonBase-root MuiButton-root btn-profile-back MuiButton-text profile-navigation-button"
-                    disabled={false}
+                    className="MuiButtonBase-root MuiButton-root btn-profile-back MuiButton-text profile-navigation-button Mui-disabled Mui-disabled"
+                    disabled={true}
                     onBlur={[Function]}
                     onClick={[Function]}
                     onDragLeave={[Function]}
@@ -404,7 +406,7 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
                     onTouchEnd={[Function]}
                     onTouchMove={[Function]}
                     onTouchStart={[Function]}
-                    tabIndex={0}
+                    tabIndex={-1}
                     type="button"
                   >
                     <span
@@ -412,43 +414,13 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
                     >
                       &lt; profile_type.form.button_previous
                     </span>
-                    <NoSsr>
-                      <WithStyles(memo)
-                        center={false}
-                      >
-                        <ForwardRef(TouchRipple)
-                          center={false}
-                          classes={
-                            Object {
-                              "child": "MuiTouchRipple-child",
-                              "childLeaving": "MuiTouchRipple-childLeaving",
-                              "childPulsate": "MuiTouchRipple-childPulsate",
-                              "ripple": "MuiTouchRipple-ripple",
-                              "ripplePulsate": "MuiTouchRipple-ripplePulsate",
-                              "rippleVisible": "MuiTouchRipple-rippleVisible",
-                              "root": "MuiTouchRipple-root",
-                            }
-                          }
-                        >
-                          <span
-                            className="MuiTouchRipple-root"
-                          >
-                            <TransitionGroup
-                              childFactory={[Function]}
-                              component={null}
-                              exit={true}
-                            />
-                          </span>
-                        </ForwardRef(TouchRipple)>
-                      </WithStyles(memo)>
-                    </NoSsr>
                   </button>
                 </ForwardRef(ButtonBase)>
               </WithStyles(ForwardRef(ButtonBase))>
             </ForwardRef(Button)>
           </WithStyles(ForwardRef(Button))>
           <WithStyles(ForwardRef(Button))
-            aria-label="profile_type.accessibility.button_end"
+            aria-label="profile_type.accessibility.button_next"
             className="profile-navigation-button"
             classes={
               Object {
@@ -460,7 +432,7 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
             onClick={[Function]}
           >
             <ForwardRef(Button)
-              aria-label="profile_type.accessibility.button_end"
+              aria-label="profile_type.accessibility.button_next"
               className="profile-navigation-button"
               classes={
                 Object {
@@ -499,7 +471,7 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
               onClick={[Function]}
             >
               <WithStyles(ForwardRef(ButtonBase))
-                aria-label="profile_type.accessibility.button_end"
+                aria-label="profile_type.accessibility.button_next"
                 className="MuiButton-root btn-profile-next rounded MuiButton-text profile-navigation-button"
                 component="button"
                 disabled={false}
@@ -509,7 +481,7 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
                 type="button"
               >
                 <ForwardRef(ButtonBase)
-                  aria-label="profile_type.accessibility.button_end"
+                  aria-label="profile_type.accessibility.button_next"
                   className="MuiButton-root btn-profile-next rounded MuiButton-text profile-navigation-button"
                   classes={
                     Object {
@@ -526,7 +498,7 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
                   type="button"
                 >
                   <button
-                    aria-label="profile_type.accessibility.button_end"
+                    aria-label="profile_type.accessibility.button_next"
                     className="MuiButtonBase-root MuiButton-root btn-profile-next rounded MuiButton-text profile-navigation-button"
                     disabled={false}
                     onBlur={[Function]}
@@ -547,7 +519,7 @@ exports[`EcogestureFormEquipment component should be rendered correctly 1`] = `
                     <span
                       className="MuiButton-label text-16-normal"
                     >
-                      profile_type.form.button_end
+                      profile_type.form.button_next &gt;
                     </span>
                     <NoSsr>
                       <WithStyles(memo)
diff --git a/src/components/EcogestureForm/ecogestureFormSingleChoice.scss b/src/components/EcogestureForm/ecogestureFormSingleChoice.scss
index 7f02b12bb22de03604d9dc6415ffbf6fd43a7174..48c3d4c9dc5ccd82e7a6ac81a655847e9a09550b 100644
--- a/src/components/EcogestureForm/ecogestureFormSingleChoice.scss
+++ b/src/components/EcogestureForm/ecogestureFormSingleChoice.scss
@@ -10,8 +10,6 @@
   .ecogesture-form-single {
     width: 100%;
     max-width: 53rem;
-    color: #ffffff;
-    margin: 1rem 1rem 3.5rem;
     color: $white;
     margin: 1rem 1rem 3.5rem;
     @media (min-width: $width-tablet) {
diff --git a/src/components/EcogestureSelection/EcogestureSelection.tsx b/src/components/EcogestureSelection/EcogestureSelection.tsx
index 41e0db5e6610a7101a6e46bc17eb02f8426cf2c2..870a7719f2f41255ae25139eed4697dbca61b211 100644
--- a/src/components/EcogestureSelection/EcogestureSelection.tsx
+++ b/src/components/EcogestureSelection/EcogestureSelection.tsx
@@ -142,8 +142,7 @@ const EcogestureSelection: React.FC = () => {
       >
         <div className="eg-selection-header">
           {indexEcogesture <= ecogestureList.length - 1
-            ? `${totalViewed + indexEcogesture + 1}/${totalViewed +
-                ecogestureList.length}`
+            ? `${totalViewed + indexEcogesture + 1}/${totalAvailable}`
             : ''}
         </div>
       </Header>
diff --git a/src/components/Header/CozyBar.tsx b/src/components/Header/CozyBar.tsx
index 7f56b78d90ef4459a20e12eafad6d49dcddaccb1..e25b1c9703a9ff6b99783160c2ab0ce820a6e218 100644
--- a/src/components/Header/CozyBar.tsx
+++ b/src/components/Header/CozyBar.tsx
@@ -16,7 +16,6 @@ import StyledIconButton from 'components/CommonKit/IconButton/StyledIconButton'
 interface CozyBarProps {
   titleKey?: string
   displayBackArrow?: boolean
-  isBuilding?: boolean
   isNotKey?: boolean
   backFunction?: () => void
 }
@@ -24,7 +23,6 @@ interface CozyBarProps {
 const CozyBar = ({
   titleKey = 'common.title_app',
   displayBackArrow = false,
-  isBuilding,
   isNotKey,
   backFunction,
 }: CozyBarProps) => {
@@ -62,19 +60,9 @@ const CozyBar = ({
           )}
           <BarCenter>
             <div className="cozy-bar">
-              {isBuilding ? (
-                <>
-                  <Icon icon={HammerLeft} size={17} />
-                  <span className="app-title isBuilding">
-                    {isNotKey ? titleKey : t(titleKey)}
-                  </span>
-                  <Icon icon={HammerRight} size={17} />
-                </>
-              ) : (
-                <span className="app-title">
-                  {isNotKey ? titleKey : t(titleKey)}
-                </span>
-              )}
+              <span className="app-title">
+                {isNotKey ? titleKey : t(titleKey)}
+              </span>
             </div>
           </BarCenter>
           <BarRight>
diff --git a/src/components/Header/Header.tsx b/src/components/Header/Header.tsx
index d3045cc0f2c6ed573e0c156b368eaf7d2f7c23a7..2d10f4b38c84a13755a986c65c063c8966831717 100644
--- a/src/components/Header/Header.tsx
+++ b/src/components/Header/Header.tsx
@@ -22,7 +22,6 @@ interface HeaderProps {
   displayBackArrow?: boolean
   children?: React.ReactNode
   setHeaderHeight(height: number): void
-  isBuilding?: boolean
   isNotKey?: boolean
   backFunction?: () => void
 }
@@ -33,7 +32,6 @@ const Header: React.FC<HeaderProps> = ({
   displayBackArrow,
   children,
   setHeaderHeight,
-  isBuilding,
   isNotKey,
   backFunction,
 }: HeaderProps) => {
@@ -107,17 +105,7 @@ const Header: React.FC<HeaderProps> = ({
                   </IconButton>
                 )}
                 {/* {t(desktopTitleKey)} */}
-                {isBuilding ? (
-                  <>
-                    <div className="building-title">
-                      <Icon icon={HammerLeft} size={17} />
-                      <span className="isBuilding">{t(desktopTitleKey)}</span>
-                      <Icon icon={HammerRight} size={17} />
-                    </div>
-                  </>
-                ) : (
-                  <span>{isNotKey ? desktopTitleKey : t(desktopTitleKey)}</span>
-                )}
+                <span>{isNotKey ? desktopTitleKey : t(desktopTitleKey)}</span>
               </div>
             )}
             <IconButton
diff --git a/src/components/Home/FluidButton.tsx b/src/components/Home/FluidButton.tsx
index e8c80f31034cc43b34f0c043a460670e35af2aa7..39cae3cf2cd42eab8bf2871af6ed3a0c6b5290ff 100644
--- a/src/components/Home/FluidButton.tsx
+++ b/src/components/Home/FluidButton.tsx
@@ -38,8 +38,10 @@ const FluidButton: React.FC<FluidButtonProps> = ({
 
   const isErrored = useCallback(() => {
     if (
-      fluidType !== FluidType.MULTIFLUID &&
-      fluidStatus[fluidType].status === FluidState.ERROR
+      (fluidType !== FluidType.MULTIFLUID &&
+        fluidStatus[fluidType].status === FluidState.ERROR) ||
+      (fluidType !== FluidType.WATER &&
+        fluidStatus[fluidType].status === FluidState.ERROR_LOGIN_FAILED)
     ) {
       return true
     }
diff --git a/src/components/Konnector/KonnectorModal.tsx b/src/components/Konnector/KonnectorModal.tsx
index 9723f507ab8ff8cf2392e4aec7b2715a1f5b803b..457ebb041cf6b5cbb40126252f0199cbce288243 100644
--- a/src/components/Konnector/KonnectorModal.tsx
+++ b/src/components/Konnector/KonnectorModal.tsx
@@ -36,7 +36,7 @@ interface KonnectorModalProps {
   state: string | null
   error: string | null
   fluidType: FluidType
-  handleCloseClick: () => void
+  handleCloseClick: (isSuccess?: boolean) => void
 }
 
 const KonnectorModal: React.FC<KonnectorModalProps> = ({
@@ -77,7 +77,7 @@ const KonnectorModal: React.FC<KonnectorModalProps> = ({
       open={open}
       disableBackdropClick
       disableEscapeKeyDown
-      onClose={handleCloseClick}
+      onClose={() => handleCloseClick(state === SUCCESS_EVENT)}
       aria-labelledby={'accessibility-title'}
       classes={{
         root: 'modal-root',
@@ -184,7 +184,7 @@ const KonnectorModal: React.FC<KonnectorModalProps> = ({
               {state !== LOGIN_SUCCESS_EVENT && (
                 <Button
                   aria-label={t('konnector_modal.accessibility.button_close')}
-                  onClick={() => handleCloseClick()}
+                  onClick={() => handleCloseClick(state === SUCCESS_EVENT)}
                   classes={{
                     root: 'btn-highlight',
                     label: 'text-16-bold',
diff --git a/src/components/Konnector/KonnectorViewerCard.tsx b/src/components/Konnector/KonnectorViewerCard.tsx
index d4c8098182432dc432703aca2fac730798208c73..d7cb6b235827ea72c3ba258276dab460503a479e 100644
--- a/src/components/Konnector/KonnectorViewerCard.tsx
+++ b/src/components/Konnector/KonnectorViewerCard.tsx
@@ -179,46 +179,57 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
     dispatch,
   ])
 
-  const handleConnectionEnd = useCallback(async () => {
-    if (
-      account &&
-      konnectorErrorDescription === 'LOGIN_FAILED' &&
-      fluidStatus !== null &&
-      fluidStatus.connection.account !== null &&
-      fluidStatus.connection.account.auth !== undefined &&
-      fluidStatus.connection.account.auth.login
-    ) {
-      fluidStatus.connection.konnectorConfig.lastKnownCredentials =
+  const handleConnectionEnd = useCallback(
+    async (isSuccess?: boolean) => {
+      if (
+        account &&
+        konnectorErrorDescription === 'LOGIN_FAILED' &&
+        fluidStatus !== null &&
+        fluidStatus.connection.account !== null &&
+        fluidStatus.connection.account.auth !== undefined &&
         fluidStatus.connection.account.auth.login
-      const accountService = new AccountService(client)
-      await accountService.deleteAccount(account)
-      await handleAccountDeletion()
-    } else {
-      if (updatedFluidStatus.length > 0) {
-        const partnersInfo: PartnersInfo = await partnersInfoService.getPartnersInfo()
-        const _updatedFluidStatus: FluidStatus[] = await fluidService.getFluidStatus(
-          partnersInfo
-        )
-        dispatch(setFluidStatus(_updatedFluidStatus))
+      ) {
+        fluidStatus.connection.konnectorConfig.lastKnownCredentials =
+          fluidStatus.connection.account.auth.login
+        const accountService = new AccountService(client)
+        await accountService.deleteAccount(account)
+        await handleAccountDeletion()
+      } else {
+        if (isSuccess && fluidStatus.lastDataDate === null) {
+          await UsageEventService.udpateConnectionAttemptEvent(
+            client,
+            fluidSlug
+          )
+        }
+        if (updatedFluidStatus.length > 0) {
+          const partnersInfo: PartnersInfo = await partnersInfoService.getPartnersInfo()
+          const _updatedFluidStatus: FluidStatus[] = await fluidService.getFluidStatus(
+            partnersInfo
+          )
+          dispatch(setFluidStatus(_updatedFluidStatus))
+        }
       }
-    }
-    setActive(false)
-    setOpenModal(false)
-    // TODO null state seems to be read before modal closing and display a success icon in modal
-    setKonnectorState(null)
-    setKonnectorErrorDescription(null)
-  }, [
-    account,
-    client,
-    dispatch,
-    fluidService,
-    fluidStatus,
-    handleAccountDeletion,
-    konnectorErrorDescription,
-    partnersInfoService,
-    setActive,
-    updatedFluidStatus.length,
-  ])
+
+      setActive(false)
+      setOpenModal(false)
+      // TODO null state seems to be read before modal closing and display a success icon in modal
+      setKonnectorState(null)
+      setKonnectorErrorDescription(null)
+    },
+    [
+      account,
+      client,
+      dispatch,
+      fluidService,
+      fluidStatus,
+      handleAccountDeletion,
+      konnectorErrorDescription,
+      partnersInfoService,
+      setActive,
+      updatedFluidStatus.length,
+      fluidSlug,
+    ]
+  )
 
   const sendUsageEventSuccess = useCallback(
     async (
@@ -255,10 +266,12 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
   const getConnectionCard = useCallback(() => {
     if (fluidState === FluidState.KONNECTOR_NOT_FOUND && !isUpdating) {
       return <ConnectionNotFound konnectorSlug={fluidSlug} />
-    } else if (
-      account &&
-      fluidState !== FluidState.ERROR_LOGIN_FAILED &&
-      fluidStatus.status !== FluidState.NOT_CONNECTED
+    }
+    // Handle login failed for EGL
+    else if (
+      (fluidState === FluidState.ERROR_LOGIN_FAILED &&
+        fluidType === FluidType.WATER) ||
+      (account && fluidStatus.status !== FluidState.NOT_CONNECTED)
     ) {
       return (
         <ConnectionResult
@@ -292,8 +305,10 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
         dispatch(
           updatedFluidConnection(fluidStatus.fluidType, updatedConnection)
         )
-        await refreshChallengeState()
-        await updateGlobalFluidStatus()
+        Promise.all([
+          await refreshChallengeState(),
+          await updateGlobalFluidStatus(),
+        ])
         setKonnectorState(_state)
       }
     },
@@ -305,6 +320,73 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
       updateGlobalFluidStatus,
     ]
   )
+  const displayKonnectorIcon = useCallback(() => {
+    return (
+      <div className="konnector-icon">
+        {fluidStatus.connection.account ? (
+          <Icon icon={iconType} size={49} />
+        ) : (
+          <Icon icon={iconAddType} size={49} />
+        )}
+        {fluidStatus.status === FluidState.PARTNER_ISSUE ? (
+          <StyledIcon
+            icon={PartnersIssueNotif}
+            size={24}
+            className="konnector-state-picto"
+          />
+        ) : (
+          (fluidStatus.status === FluidState.ERROR ||
+            isOutdatedData ||
+            fluidStatus.status === FluidState.ERROR_LOGIN_FAILED) && (
+            <StyledIcon
+              icon={ErrorNotif}
+              size={24}
+              className="konnector-state-picto"
+            />
+          )
+        )}
+      </div>
+    )
+  }, [
+    fluidStatus.connection.account,
+    fluidStatus.status,
+    iconAddType,
+    iconType,
+    isOutdatedData,
+  ])
+
+  const displayKonnectorHeader = useCallback(() => {
+    if (fluidStatus.status === FluidState.PARTNER_ISSUE) {
+      return (
+        <span className="text-16-bold">
+          {t(`konnector_options.partner_issue`)}
+        </span>
+      )
+    } else if (isOutdatedData && fluidStatus.connection.account) {
+      return (
+        <span className="text-16-bold outdated">
+          {t('konnector_options.outdated', {
+            // eslint-disable-next-line @typescript-eslint/camelcase
+            isOutdatedData: isOutdatedData,
+          })}
+        </span>
+      )
+    } else if (fluidStatus.connection.account && !isOutdatedData) {
+      return t('FLUID.' + FluidType[fluidStatus.fluidType] + '.LABEL')
+    } else {
+      return t(
+        `konnector_options.label_connect_to_${FluidType[
+          fluidStatus.fluidType
+        ].toLowerCase()}`
+      )
+    }
+  }, [
+    fluidStatus.connection.account,
+    fluidStatus.fluidType,
+    fluidStatus.status,
+    isOutdatedData,
+    t,
+  ])
 
   useEffect(() => {
     let subscribed = true
@@ -322,22 +404,16 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
         const connectionFlow = new ConnectionFlow(client, trigger, konnector)
         await connectionFlow.launch()
         connectionFlow.jobWatcher.on(ERROR_EVENT, () => {
-          if (subscribed) {
-            sendUsageEventError(fluidSlug, fluidStatus.lastDataDate === null)
-          }
+          sendUsageEventError(fluidSlug, fluidStatus.lastDataDate === null)
           setKonnectorErrorDescription(connectionFlow.jobWatcher.on()._error)
           callbackResponse(ERROR_EVENT)
         })
         connectionFlow.jobWatcher.on(LOGIN_SUCCESS_EVENT, () => {
-          if (subscribed) {
-            sendUsageEventSuccess(fluidSlug, fluidStatus.lastDataDate === null)
-          }
+          sendUsageEventSuccess(fluidSlug, fluidStatus.lastDataDate === null)
           callbackResponse(LOGIN_SUCCESS_EVENT)
         })
         connectionFlow.jobWatcher.on(SUCCESS_EVENT, () => {
-          if (subscribed) {
-            sendUsageEventSuccess(fluidSlug, fluidStatus.lastDataDate === null)
-          }
+          sendUsageEventSuccess(fluidSlug, fluidStatus.lastDataDate === null)
           callbackResponse(SUCCESS_EVENT)
         })
       }
@@ -365,7 +441,6 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
     sendUsageEventError,
     fluidSlug,
     sendUsageEventSuccess,
-    fluidStatus.connection,
   ])
 
   useEffect(() => {
@@ -409,27 +484,7 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
               content: 'expansion-panel-content',
             }}
           >
-            <div className="konnector-icon">
-              {fluidStatus.connection.account &&
-              fluidStatus.status !== FluidState.ERROR_LOGIN_FAILED ? (
-                <Icon icon={iconType} size={49} />
-              ) : (
-                <Icon icon={iconAddType} size={49} />
-              )}
-              {fluidStatus.status === FluidState.PARTNER_ISSUE ? (
-                <StyledIcon
-                  icon={PartnersIssueNotif}
-                  size={24}
-                  className="konnector-state-picto"
-                />
-              ) : fluidStatus.status === FluidState.ERROR || isOutdatedData ? (
-                <StyledIcon
-                  icon={ErrorNotif}
-                  size={24}
-                  className="konnector-state-picto"
-                />
-              ) : null}
-            </div>
+            {displayKonnectorIcon()}
             <div
               className={classNames('konnector-title', {
                 [`${FluidType[
@@ -439,25 +494,7 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
                   fluidStatus.status !== FluidState.PARTNER_ISSUE,
               })}
             >
-              {fluidStatus.status === FluidState.PARTNER_ISSUE ? (
-                <span className="text-16-bold">
-                  {t(`konnector_options.partner_issue`)}
-                </span>
-              ) : fluidStatus.connection.account &&
-                fluidStatus.status !== FluidState.ERROR_LOGIN_FAILED &&
-                !isOutdatedData ? (
-                t('FLUID.' + FluidType[fluidStatus.fluidType] + '.LABEL')
-              ) : fluidStatus.status !== FluidState.ERROR_LOGIN_FAILED ? (
-                <span className="text-16-bold outdated">
-                  Données manquantes depuis {isOutdatedData} jours
-                </span>
-              ) : (
-                t(
-                  `konnector_options.label_connect_to_${FluidType[
-                    fluidStatus.fluidType
-                  ].toLowerCase()}`
-                )
-              )}
+              {displayKonnectorHeader()}
             </div>
           </ExpansionPanelSummary>
           <ExpansionPanelDetails
diff --git a/src/components/PerformanceIndicator/fluidPerformanceIndicator.scss b/src/components/PerformanceIndicator/fluidPerformanceIndicator.scss
index 78ab7d1948014491e71b66d9e1f8ef3c1552e58e..72f6553496f661e08875d46096cf9c61fec892af 100644
--- a/src/components/PerformanceIndicator/fluidPerformanceIndicator.scss
+++ b/src/components/PerformanceIndicator/fluidPerformanceIndicator.scss
@@ -143,7 +143,6 @@
         .fpi-content-perf-no-data {
           color: $grey-bright;
           & span {
-            display: inline-block;
             padding-right: 0.25rem;
             font-size: 1.1rem;
             display: block;
diff --git a/src/components/ProfileType/ProfileTypeFinished.tsx b/src/components/ProfileType/ProfileTypeFinished.tsx
index c130bc8649637ddd0d2a11a0ee12eca8aafdd01f..714438c7fd798ead16b92fbcb12c4a4516e94e3d 100644
--- a/src/components/ProfileType/ProfileTypeFinished.tsx
+++ b/src/components/ProfileType/ProfileTypeFinished.tsx
@@ -68,6 +68,7 @@ const ProfileTypeFinished: React.FC<ProfileTypeFinishedProps> = ({
           setIsSaved(true)
           dispatch(
             updateProfile({
+              isProfileEcogestureCompleted: true,
               isProfileTypeCompleted: true,
             })
           )
@@ -79,6 +80,7 @@ const ProfileTypeFinished: React.FC<ProfileTypeFinishedProps> = ({
         setIsSaved(true)
         dispatch(
           updateProfile({
+            isProfileEcogestureCompleted: true,
             isProfileTypeCompleted: true,
           })
         )
diff --git a/src/components/ProfileType/ProfileTypeView.tsx b/src/components/ProfileType/ProfileTypeView.tsx
index 76689e60a37ecfb21e5de45454055a70e90c093c..40bfbdef84d4997c2daa6d9836fd305039685c3c 100644
--- a/src/components/ProfileType/ProfileTypeView.tsx
+++ b/src/components/ProfileType/ProfileTypeView.tsx
@@ -4,7 +4,7 @@ import CozyBar from 'components/Header/CozyBar'
 import Header from 'components/Header/Header'
 import Content from 'components/Content/Content'
 import ProfileTypeFormSingleChoice from 'components/ProfileType/ProfileTypeFormSingleChoice'
-import ProfileTypeFormEnd from 'components/ProfileType/ProfileTypeFinished'
+import ProfileTypeFinished from 'components/ProfileType/ProfileTypeFinished'
 
 import { ProfileType, ProfileTypeAnswer } from 'models/profileType.model'
 import {
@@ -29,12 +29,24 @@ import { AppStore } from 'store'
 import { DateTime } from 'luxon'
 import ProfileTypeFormService from 'services/profileTypeForm.service'
 import ProfileTypeFormDateSelection from './ProfileTypeFormDateSelection'
+import EcogestureFormEquipment from 'components/EcogestureForm/EcogestureFormEquipment'
+import { ProfileEcogesture } from 'models/profileEcogesture.model'
 
-const ProfileTypeView = () => {
+interface ProfileTypeViewProps {
+  handleEnd: Function
+}
+
+const ProfileTypeView: React.FC<ProfileTypeViewProps> = ({
+  handleEnd,
+}: ProfileTypeViewProps) => {
   const profile = useSelector((state: AppStore) => state.ecolyo.profile)
   const curProfileType = useSelector(
     (state: AppStore) => state.ecolyo.profileType
   )
+  const curProfileEcogesture: ProfileEcogesture = useSelector(
+    (state: AppStore) => state.ecolyo.profileEcogesture
+  )
+
   const [headerHeight, setHeaderHeight] = useState<number>(0)
   const [profileType, setProfileType] = useState<ProfileType>({
     updateDate: DateTime.local()
@@ -58,6 +70,7 @@ const ProfileTypeView = () => {
     warmingFluid: WarmingType.ELECTRICITY,
     hotWaterFluid: FluidType.ELECTRICITY,
     cookingFluid: FluidType.ELECTRICITY,
+    equipments: [],
   })
   const [step, setStep] = useState<ProfileTypeStepForm>(
     ProfileTypeStepForm.HOUSING_TYPE
@@ -76,23 +89,44 @@ const ProfileTypeView = () => {
   }, [])
 
   const setNextStep = useCallback(
-    (_profileType: ProfileType) => {
-      setProfileType(_profileType)
-      const profileTypeFormService = new ProfileTypeFormService(_profileType)
+    (_profileType?: ProfileType) => {
+      let profileTypeFormService: ProfileTypeFormService
+      if (_profileType) {
+        setProfileType(_profileType)
+        profileTypeFormService = new ProfileTypeFormService(_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 ProfileTypeFormService({
+          ...profileType,
+        })
+      }
       const nextStep: ProfileTypeStepForm = profileTypeFormService.getNextFormStep(
         step,
         !profile.isProfileTypeCompleted
       )
+      if (nextStep === ProfileTypeStepForm.END && handleEnd) {
+        handleEnd()
+      }
       setIsLoading(true)
       if (nextStep > viewedStep) {
         setViewedStep(nextStep)
       }
       setStep(nextStep)
     },
-    [profile.isProfileTypeCompleted, step, viewedStep]
+    [
+      curProfileEcogesture,
+      handleEnd,
+      profile.isProfileTypeCompleted,
+      profileType,
+      step,
+      viewedStep,
+    ]
   )
 
-  const setPrevioustStep = useCallback(
+  const setPreviousStep = useCallback(
     (_profileType: ProfileType) => {
       setProfileType(_profileType)
       const profileTypeFormService = new ProfileTypeFormService(_profileType)
@@ -115,7 +149,7 @@ const ProfileTypeView = () => {
           answerType={answerType}
           setNextStep={setNextStep}
           isProfileTypeComplete={profile.isProfileTypeCompleted}
-          setPrevioustStep={setPrevioustStep}
+          setPrevioustStep={setPreviousStep}
         />
       )
     } else if (answerType.type === ProfileTypeFormType.MULTI_CHOICE) {
@@ -126,7 +160,7 @@ const ProfileTypeView = () => {
           profileType={profileType}
           answerType={answerType}
           setNextStep={setNextStep}
-          setPrevioustStep={setPrevioustStep}
+          setPrevioustStep={setPreviousStep}
           isProfileTypeComplete={profile.isProfileTypeCompleted}
         />
       )
@@ -139,7 +173,7 @@ const ProfileTypeView = () => {
           answerType={answerType}
           setNextStep={setNextStep}
           isProfileTypeComplete={profile.isProfileTypeCompleted}
-          setPrevioustStep={setPrevioustStep}
+          setPrevioustStep={setPreviousStep}
         />
       )
     } else if (answerType.type === ProfileTypeFormType.NUMBER_SELECTION) {
@@ -151,7 +185,7 @@ const ProfileTypeView = () => {
           answerType={answerType}
           setNextStep={setNextStep}
           isProfileTypeComplete={profile.isProfileTypeCompleted}
-          setPrevioustStep={setPrevioustStep}
+          setPrevioustStep={setPreviousStep}
         />
       )
     } else if (answerType.type === ProfileTypeFormType.DATE_SELECTION) {
@@ -163,7 +197,18 @@ const ProfileTypeView = () => {
           answerType={answerType}
           setNextStep={setNextStep}
           isProfileTypeComplete={profile.isProfileTypeCompleted}
-          setPrevioustStep={setPrevioustStep}
+          setPrevioustStep={setPreviousStep}
+        />
+      )
+    } else if (answerType.type === ProfileTypeFormType.EQUIPMENT_SELECTION) {
+      return (
+        <EcogestureFormEquipment
+          step={step}
+          // viewedStep={viewedStep}
+          // answerType={answerType}
+          profileEcogesture={curProfileEcogesture}
+          setNextStep={setNextStep}
+          setPreviousStep={setPreviousStep}
         />
       )
     }
@@ -193,7 +238,7 @@ const ProfileTypeView = () => {
           {isLoading ? null : step !== ProfileTypeStepForm.END ? (
             selectForm()
           ) : (
-            <ProfileTypeFormEnd profileType={profileType} />
+            <ProfileTypeFinished profileType={profileType} />
           )}
         </div>
       </Content>
diff --git a/src/components/Routes/Routes.tsx b/src/components/Routes/Routes.tsx
index 5267763350f7d8d119a7449b05a224c363b4c20d..2ef690160c189e3ebdb4e48c649719fa749dfd04 100644
--- a/src/components/Routes/Routes.tsx
+++ b/src/components/Routes/Routes.tsx
@@ -33,12 +33,8 @@ const ProfileTypeView = lazy(() =>
 
 interface RouteProps {
   termsStatus: TermsStatus
-  isProfileEcogestureCompleted: boolean
 }
-const Routes: React.FC<RouteProps> = ({
-  termsStatus,
-  isProfileEcogestureCompleted,
-}: RouteProps) => {
+const Routes: React.FC<RouteProps> = ({ termsStatus }: RouteProps) => {
   return (
     <Suspense fallback={<div></div>}>
       <Switch>
@@ -68,9 +64,7 @@ const Routes: React.FC<RouteProps> = ({
         <Route path={`/challenges/exploration`} component={ExplorationView} />
         <Route path={`/challenges/action`} exact component={ActionView} />
         <Route path={`/challenges/`} component={ChallengeView} exact />
-        {!isProfileEcogestureCompleted && (
-          <Route path="/ecogesture-form" component={EcogestureFormView} />
-        )}
+        <Route path="/ecogesture-form" component={EcogestureFormView} />
         <Route path="/ecogesture-selection" component={EcogestureSelection} />
         <Route path="/ecogesture/:id/:tab" component={SingleEcogesture} />
         <Route path="/ecogesture/:id" component={SingleEcogesture} />
diff --git a/src/components/Splash/SplashRoot.tsx b/src/components/Splash/SplashRoot.tsx
index 06d2bb29c92b026243def3c0993654c70156f683..8a7c4db8835ca3277fbbc3015a42bf906bed7977 100644
--- a/src/components/Splash/SplashRoot.tsx
+++ b/src/components/Splash/SplashRoot.tsx
@@ -110,10 +110,7 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
         setinitStep,
         setinitStepErrors
       )
-      const partnersInfoService = new PartnersInfoService(
-        client,
-        setinitStepErrors
-      )
+      const partnersInfoService = new PartnersInfoService(client)
       const ms = new MigrationService(client, setinitStepErrors)
       try {
         const migrationsResult: ReleaseNotes = await ms.runMigrations(
@@ -263,7 +260,9 @@ const SplashRoot = ({ fadeTimer = 1000, children }: SplashRootProps) => {
         }
 
         // Check partnersInfo from backoffice
-        const partnersInfo: PartnersInfo = await partnersInfoService.getPartnersInfo()
+        const partnersInfo:
+          | PartnersInfo
+          | undefined = await partnersInfoService.getPartnersInfo()
 
         // Get last partnersIssueDate
         const today = DateTime.local()
diff --git a/src/components/Splash/splashScreen.scss b/src/components/Splash/splashScreen.scss
index 03d956ea9405064b6171368efab3e10d0ce7c273..65590c61b478b3c9bf1ee81c1703264240650a8a 100644
--- a/src/components/Splash/splashScreen.scss
+++ b/src/components/Splash/splashScreen.scss
@@ -60,7 +60,8 @@
 
   .splash-progress-bar-container {
     flex: 1;
-    height: 10px;
+    height: 12px;
+    box-sizing: border-box;
     background-image: linear-gradient(
       45deg,
       #e3b82a 11.11%,
@@ -75,9 +76,12 @@
     border: solid 1px $gold-shadow;
     border-radius: 12px;
     .splash-progress-bar-content {
-      height: 11px;
+      height: 12px;
+      box-sizing: border-box;
       background-color: $gold-shadow;
-      border-radius: 12px 12px 0 12px;
+      border: solid 1px $gold-shadow;
+      border-radius: 12px 4px 0 12px;
+      border-right: none;
       transition: all 300ms ease;
       position: relative;
       overflow: hidden;
diff --git a/src/db/ecogestureData.json b/src/db/ecogestureData.json
index 272bb98c8d3d95b2bdf02047544610a9bb869676..6b12e829f327334b360d5000b230040f7d081b2f 100644
--- a/src/db/ecogestureData.json
+++ b/src/db/ecogestureData.json
@@ -1638,7 +1638,7 @@
     "fluidTypes": [0, 2],
     "shortName": "Tuyaux bien au chaud",
     "longName": "J'isole les tuyaux de mon circuit de chauffage hydraulique.",
-    "longDescription": "Isolez les circuits de distribution d‘eau de chauffage et d’eau chaude sanitaire dans les locaux non chauffés ou les faux-plafonds. Vous limiterez ainsi les déperditions de chaleur et améliorerez la protection du circuit contre le gel. Cela peut réduire de 10 % la consommation. Le plus simple est d’utiliser des manchons souples en mousse ou en fibres minérales. On peut aussi utiliser des isolants à base de laine ou de chanvre",
+    "longDescription": "Isolez les circuits de distribution d'eau de chauffage et d'eau chaude sanitaire dans les locaux non chauffés ou les faux-plafonds. Vous limiterez ainsi les déperditions de chaleur et améliorerez la protection du circuit contre le gel. Cela peut réduire de 10 % la consommation. Le plus simple est d’utiliser des manchons souples en mousse ou en fibres minérales. On peut aussi utiliser des isolants à base de laine ou de chanvre",
     "impactLevel": 6,
     "efficiency": 3,
     "difficulty": 3,
@@ -1684,7 +1684,7 @@
     "fluidTypes": [1],
     "shortName": "Nitro cuvette",
     "longName": "J'installe une chasse d'eau à double vitesse.",
-    "longDescription": "L'installation d'une chasse d'eau double est à la portée de tous. Si les mécanismes sont généralement standard, veillez malgré tout à vérifier avant de l'acheter les dimensions du trou du couvercle dans lequel viendra se positionner le double bouton poussoir, ainsi que la hauteur du réservoir. Reste à suivre le pas à pas suivant : Commencez par couper l'arrivée d'eau et tirez la chasse pour vider le réservoir. Dévissez le bouton de tirage existant et ôtez le couvercle du réservoir. Dévissez l'arrivée d'eau, retirez le robinet flotteur et le mécanisme de la chasse. Dévissez les vis de fixation du réservoir et retirez-le. Changez le joint entre le réservoir et la cuvette, puis revissez le réservoir. Installez le nouveau mécanisme de chasse (à partir de 20€ dans les enseignes de bricolage). Clipsez le flotteur de réglage de la petite chasse, puis le mécanisme au complet. Revissez l'arrivée d'eau. Refermez le couvercle et installez le double bouton poussoir.À défaut, il est possible de réduire le volume de la chasse d’eau grâce à une éco-plaquette ou à une bouteille d’eau pleine placée dans le réservoir. Pour garantir son bon fonctionnement, nettoyez régulièrement le mécanisme de chasse d'eau double, particulièrement si votre eau est très calcaire.",
+    "longDescription": "L'installation d'une chasse d'eau double est à la portée de tous. Si les mécanismes sont généralement standard, veillez malgré tout à vérifier avant de l'acheter les dimensions du trou du couvercle dans lequel viendra se positionner le double bouton poussoir, ainsi que la hauteur du réservoir. Reste à suivre le pas à pas suivant : Commencez par couper l'arrivée d'eau et tirez la chasse pour vider le réservoir. Dévissez le bouton de tirage existant et ôtez le couvercle du réservoir. Dévissez l'arrivée d'eau, retirez le robinet flotteur et le mécanisme de la chasse. Dévissez les vis de fixation du réservoir et retirez-le. Changez le joint entre le réservoir et la cuvette, puis revissez le réservoir. Installez le nouveau mécanisme de chasse (à partir de 20€ dans les enseignes de bricolage). Clipsez le flotteur de réglage de la petite chasse, puis le mécanisme au complet. Revissez l'arrivée d'eau. Refermez le couvercle et installez le double bouton poussoir. À défaut, il est possible de réduire le volume de la chasse d’eau grâce à une éco-plaquette ou à une bouteille d’eau pleine placée dans le réservoir. Pour garantir son bon fonctionnement, nettoyez régulièrement le mécanisme de chasse d'eau double, particulièrement si votre eau est très calcaire.",
     "impactLevel": 5,
     "efficiency": 2.5,
     "difficulty": 3,
@@ -1753,7 +1753,7 @@
     "fluidTypes": [0],
     "shortName": "Blanc Resplendissant",
     "longName": "Je peins mes murs avec des couleurs claires et j'installe des luminaires blancs.",
-    "longDescription": "Cela permet à la lumière naturelle de se répartir plus uniformément dans l’espace et de pénétrer plus profondément dans la pièce grâce aux jeux de réflexions. Cet effet des couleurs se remarque également sur la lumière artificielle : un intérieur foncé amène à doubler voire tripler l’intensité de l’éclairag",
+    "longDescription": "Cela permet à la lumière naturelle de se répartir plus uniformément dans l’espace et de pénétrer plus profondément dans la pièce grâce aux jeux de réflexions. Cet effet des couleurs se remarque également sur la lumière artificielle : un intérieur foncé amène à doubler voire tripler l’intensité de l’éclairage.",
     "impactLevel": 2,
     "efficiency": 1,
     "difficulty": 3,
diff --git a/src/enum/dacc.enum.ts b/src/enum/dacc.enum.ts
index 219da93b8a757b095ff6d7443705951cda4a6a6b..e07106c4813c77fec8ac2282d9c71737c3104325 100644
--- a/src/enum/dacc.enum.ts
+++ b/src/enum/dacc.enum.ts
@@ -12,6 +12,7 @@ export enum DaccEvent {
   SUMMARY_SUBSCRIPTION_MONTHLY = 'summary-subscription-monthly',
   FLUID_DATA_GRANULARITY = 'fluid-data-granularity-monthly',
   PARTNER_SUCESS_MONTHLY = 'konnector-attempts-before-success',
+  UNINITIALIZED_KONNECTOR_ATTEMPTS_MONTHLY = 'uninitialized-konnector-attempts-monthly',
   CONNECTION_COUNT_MONTHLY = 'connection-count-monthly',
   PROFILE_COUNT_MONTHLY = 'profile-count',
 }
diff --git a/src/enum/konnectorUpdate.enum.ts b/src/enum/konnectorUpdate.enum.ts
index 5923efb32cc658344ea3dde22f941a7ffe50a196..9d932853d7858d74d900f4af644f0fd4f7c61003 100644
--- a/src/enum/konnectorUpdate.enum.ts
+++ b/src/enum/konnectorUpdate.enum.ts
@@ -1,4 +1,5 @@
 export enum KonnectorUpdate {
   ERROR_UPDATE = 'error_update',
   ERROR_UPDATE_OAUTH = 'error_update_oauth',
+  LOGIN_FAILED = 'login_failed',
 }
diff --git a/src/enum/profileType.enum.ts b/src/enum/profileType.enum.ts
index 78e544a53f0393cb53cb121059dafbaddf76d422..01c2b20a5521cd6ab42731f8f6518ee3469e9ce4 100644
--- a/src/enum/profileType.enum.ts
+++ b/src/enum/profileType.enum.ts
@@ -73,8 +73,9 @@ export enum ProfileTypeStepForm {
   HOT_WATER_FLUID = 13,
   HOT_WATER_EQUIPMENT = 14,
   COOKING_FLUID = 15,
-  UPDATE_DATE = 16,
-  END = 17,
+  EQUIPMENTS = 16,
+  UPDATE_DATE = 17,
+  END = 18,
 }
 
 export enum ProfileTypeFormType {
@@ -83,4 +84,5 @@ export enum ProfileTypeFormType {
   NUMBER_SELECTION = 2,
   NUMBER = 3,
   DATE_SELECTION = 4,
+  EQUIPMENT_SELECTION = 5,
 }
diff --git a/src/enum/usageEvent.enum.ts b/src/enum/usageEvent.enum.ts
index 6968915fc04ee403eb10afc9196ca5c64f70239a..93cbd57f7a14a209f3735247d7c67a06d7096663 100644
--- a/src/enum/usageEvent.enum.ts
+++ b/src/enum/usageEvent.enum.ts
@@ -1,6 +1,7 @@
 export enum UsageEventType {
   CONNECTION_EVENT = 'ConnectionEvent',
   KONNECTOR_CONNECT_EVENT = 'KonnectorConnectEvent',
+  KONNECTOR_ATTEMPT_EVENT = 'KonnectorAttemptEvent',
   KONNECTOR_REFRESH_EVENT = 'KonnectorRefreshEvent',
   NAVIGATION_EVENT = 'NavigationEvent',
   CONSUMPTION_COMPARE_EVENT = 'ConsumptionCompareEvent',
diff --git a/src/locales/fr.json b/src/locales/fr.json
index 147c7f91e0e7ee29591a18e8bff438e811e59e41..beadc6d1271d583b241af1f5b7a438399aeb3118 100644
--- a/src/locales/fr.json
+++ b/src/locales/fr.json
@@ -210,10 +210,6 @@
     }
   },
   "challenge": {
-    "banner": {
-      "title": "Nouvelle section prochainement",
-      "content": "Nous traitons actuellement les retours des utilisateurs afin d'améliorer les défis"
-    },
     "card": {
       "ongoing": {
         "quiz": "Quiz",
@@ -410,6 +406,19 @@
       "text3": "Afin de savoir quels écogestes correspondent à votre consommation, merci de répondre à quelques rapides questions.",
       "btn1": "Plus tard",
       "btn2": "C'est parti !"
+    },
+    "reinit": "Réinitialiser ma sélection d'écogestes",
+    "reinitModal": {
+      "title_part1": "Cette action",
+      "title_part2": "supprimera tous les écogestes",
+      "title_part3": "sélectionnés dans",
+      "title_part4": "“Objectifs”",
+      "title_part5": "et",
+      "title_part6": "“Je fais déjà”",
+      "text1": "Vous pourrez ensuite faire une nouvelle sélection d’écogestes adaptés à votre consommation.",
+      "text2": "Souhaitez-vous réinitialiser votre sélection d’écogestes ?",
+      "btn1": "Non",
+      "btn2": "Réinitialiser"
     }
   },
   "ecogesture_modal": {
@@ -680,6 +689,7 @@
     "button_delete": "Supprimer",
     "issue": "Le problème semble venir de ",
     "resolve": "Une mise à jour peut résoudre ce problème.",
+    "login_failed": "Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.",
     "not_installed": "Le connecteur n'est pas installé. Veuillez l'installer en cliquant sur le bouton ci-dessous.",
     "button_install": "Installer",
     "error_account_creation": "Une erreur est survenue, veuillez essayer de nouveau.",
@@ -700,6 +710,7 @@
     "label_connect_to_water": "Se connecter à l'eau",
     "label_connect_to_gas": "Se connecter au gaz",
     "partner_issue": "En maintenance",
+    "outdated": "Données manquantes depuis %{isOutdatedData} jours",
     "accessibility": {
       "label_ko_status": "Connecteur en erreur",
       "button_toggle_detail_electricity": "Afficher ou masquer le détail de la connexion à l'électricité",
@@ -722,6 +733,8 @@
     "error_data_water": "Un problème est survenu. Vos données de consommation d’eau ne seront pas chargées.",
     "error_credentials_water": "Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter. L'identifiant est un numéro à 7 chiffres (différent de votre numéro de contrat).",
     "error_credentials_update_water": "Une erreur s'est glissée dans vos identifiants de connexion. Veuillez vérifier ces éléments et tenter de vous reconnecter.",
+    "error_credentials_update_electricity": "Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.",
+    "error_credentials_update_gas": "Un problème a lieu lors de la récupération de vos données. Merci de supprimer votre connecteur et vous reconnecter.",
     "error_data_gas": "Un problème est survenu. Vos données de consommmation de gaz ne seront pas chargées.",
     "error_data_update_electricity": "Un problème est survenu. Vos données de consommation d’électricité n’ont pas été mises à jour.",
     "error_data_update_water": "Un problème est survenu. Vos données de consommation d’eau n’ont pas été mises à jour.",
diff --git a/src/migrations/migration.data.ts b/src/migrations/migration.data.ts
index c7c630402c728e3319766eac7d49a0ea8e193ead..2065ff8660ac480d237dc46afa76d4a5bd650eeb 100644
--- a/src/migrations/migration.data.ts
+++ b/src/migrations/migration.data.ts
@@ -1,24 +1,24 @@
-import { Migration } from './migration.type'
+import { Client } from 'cozy-client'
 import {
-  PROFILE_DOCTYPE,
-  PROFILETYPE_DOCTYPE,
-  USERCHALLENGE_DOCTYPE,
   EGL_DAY_DOCTYPE,
   EGL_MONTH_DOCTYPE,
   EGL_YEAR_DOCTYPE,
-  FLUIDPRICES_DOCTYPE,
   ENEDIS_DAY_DOCTYPE,
-  GRDF_DAY_DOCTYPE,
+  ENEDIS_MONTHLY_ANALYSIS_DATA_DOCTYPE,
   ENEDIS_MONTH_DOCTYPE,
   ENEDIS_YEAR_DOCTYPE,
+  FLUIDPRICES_DOCTYPE,
+  GRDF_DAY_DOCTYPE,
   GRDF_MONTH_DOCTYPE,
   GRDF_YEAR_DOCTYPE,
-  ENEDIS_MONTHLY_ANALYSIS_DATA_DOCTYPE,
+  PROFILETYPE_DOCTYPE,
+  PROFILE_DOCTYPE,
+  USERCHALLENGE_DOCTYPE,
 } from 'doctypes'
-import { DataloadEntity, Profile, ProfileType, UserChallenge } from 'models'
-import { Client } from 'cozy-client'
-import { DateTime } from 'luxon'
 import { UserQuizState } from 'enum/userQuiz.enum'
+import { DateTime } from 'luxon'
+import { DataloadEntity, Profile, ProfileType, UserChallenge } from 'models'
+import { Migration } from './migration.type'
 
 export const SCHEMA_INITIAL_VERSION = 0
 
@@ -503,7 +503,7 @@ export const migrations: Migration[] = [
     releaseNotes: null,
     docTypes: ENEDIS_MONTHLY_ANALYSIS_DATA_DOCTYPE,
     run: async (_client: Client, docs: any[]): Promise<any> => {
-      docs.map(doc => {
+      return docs.map(doc => {
         if (doc.minLoad) {
           const numberofDaysInMonth = DateTime.fromObject({
             month: doc.month,
@@ -512,8 +512,8 @@ export const migrations: Migration[] = [
           doc.minimumLoad = doc.minLoad * 48 * numberofDaysInMonth
           delete doc.minLoad
         }
+        return doc
       })
-      return docs
     },
   },
   {
@@ -525,11 +525,10 @@ export const migrations: Migration[] = [
     releaseNotes: null,
     docTypes: FLUIDPRICES_DOCTYPE,
     run: async (_client: Client, docs: any[]): Promise<any> => {
-      docs.map(doc => {
+      return docs.map(doc => {
         doc.deleteAction = true
         return doc
       })
-      return docs
     },
   },
 ]
diff --git a/src/models/profileType.model.ts b/src/models/profileType.model.ts
index 33584fddb2c01e8fbb8174b9fc61dd8f7304d71c..a4e6a7fdfacf1b6eda4524a434653242877771c3 100644
--- a/src/models/profileType.model.ts
+++ b/src/models/profileType.model.ts
@@ -12,6 +12,7 @@ import {
 } from 'enum/profileType.enum'
 import { FluidType } from 'enum/fluid.enum'
 import { DateTime } from 'luxon'
+import { EquipmentType } from 'enum/ecogesture.enum'
 
 interface ProfileTypeIndexableTypes {
   [key: string]:
@@ -25,6 +26,7 @@ interface ProfileTypeIndexableTypes {
     | HotWaterEquipment
     | FluidType
     | DateTime
+    | EquipmentType[]
     | number
     | string
     | string[]
@@ -48,6 +50,7 @@ export interface ProfileType extends ProfileTypeIndexableTypes {
   hotWaterFluid: FluidType | null
   cookingFluid: FluidType
   updateDate: DateTime
+  equipments: EquipmentType[]
 }
 
 export interface MonthlyForecast {
diff --git a/src/notifications/consumptionLimit.hbs b/src/notifications/consumptionLimit.hbs
index ed7c16583805293713124d1eb2062f29d52961f0..cc0d0b9a1016e79749502edb93bcb9d8b3e9ecb4 100644
--- a/src/notifications/consumptionLimit.hbs
+++ b/src/notifications/consumptionLimit.hbs
@@ -7,16 +7,18 @@
     {{#> base/header}}
     {{/base/header}}
 
-  <mj-section background-color="#121212">
+    <mj-section background-color="#121212">
       <mj-column width="60%" vertical-align="middle">
         <mj-text color="white" font-weight="900" font-size="24px">
           Bonjour {{username}},
         </mj-text>
         <mj-text color="white" font-weight="400" font-size="18px">
-          La limite de consommation d'eau journalière que vous avez fixée à {{userLimit}} L a été dépassée le {{limitDate}}.<br />
-          Pour comprendre ce qu’il s’est passé, rendez-vous dans Ecolyo.
-        </mj-text>
-
+          La limite de consommation d'eau journalière que vous avez fixée à {{userLimit}} litres a été dépassée.<br />
+          Le <span style="color: #E3B82A; font-weight: 700;">{{limitDate}}</span>, vous avez consommé <span style="color: #3a98ec; font-weight:700;">{{consumption}} litres</span>.<br />
+          </mj-text>
+          <mj-text color="white" font-weight="400" font-size="18px">
+            Pour comprendre ce qu’il s’est passé, rendez-vous dans Ecolyo.
+          </mj-text>
       </mj-column>
       <mj-column width="40%" vertical-align="middle">
         <mj-image src="{{baseUrl}}/assets/baignoire.png" width="132px" align="center"></mj-image>
diff --git a/src/services/account.service.ts b/src/services/account.service.ts
index e5845eb0aa8ccca35f14711fb8be6265d3b49e30..17f756396e9b4817d3ca7e5ca57e460d6a6bcf8d 100644
--- a/src/services/account.service.ts
+++ b/src/services/account.service.ts
@@ -53,56 +53,68 @@ export default class AccountService {
   }
 
   public async getAccountByType(type: string): Promise<Account | null> {
-    const query: QueryDefinition = Q(ACCOUNTS_DOCTYPE)
-      // eslint-disable-next-line @typescript-eslint/camelcase
-      .where({ account_type: type })
-    const { data: accounts }: QueryResult<Account[]> = await this._client.query(
-      query
-    )
-    if (accounts.length > 1) {
-      // If several account are found we will used trigger date to select the older
-      const triggerService = new TriggerService(this._client)
-      const triggers: (Trigger | null)[] = await Promise.all(
-        accounts.map((_account: Account) =>
-          triggerService.getTriggerForAccount(_account)
+    try {
+      const query: QueryDefinition = Q(ACCOUNTS_DOCTYPE)
+        // eslint-disable-next-line @typescript-eslint/camelcase
+        .where({ account_type: type })
+      // .indexFields(['account_type'])
+      const {
+        data: accounts,
+      }: QueryResult<Account[]> = await this._client.query(query)
+      if (accounts.length > 1) {
+        // If several account are found we will used trigger date to select the older
+        const triggerService = new TriggerService(this._client)
+        const triggers: (Trigger | null)[] = await Promise.all(
+          accounts.map((_account: Account) =>
+            triggerService.getTriggerForAccount(_account)
+          )
         )
-      )
-      // Keep the accountid which have the older trigger
-      let olderDate: DateTime = DateTime.now()
-      let olderAccountId: string | null = null
-      for (const _trigger of triggers) {
-        if (
-          _trigger &&
-          _trigger.cozyMetadata &&
-          _trigger.cozyMetadata.createdAt &&
-          DateTime.fromISO(_trigger.cozyMetadata.createdAt, {
-            zone: 'utc',
-          }) < olderDate
-        ) {
-          olderDate = DateTime.fromISO(_trigger.cozyMetadata.createdAt, {
-            zone: 'utc',
-          })
-          olderAccountId = _trigger.message.account
+        // Keep the accountid which have the older trigger
+        let olderDate: DateTime = DateTime.now()
+        let olderAccountId: string | null = null
+        for (const _trigger of triggers) {
+          if (
+            _trigger &&
+            _trigger.cozyMetadata &&
+            _trigger.cozyMetadata.createdAt &&
+            DateTime.fromISO(_trigger.cozyMetadata.createdAt, {
+              zone: 'utc',
+            }) < olderDate
+          ) {
+            olderDate = DateTime.fromISO(_trigger.cozyMetadata.createdAt, {
+              zone: 'utc',
+            })
+            olderAccountId = _trigger.message.account
+          }
         }
+        // Retrieve the accountId and return it
+        const filteredAccounts: Account[] = accounts.filter(
+          _account => _account._id === olderAccountId
+        )
+        return filteredAccounts[0] ? filteredAccounts[0] : null
+      } else {
+        return accounts[0] ? accounts[0] : null
       }
-      // Retrieve the accountId and return it
-      const filteredAccounts: Account[] = accounts.filter(
-        _account => _account._id === olderAccountId
-      )
-      return filteredAccounts[0] ? filteredAccounts[0] : null
-    } else {
-      return accounts[0] ? accounts[0] : null
+    } catch (err) {
+      console.error(`Error GetAccountByType: ${err}`)
+      return null
     }
   }
 
   public async getAccountsByType(type: string): Promise<Account[]> {
-    const query: QueryDefinition = Q(ACCOUNTS_DOCTYPE)
-      // eslint-disable-next-line @typescript-eslint/camelcase
-      .where({ account_type: type })
-    const { data: accounts }: QueryResult<Account[]> = await this._client.query(
-      query
-    )
-    return accounts
+    try {
+      const query: QueryDefinition = Q(ACCOUNTS_DOCTYPE)
+        // eslint-disable-next-line @typescript-eslint/camelcase
+        .where({ account_type: type })
+      // .indexFields(['account_type'])
+      const {
+        data: accounts,
+      }: QueryResult<Account[]> = await this._client.query(query)
+      return accounts
+    } catch (err) {
+      console.error(`Error: GetAccountsByType: ${err}`)
+      return []
+    }
   }
 
   public async updateAccount(account: Account): Promise<Account> {
@@ -129,6 +141,7 @@ export default class AccountService {
     const query: QueryDefinition = Q(ACCOUNTS_DOCTYPE)
       // eslint-disable-next-line @typescript-eslint/camelcase
       .where({ account_type: 'index' })
+      // .indexFields(['account_type'])
       .limitBy(1)
     const { data: result }: QueryResult<[]> = await this._client.query(query)
     return result
diff --git a/src/services/ecogesture.service.spec.ts b/src/services/ecogesture.service.spec.ts
index 0b67426935ae2128ccab94f86e5d1dc2b4d35e26..12bfc03391b1477143d54cfad3f0d4d899c09db0 100644
--- a/src/services/ecogesture.service.spec.ts
+++ b/src/services/ecogesture.service.spec.ts
@@ -65,7 +65,7 @@ describe('Ecogesture service', () => {
       const result = await ecogestureService.deleteAllEcogestures()
       expect(result).toBe(true)
     })
-    it('should return false when error happened on deletion', async () => {
+    it('should throw exception when error happened on deletion', async () => {
       const mockQueryResult: QueryResult<Ecogesture[]> = {
         data: ecogesturesData,
         bookmark: '',
@@ -74,10 +74,50 @@ describe('Ecogesture service', () => {
       }
       mockClient.destroy.mockRejectedValue(new Error())
       mockClient.query.mockResolvedValueOnce(mockQueryResult)
-      const result = await ecogestureService.deleteAllEcogestures()
-      expect(result).toBe(false)
+      await expect(ecogestureService.deleteAllEcogestures()).rejects.toThrow(
+        new Error()
+      )
     })
   })
+  describe('reinitAllEcogestures', () => {
+    it('should return true when 3 ecogestures stored', async () => {
+      const mockQueryResult: QueryResult<Ecogesture[]> = {
+        data: ecogesturesData,
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.query.mockResolvedValueOnce(mockQueryResult)
+      const result = await ecogestureService.reinitAllEcogestures()
+      expect(mockClient.save).toBeCalledTimes(3)
+      expect(result).toBe(true)
+    })
+    it('should return true when no ecogestures stored', async () => {
+      const mockQueryResult: QueryResult<Ecogesture[]> = {
+        data: [],
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.query.mockResolvedValueOnce(mockQueryResult)
+      const result = await ecogestureService.reinitAllEcogestures()
+      expect(result).toBe(true)
+    })
+    it('should throw exception when error happened on reinit', async () => {
+      const mockQueryResult: QueryResult<Ecogesture[]> = {
+        data: ecogesturesData,
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.save.mockRejectedValue(new Error())
+      mockClient.query.mockResolvedValueOnce(mockQueryResult)
+      await expect(ecogestureService.reinitAllEcogestures()).rejects.toThrow(
+        new Error()
+      )
+    })
+  })
+
   describe('filterByUsage', () => {
     it('should return ecogesture list including ECS ecogestures', async () => {
       const mockEcogestureList: Ecogesture[] = ecogesturesECSData
diff --git a/src/services/ecogesture.service.ts b/src/services/ecogesture.service.ts
index 409b2e566549bcf49844c2a8b1d362b00a3fd34b..0de5cd9e37f5087d3d6dca8b0a07924f02b551b7 100644
--- a/src/services/ecogesture.service.ts
+++ b/src/services/ecogesture.service.ts
@@ -63,12 +63,31 @@ export default class EcogestureService {
   public async deleteAllEcogestures(): Promise<boolean> {
     const ecogestures = await this.getAllEcogestures()
     try {
-      for (let index = 0; index < ecogestures.length; index++) {
-        await this._client.destroy(ecogestures[index])
+      for (const ecogesture of ecogestures) {
+        await this._client.destroy(ecogesture)
       }
       return true
     } catch (error) {
-      return false
+      console.log('Error deleteAllEcogestures: ', error)
+      throw error
+    }
+  }
+
+  public async reinitAllEcogestures(): Promise<boolean> {
+    const ecogestures = await this.getAllEcogestures()
+    try {
+      for (const ecogesture of ecogestures) {
+        await this.updateEcogesture({
+          ...ecogesture,
+          objective: false,
+          doing: false,
+          viewedInSelection: false,
+        })
+      }
+      return true
+    } catch (error) {
+      console.log('Error reinitAllEcogestures: ', error)
+      throw error
     }
   }
 
diff --git a/src/services/initialization.service.ts b/src/services/initialization.service.ts
index 43ff56592c980d9472d91f301d41e06f1bca6ac5..78e02c12a492be297e3fda21548443b9f985ec40 100644
--- a/src/services/initialization.service.ts
+++ b/src/services/initialization.service.ts
@@ -1,7 +1,14 @@
 import { Client, Q, QueryDefinition } from 'cozy-client'
+import challengeEntityData from 'db/challengeEntity.json'
+import duelEntityData from 'db/duelEntity.json'
+import ecogestureData from 'db/ecogestureData.json'
+import explorationEntityData from 'db/explorationEntity.json'
+import profileData from 'db/profileData.json'
+import quizEntityData from 'db/quizEntity.json'
 import {
+  CHALLENGE_DOCTYPE,
+  DUEL_DOCTYPE,
   ECOGESTURE_DOCTYPE,
-  PROFILE_DOCTYPE,
   EGL_DAY_DOCTYPE,
   EGL_MONTH_DOCTYPE,
   EGL_YEAR_DOCTYPE,
@@ -9,16 +16,16 @@ import {
   ENEDIS_MINUTE_DOCTYPE,
   ENEDIS_MONTH_DOCTYPE,
   ENEDIS_YEAR_DOCTYPE,
+  EXPLORATION_DOCTYPE,
   GRDF_DAY_DOCTYPE,
   GRDF_MONTH_DOCTYPE,
   GRDF_YEAR_DOCTYPE,
-  CHALLENGE_DOCTYPE,
-  DUEL_DOCTYPE,
+  PROFILE_DOCTYPE,
   QUIZ_DOCTYPE,
-  EXPLORATION_DOCTYPE,
 } from 'doctypes'
-
 import { FluidType } from 'enum/fluid.enum'
+import { TimeStep } from 'enum/timeStep.enum'
+import { DateTime } from 'luxon'
 import {
   Dataload,
   FluidPrice,
@@ -28,38 +35,27 @@ import {
   TermsStatus,
   UserChallenge,
 } from 'models'
-
-import EcogestureService from 'services/ecogesture.service'
-import ChallengeService from 'services/challenge.service'
-import ecogestureData from 'db/ecogestureData.json'
-import challengeEntityData from 'db/challengeEntity.json'
-import duelEntityData from 'db/duelEntity.json'
-import quizEntityData from 'db/quizEntity.json'
-import explorationEntityData from 'db/explorationEntity.json'
-
-import ProfileService from 'services/profile.service'
-import profileData from 'db/profileData.json'
-import KonnectorStatusService from 'services/konnectorStatus.service'
-import KonnectorService from 'services/konnector.service'
+import { InitSteps, InitStepsErrors } from 'models/initialisationSteps.model'
+import { ProfileEcogesture } from 'models/profileEcogesture.model'
+import React from 'react'
 import AccountService from 'services/account.service'
-import FluidService from 'services/fluid.service'
+import ChallengeService from 'services/challenge.service'
 import DuelService from 'services/duel.service'
-import QuizService from 'services/quiz.service'
+import EcogestureService from 'services/ecogesture.service'
 import ExplorationService from 'services/exploration.service'
-
-import { hashFile } from 'utils/hash'
+import FluidService from 'services/fluid.service'
+import KonnectorService from 'services/konnector.service'
+import KonnectorStatusService from 'services/konnectorStatus.service'
+import ProfileService from 'services/profile.service'
+import QuizService from 'services/quiz.service'
 import { getActualAnalysisDate } from 'utils/date'
-import { TimeStep } from 'enum/timeStep.enum'
-import { DateTime } from 'luxon'
-import ProfileTypeEntityService from './profileTypeEntity.service'
-import TermsService from './terms.service'
+import { hashFile } from 'utils/hash'
 import log from 'utils/logger'
-import { ProfileEcogesture } from 'models/profileEcogesture.model'
-import ProfileEcogestureService from './profileEcogesture.service'
-import FluidPricesService from './fluidsPrices.service'
 import EnvironmentService from './environment.service'
-import React from 'react'
-import { InitSteps, InitStepsErrors } from 'models/initialisationSteps.model'
+import FluidPricesService from './fluidsPrices.service'
+import ProfileEcogestureService from './profileEcogesture.service'
+import ProfileTypeEntityService from './profileTypeEntity.service'
+import TermsService from './terms.service'
 
 export default class InitializationService {
   private readonly _client: Client
@@ -270,7 +266,6 @@ export default class InitializationService {
     if (hash !== hashEcogestureType) {
       // Update the doctype
       try {
-        loadedEcogestures
         // Deletion of all documents
         await ecogestureService.deleteAllEcogestures()
         // Population with the data
diff --git a/src/services/partnersInfo.service.spec.ts b/src/services/partnersInfo.service.spec.ts
index f96b94fb40c06389eb8c78807f2974ff1e0914db..69aaaade29377e280845288b9bd1a137607ac7e4 100644
--- a/src/services/partnersInfo.service.spec.ts
+++ b/src/services/partnersInfo.service.spec.ts
@@ -14,7 +14,9 @@ describe('PartnersInfo service', () => {
   const partnersInfoService = new PartnersInfoService(mockClient)
 
   it('should return partnersInfo', async () => {
-    const result: PartnersInfo = await partnersInfoService.getPartnersInfo()
+    const result:
+      | PartnersInfo
+      | undefined = await partnersInfoService.getPartnersInfo()
     expect(result).toEqual(undefined)
   })
   it('should return an error', async () => {
diff --git a/src/services/partnersInfo.service.ts b/src/services/partnersInfo.service.ts
index 44089bcd3525f00abf893da03cecc8450c298636..52d4642637e56e75a579b4408eec0ee94aaebf19 100644
--- a/src/services/partnersInfo.service.ts
+++ b/src/services/partnersInfo.service.ts
@@ -1,22 +1,11 @@
 import { Client } from 'cozy-client'
-import { InitStepsErrors } from 'models/initialisationSteps.model'
 import { PartnersInfo } from 'models/partnersInfo.model'
 import EnvironmentService from './environment.service'
 
 export default class PartnersInfoService {
   private readonly _client: Client
-  private readonly _setinitStepError: React.Dispatch<
-    React.SetStateAction<InitStepsErrors | null>
-  >
-
-  constructor(
-    _client: Client,
-    _setinitStepError: React.Dispatch<
-      React.SetStateAction<InitStepsErrors | null>
-    >
-  ) {
+  constructor(_client: Client) {
     this._client = _client
-    this._setinitStepError = _setinitStepError
   }
 
   /*
@@ -24,7 +13,7 @@ export default class PartnersInfoService {
    * On success, respond the partnersInfo
    * Else, throw an error
    */
-  public async getPartnersInfo(): Promise<PartnersInfo> {
+  public async getPartnersInfo(): Promise<PartnersInfo | undefined> {
     const env = new EnvironmentService()
     const remoteUrl = env.isProduction()
       ? `/remote/org.ecolyo.backoffice.partners.info`
@@ -35,9 +24,7 @@ export default class PartnersInfoService {
         .fetchJSON('GET', remoteUrl)
       return result as PartnersInfo
     } catch (error) {
-      this._setinitStepError(InitStepsErrors.PARTNERS_ERROR)
-      console.error(error)
-      throw new Error("Failed to get partners' info")
+      console.error(`getPartnersInfo: Failed to get partners info:${error}`)
     }
   }
 }
diff --git a/src/services/profileEcogesture.service.spec.ts b/src/services/profileEcogesture.service.spec.ts
index 1c516dfb9e48b8e0be508115b9db1c1a18ad707d..75329f55e2394f0fca8c21f22d26357ab2805e41 100644
--- a/src/services/profileEcogesture.service.spec.ts
+++ b/src/services/profileEcogesture.service.spec.ts
@@ -10,7 +10,7 @@ const profileEcogestureService = new ProfileEcogestureService(mockClient)
 describe('ProfileEcogesture service', () => {
   it('should get the Profile Ecogesture', async () => {
     const mockQueryResult: QueryResult<ProfileEcogesture> = {
-      data: mockProfileEcogestureUpdated,
+      data: [mockProfileEcogestureUpdated],
       bookmark: '',
       next: false,
       skip: 0,
diff --git a/src/services/profileEcogesture.service.ts b/src/services/profileEcogesture.service.ts
index 006809ad390dc64e0566382b4b25b9f75eb3de0c..6913923dbcbb8c2cc0bb3040508b8c5b868724e6 100644
--- a/src/services/profileEcogesture.service.ts
+++ b/src/services/profileEcogesture.service.ts
@@ -15,8 +15,8 @@ export default class ProfileEcogestureService {
   public async getProfileEcogesture(): Promise<ProfileEcogesture | null> {
     const query: QueryDefinition = Q(PROFILEECOGESTURE_DOCTYPE)
     const {
-      data: profileEcogesture,
-    }: QueryResult<ProfileEcogesture> = await this._client.query(
+      data: [profileEcogesture],
+    }: QueryResult<ProfileEcogesture[]> = await this._client.query(
       query.limitBy(1)
     )
     if (profileEcogesture) return profileEcogesture
diff --git a/src/services/profileType.service.spec.ts b/src/services/profileType.service.spec.ts
index 892f770474686124727ec81a9725a9078be2cf58..68c0cb5748bc087ed15a1ea2fbe41e8173f45b2e 100644
--- a/src/services/profileType.service.spec.ts
+++ b/src/services/profileType.service.spec.ts
@@ -331,6 +331,11 @@ describe('ProfileType service', () => {
         ProfileTypeStepForm.COOKING_FLUID,
         false
       )
+      expect(nextStep).toEqual(ProfileTypeStepForm.EQUIPMENTS)
+      nextStep = profileTypeFormService.getNextFormStep(
+        ProfileTypeStepForm.EQUIPMENTS,
+        false
+      )
       expect(nextStep).toEqual(ProfileTypeStepForm.UPDATE_DATE)
       nextStep = profileTypeFormService.getNextFormStep(
         ProfileTypeStepForm.UPDATE_DATE,
diff --git a/src/services/profileTypeForm.service.ts b/src/services/profileTypeForm.service.ts
index 1b8ca55ae0df5c8715c2bd2c05ca21725c678c8e..1a4b3339529baf5a41c347c22a99f962ecc6bdb1 100644
--- a/src/services/profileTypeForm.service.ts
+++ b/src/services/profileTypeForm.service.ts
@@ -1,3 +1,4 @@
+import { EquipmentType } from 'enum/ecogesture.enum'
 import { FluidType } from 'enum/fluid.enum'
 import {
   ConstructionYear,
@@ -72,6 +73,8 @@ export default class ProfileTypeFormService {
       case ProfileTypeStepForm.HOT_WATER_EQUIPMENT:
         return ProfileTypeStepForm.COOKING_FLUID
       case ProfileTypeStepForm.COOKING_FLUID:
+        return ProfileTypeStepForm.EQUIPMENTS
+      case ProfileTypeStepForm.EQUIPMENTS:
         return firstProfileType
           ? ProfileTypeStepForm.END
           : ProfileTypeStepForm.UPDATE_DATE
@@ -129,8 +132,10 @@ export default class ProfileTypeFormService {
         return this.profileType.hotWater === IndividualOrCollective.INDIVIDUAL
           ? ProfileTypeStepForm.HOT_WATER_EQUIPMENT
           : ProfileTypeStepForm.HOT_WATER
-      case ProfileTypeStepForm.UPDATE_DATE:
+      case ProfileTypeStepForm.EQUIPMENTS:
         return ProfileTypeStepForm.COOKING_FLUID
+      case ProfileTypeStepForm.UPDATE_DATE:
+        return ProfileTypeStepForm.EQUIPMENTS
       default:
         return ProfileTypeStepForm.HOUSING_TYPE
     }
@@ -244,6 +249,12 @@ export default class ProfileTypeFormService {
           attribute: 'cookingFluid',
           choices: [FluidType.ELECTRICITY, FluidType.GAS],
         }
+      case ProfileTypeStepForm.EQUIPMENTS:
+        return {
+          type: ProfileTypeFormType.EQUIPMENT_SELECTION,
+          attribute: 'equipments',
+          choices: Object.keys(EquipmentType),
+        }
       case ProfileTypeStepForm.UPDATE_DATE:
         return {
           type: ProfileTypeFormType.DATE_SELECTION,
diff --git a/src/services/usageEvent.service.spec.ts b/src/services/usageEvent.service.spec.ts
index a1fc7f891ec869144e1b871266da31f121537432..050435264382bd11622e9062e7184acd64272a03 100644
--- a/src/services/usageEvent.service.spec.ts
+++ b/src/services/usageEvent.service.spec.ts
@@ -5,6 +5,8 @@ import { AddEventParams, UsageEventEntity } from 'models'
 import { QueryResult } from 'cozy-client'
 import {
   allUsageEventsData,
+  connectionAttemptEGLError,
+  connectionAttemptEGLSuccess,
   connectionEventEntitiesData,
   connectionUsageEventsData,
   usageEventData,
@@ -59,6 +61,17 @@ describe('UsageEvent service', () => {
       )
       expect(result).toEqual(true)
     })
+    it('should throw an error', async () => {
+      mockClient.save.mockRejectedValue(new Error())
+      try {
+        await UsageEventService.updateUsageEventsAggregated(
+          mockClient,
+          allUsageEventsData
+        )
+      } catch (error) {
+        expect(error).toEqual(new Error())
+      }
+    })
   })
   describe('getEvents method', () => {
     it('should return all Connection events', async () => {
@@ -75,4 +88,94 @@ describe('UsageEvent service', () => {
       expect(result).toEqual(connectionUsageEventsData)
     })
   })
+  describe('addEventIfDoesntExist method', () => {
+    it('should not add event', async () => {
+      const mockQueryResult: QueryResult<UsageEventEntity[]> = {
+        data: connectionEventEntitiesData,
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.query.mockResolvedValueOnce(mockQueryResult)
+      const result = await UsageEventService.addEventIfDoesntExist(
+        mockClient,
+        { type: UsageEventType.CONNECTION_EVENT },
+        { id: { $gt: 0 } }
+      )
+      expect(result).toEqual(null)
+    })
+    it('should add event', async () => {
+      const mockQueryResult: QueryResult<UsageEventEntity[]> = {
+        data: [],
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.query.mockResolvedValueOnce(mockQueryResult)
+      const mockQueryResult2: QueryResult<UsageEventEntity> = {
+        data: usageEventEntityData,
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.create.mockResolvedValueOnce(mockQueryResult2)
+      const result = await UsageEventService.addEventIfDoesntExist(
+        mockClient,
+        { type: UsageEventType.CONNECTION_EVENT },
+        { id: { $gt: 0 } }
+      )
+      expect(result).toEqual(usageEventData)
+    })
+  })
+  describe('udpateConnectionAttemptEvent method', () => {
+    it('should update the last attempt to true', async () => {
+      const mockQueryResult: QueryResult<UsageEventEntity[]> = {
+        data: [connectionAttemptEGLError],
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      const mockQueryResult2: QueryResult<UsageEventEntity> = {
+        data: connectionAttemptEGLSuccess,
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.query.mockResolvedValueOnce(mockQueryResult)
+      mockClient.save.mockResolvedValueOnce(mockQueryResult2)
+      const result = await UsageEventService.udpateConnectionAttemptEvent(
+        mockClient,
+        'eglgrandlyon'
+      )
+      expect(result).toEqual(connectionAttemptEGLSuccess)
+    })
+    it('should fail to update the attempts', async () => {
+      const mockQueryResult: QueryResult<UsageEventEntity[] | undefined> = {
+        data: undefined,
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.query.mockResolvedValueOnce(mockQueryResult)
+      const result = await UsageEventService.udpateConnectionAttemptEvent(
+        mockClient,
+        'eglgrandlyon'
+      )
+      expect(result).toEqual(undefined)
+    })
+    it('should find no attempt', async () => {
+      const mockQueryResult: QueryResult<UsageEventEntity[] | undefined> = {
+        data: [],
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.query.mockResolvedValueOnce(mockQueryResult)
+      const result = await UsageEventService.udpateConnectionAttemptEvent(
+        mockClient,
+        'eglgrandlyon'
+      )
+      expect(result).toEqual(undefined)
+    })
+  })
 })
diff --git a/src/services/usageEvent.service.ts b/src/services/usageEvent.service.ts
index 0d5cb79a98e47517b94b902790c3d4c5dccce278..09f5bb92927262523542286e3abd1131ff4f7816 100644
--- a/src/services/usageEvent.service.ts
+++ b/src/services/usageEvent.service.ts
@@ -6,6 +6,7 @@ import {
   MongoSelector,
 } from 'cozy-client'
 import { USAGEEVENT_DOCTYPE } from 'doctypes'
+import { UsageEventType } from 'enum/usageEvent.enum'
 import { DateTime } from 'luxon'
 import {
   AddEventParams,
@@ -60,6 +61,45 @@ export default class UsageEventService {
     return null
   }
 
+  /**
+   *
+   * @param {Client} client
+   * @param {string} konnectorSlug
+   * @returns
+   */
+  static async udpateConnectionAttemptEvent(
+    client: Client,
+    konnectorSlug: string
+  ): Promise<UsageEventEntity | undefined> {
+    try {
+      //Get last Connection attempt Event
+      const query: QueryDefinition = Q(USAGEEVENT_DOCTYPE)
+        .where({
+          type: UsageEventType.KONNECTOR_ATTEMPT_EVENT,
+          target: konnectorSlug,
+          result: 'error',
+        })
+        .sortBy([{ eventDate: 'desc' }])
+        .limitBy(1)
+      const {
+        data: [usageEventEntity],
+      }: QueryResult<UsageEventEntity[]> = await client.query(query)
+      if (usageEventEntity) {
+        const updatedEvent: UsageEventEntity = {
+          ...usageEventEntity,
+          result: 'success',
+        }
+        const { data: savedEvent } = await client.save(updatedEvent)
+        return savedEvent
+      }
+    } catch (err) {
+      console.log(
+        'UsageEvent service error on udpateConnectionAttemptEvent : ',
+        err
+      )
+    }
+  }
+
   /**
    * updateUsageEventsAggregated
    * @param {Client} client
@@ -77,7 +117,10 @@ export default class UsageEventService {
           aggregated: true,
         })
       } catch (error) {
-        console.log(error)
+        console.log(
+          'UsageEvent service error on updateUsageEventsAggregated : ',
+          error
+        )
       }
     }
     return true
diff --git a/src/store/global/global.reducer.ts b/src/store/global/global.reducer.ts
index 0bbbbc10aa323af51df0cf642dc6c721fd93ebd4..143410b6af1e659743062bf72b53a20353230365 100644
--- a/src/store/global/global.reducer.ts
+++ b/src/store/global/global.reducer.ts
@@ -110,9 +110,12 @@ const getFluidTypesFromStatus = (fluidStatus: FluidStatus[]): FluidType[] => {
   const fluidTypes: FluidType[] = []
   fluidStatus.forEach(fluid => {
     if (
-      fluid.status !== FluidState.KONNECTOR_NOT_FOUND &&
-      fluid.status !== FluidState.NOT_CONNECTED &&
-      fluid.status !== FluidState.ERROR_LOGIN_FAILED
+      (fluid.status !== FluidState.KONNECTOR_NOT_FOUND &&
+        fluid.status !== FluidState.NOT_CONNECTED &&
+        fluid.status !== FluidState.ERROR_LOGIN_FAILED) ||
+      //Handle Login Error case for oauth konnectors
+      (fluid.status === FluidState.ERROR_LOGIN_FAILED &&
+        fluid.fluidType !== FluidType.WATER)
     ) {
       fluidTypes.push(fluid.fluidType)
     }
diff --git a/src/styles/base/_color.scss b/src/styles/base/_color.scss
index eb718058d534d4150daa2c8b9b1ad197b11c2ae8..8e6b7a884acf9aa1f24c963438205008fb903821 100644
--- a/src/styles/base/_color.scss
+++ b/src/styles/base/_color.scss
@@ -19,6 +19,9 @@ $gold-40: rgba(227, 184, 42, 0.4);
 $gold-light: #deaf0e;
 $gold-shadow: #e3b82a;
 
+/** ORANGE **/
+$orange: #ec9d41;
+
 /** BLUE **/
 $blue: #58ffff;
 $blue-40: #58ffff40;
diff --git a/src/targets/browser/index.ejs b/src/targets/browser/index.ejs
index 41ed7c3d069e0d45ec567d624d886ecdb79c1b90..3f5bf59a4e99894939c462c357c162ffc64e53de 100644
--- a/src/targets/browser/index.ejs
+++ b/src/targets/browser/index.ejs
@@ -18,6 +18,9 @@
     <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" />
 
     <% _.forEach(htmlWebpackPlugin.files.css, function(file) { %>
         <link rel="stylesheet" href="<%- file %>">
diff --git a/src/targets/services/aggregatorUsageEvents.ts b/src/targets/services/aggregatorUsageEvents.ts
index 854e74c7aa9bdedb8883cab8e569f1927bc65343..4f526df8cf8d605e29e594c7bf319c0e5e9418c2 100644
--- a/src/targets/services/aggregatorUsageEvents.ts
+++ b/src/targets/services/aggregatorUsageEvents.ts
@@ -381,16 +381,24 @@ const calculateConnectedKonnectorPerDay = async (client: Client) => {
  */
 const buildProfileWithFuildType = async (
   client: Client,
-  fluidType: FluidType
+  fluidType: FluidType,
+  monthToAggregate?: number
 ): Promise<string> => {
   let formatedProfile = ''
   const profile = await new ProfileService(client).getProfile()
   // If profile is not filled, return empty string
-  if (profile && !profile.isProfileTypeCompleted) return formatedProfile
 
-  const profileType = await new ProfileTypeEntityService(
-    client
-  ).getProfileType()
+  if (profile && !profile.isProfileTypeCompleted) return formatedProfile
+  const date = monthToAggregate
+    ? DateTime.local()
+        .setZone('utc', {
+          keepLocalTime: true,
+        })
+        .set({ month: monthToAggregate })
+    : null
+  const profileType = await new ProfileTypeEntityService(client).getProfileType(
+    date
+  )
   if (fluidType === FluidType.ELECTRICITY) {
     if (
       profile &&
@@ -473,10 +481,15 @@ const buildProfileWithFuildType = async (
 
 const getConsumptionValue = async (
   client: Client,
-  fluidType: FluidType[]
+  fluidType: FluidType[],
+  monthToAggregate?: number
 ): Promise<PerformanceIndicator[]> => {
   const consumptionService = new ConsumptionService(client)
-  const analysisDate = DateTime.local().setZone('utc', { keepLocalTime: true })
+  const analysisDate = monthToAggregate
+    ? DateTime.local()
+        .setZone('utc', { keepLocalTime: true })
+        .set({ month: monthToAggregate })
+    : DateTime.local().setZone('utc', { keepLocalTime: true })
   const periods = {
     timePeriod: {
       startDate: analysisDate.minus({ month: 1 }).startOf('month'),
@@ -501,13 +514,16 @@ const getConsumptionValue = async (
  * @param client
  * @group [{ slug }, { seniority (in month) }, { profile (ECS, chauffage, etc...) }],
  */
-const calculateConsumptionVariation = async (client: Client) => {
+const calculateConsumptionVariation = async (
+  client: Client,
+  monthToAggregate?: number
+) => {
   log('info', `calculateConsumptionVariation`)
-  const consumptionData = await getConsumptionValue(client, [
-    FluidType.ELECTRICITY,
-    FluidType.GAS,
-    FluidType.WATER,
-  ])
+  const consumptionData = await getConsumptionValue(
+    client,
+    [FluidType.ELECTRICITY, FluidType.GAS, FluidType.WATER],
+    monthToAggregate
+  )
   for (const fluidType in [
     FluidType.ELECTRICITY,
     FluidType.GAS,
@@ -521,21 +537,40 @@ const calculateConsumptionVariation = async (client: Client) => {
       })
 
       if (firstConnectionEvent) {
-        const seniority = DateTime.local()
-          .setZone('utc', {
-            keepLocalTime: true,
-          })
-          .diff(firstConnectionEvent.eventDate).months
+        const seniority = 0
+        // Seniority is set to 0, otherwise the indicator is too specific
+        // monthToAggregate
+        //   ? DateTime.local()
+        //       .setZone('utc', {
+        //         keepLocalTime: true,
+        //       })
+        //       .set({ month: monthToAggregate })
+        //       .diff(firstConnectionEvent.eventDate, 'month')
+        //       .get('month')
+        //   : DateTime.local()
+        //       .setZone('utc', {
+        //         keepLocalTime: true,
+        //       })
+        //       .diff(firstConnectionEvent.eventDate, 'month')
+        //       .get('month')
 
         const consumptionVariationIndicator: Indicator = {
           createdBy: 'ecolyo',
           measureName: DaccEvent.CONSUMPTION_VARIATION_MONTHLY,
-          startDate: DateTime.local()
-            .setZone('utc', {
-              keepLocalTime: true,
-            })
-            .startOf('day')
-            .toISODate(),
+          startDate: monthToAggregate
+            ? DateTime.local()
+                .setZone('utc', {
+                  keepLocalTime: true,
+                })
+                .set({ month: monthToAggregate })
+                .startOf('day')
+                .toISODate()
+            : DateTime.local()
+                .setZone('utc', {
+                  keepLocalTime: true,
+                })
+                .startOf('day')
+                .toISODate(),
           value:
             consumptionData[fluidType] &&
             consumptionData[fluidType].percentageVariation
@@ -544,37 +579,63 @@ const calculateConsumptionVariation = async (client: Client) => {
           // eslint-disable-next-line @typescript-eslint/camelcase
           group1: { fluid_type: FluidType[fluidType].toLowerCase() },
           // eslint-disable-next-line @typescript-eslint/camelcase
-          group2: { seniority: seniority.toString() },
+          group2: { seniority: Math.round(seniority).toString() },
           group3: {
             // eslint-disable-next-line @typescript-eslint/camelcase
             fluid_usage: await buildProfileWithFuildType(
               client,
-              getFluidType(FluidType[fluidType])
+              getFluidType(FluidType[fluidType]),
+              monthToAggregate
             ),
           },
         }
 
         // if user wasnt connected during current month, dont send indicator
         const events: UsageEvent[] = await UsageEventService.getEvents(client, {
-          eventDate: {
-            $lt: DateTime.local()
-              .setZone('utc', {
-                keepLocalTime: true,
-              })
-              .endOf('month')
-              .minus({ month: 1 })
-              .toString(),
-            $gt: DateTime.local()
-              .setZone('utc', {
-                keepLocalTime: true,
-              })
-              .startOf('month')
-              .minus({ month: 1 })
-              .toString(),
-          },
+          eventDate: monthToAggregate
+            ? {
+                $lt: DateTime.local()
+                  .setZone('utc', {
+                    keepLocalTime: true,
+                  })
+                  .set({ month: monthToAggregate })
+                  .endOf('month')
+                  .minus({ month: 1 })
+                  .toString(),
+                $gt: DateTime.local()
+                  .setZone('utc', {
+                    keepLocalTime: true,
+                  })
+                  .set({ month: monthToAggregate })
+                  .startOf('month')
+                  .minus({ month: 1 })
+                  .toString(),
+              }
+            : {
+                $lt: DateTime.local()
+                  .setZone('utc', {
+                    keepLocalTime: true,
+                  })
+                  .endOf('month')
+                  .minus({ month: 1 })
+                  .toString(),
+                $gt: DateTime.local()
+                  .setZone('utc', {
+                    keepLocalTime: true,
+                  })
+                  .startOf('month')
+                  .minus({ month: 1 })
+                  .toString(),
+              },
         })
 
-        if (events.length > 0 || consumptionVariationIndicator.value !== 0) {
+        if (events.length > 0 && consumptionVariationIndicator.value !== 0) {
+          log(
+            'info',
+            `Send variation indicator for ${monthToAggregate} : ${JSON.stringify(
+              consumptionVariationIndicator
+            )}`
+          )
           await sendIndicator(consumptionVariationIndicator, client)
         }
       }
@@ -582,48 +643,85 @@ const calculateConsumptionVariation = async (client: Client) => {
   }
 }
 
-const sendConnectionCount = async (client: Client) => {
+const sendConnectionCount = async (
+  client: Client,
+  monthToAggregate?: number
+) => {
   log('info', `sendConnectionCount`)
   // Get daily connexion
   const events: UsageEvent[] = await UsageEventService.getEvents(client, {
     type: UsageEventType.CONNECTION_EVENT,
-    eventDate: {
-      $lt: DateTime.local()
-        .setZone('utc', {
-          keepLocalTime: true,
-        })
-        .endOf('month')
-        .minus({ month: 1 })
-        .toString(),
-      $gt: DateTime.local()
-        .setZone('utc', {
-          keepLocalTime: true,
-        })
-        .startOf('month')
-        .minus({ month: 1 })
-        .toString(),
-    },
+    eventDate: monthToAggregate
+      ? {
+          $lt: DateTime.local()
+            .setZone('utc', {
+              keepLocalTime: true,
+            })
+            .set({ month: monthToAggregate })
+            .minus({ month: 1 })
+            .endOf('month')
+            .toString(),
+          $gt: DateTime.local()
+            .setZone('utc', {
+              keepLocalTime: true,
+            })
+            .set({ month: monthToAggregate })
+            .minus({ month: 1 })
+            .startOf('month')
+            .toString(),
+        }
+      : {
+          $lt: DateTime.local()
+            .setZone('utc', {
+              keepLocalTime: true,
+            })
+            .endOf('month')
+            .minus({ month: 1 })
+            .toString(),
+          $gt: DateTime.local()
+            .setZone('utc', {
+              keepLocalTime: true,
+            })
+            .startOf('month')
+            .minus({ month: 1 })
+            .toString(),
+        },
   })
 
+  let uniqueDates = 0
   // If there is at least one connection, filter each unique connection in order to send it
   if (events.length > 0) {
-    const uniqueDates = events
+    uniqueDates = events
       .map(s => s.eventDate.day)
-      .filter((s, i, a) => a.indexOf(s) == i)
+      .filter((s, i, a) => a.indexOf(s) == i).length
+  }
 
-    const connectionMonthly: Indicator = {
-      createdBy: 'ecolyo',
-      measureName: DaccEvent.CONNECTION_COUNT_MONTHLY,
-      startDate: DateTime.local()
-        .setZone('utc', {
-          keepLocalTime: true,
-        })
-        .startOf('day')
-        .toISODate(),
-      value: uniqueDates.length,
-    }
-    await sendIndicator(connectionMonthly, client)
+  const connectionMonthly: Indicator = {
+    createdBy: 'ecolyo',
+    measureName: DaccEvent.CONNECTION_COUNT_MONTHLY,
+    startDate: monthToAggregate
+      ? DateTime.local()
+          .setZone('utc', {
+            keepLocalTime: true,
+          })
+          .set({ month: monthToAggregate })
+          .startOf('day')
+          .toISODate()
+      : DateTime.local()
+          .setZone('utc', {
+            keepLocalTime: true,
+          })
+          .startOf('day')
+          .toISODate(),
+    value: uniqueDates,
   }
+  log(
+    'info',
+    `Send connectionMonthly indicator for ${monthToAggregate} : ${JSON.stringify(
+      connectionMonthly
+    )}`
+  )
+  await sendIndicator(connectionMonthly, client)
 }
 
 const sendProfileCount = async (client: Client) => {
@@ -805,6 +903,63 @@ const sendKonnectorEvents = async (client: Client) => {
   })
 }
 
+/**
+ * Send the total number of partner connection attempts and the number of success
+ * @param client CozyClient
+ */
+const sendKonnectorAttemptsMonthly = async (client: Client) => {
+  log('info', `sendkonnectorAttemptsMonthly`)
+  const slugs = Object.values(FluidSlugType)
+  const today = DateTime.local().setZone('utc', {
+    keepLocalTime: true,
+  })
+  // Count the number of connection and refresh events
+  slugs.forEach(async slug => {
+    const konnectorEvents: UsageEvent[] = await UsageEventService.getEvents(
+      client,
+      {
+        type: UsageEventType.KONNECTOR_ATTEMPT_EVENT,
+        target: slug,
+        eventDate: {
+          $lte: today
+            .endOf('month')
+            .minus({ month: 1 })
+            .toString(),
+          $gte: today
+            .startOf('month')
+            .minus({ month: 1 })
+            .toString(),
+        },
+      },
+      true
+    )
+    log('info', ` : ${JSON.stringify(konnectorEvents)}`)
+
+    // Check if there is a success (will be false or true since the event is triggered only for the first connexion)
+    const success: boolean =
+      konnectorEvents.filter(event => event.result == 'success').length > 0
+
+    const konnectorAttempts: Indicator = {
+      createdBy: 'ecolyo',
+      measureName: DaccEvent.UNINITIALIZED_KONNECTOR_ATTEMPTS_MONTHLY,
+      // eslint-disable-next-line @typescript-eslint/camelcase
+      group1: { slug: slug },
+      group2: { success: success },
+      startDate: DateTime.local()
+        .setZone('utc', {
+          keepLocalTime: true,
+        })
+        .startOf('day')
+        .toISODate(),
+      value: konnectorEvents.length,
+    }
+    // Send indicator if there is connection events
+    if (konnectorEvents.length > 0) {
+      await sendIndicator(konnectorAttempts, client)
+    }
+  })
+}
+
 const aggregateEvents = async (
   events: UsageEvent[],
   eventType: UsageEventType,
@@ -1168,13 +1323,30 @@ const AggregatorUsageEvents = async ({
       })
       .startOf('day').day === profile.monthlyAnalysisDate.day
   ) {
-    calculateConsumptionVariation(client)
-    sendEmailSubscription(client)
-    sendHalfHourConsumption(client)
-    sendKonnectorEvents(client)
-    sendConnectionCount(client)
-    sendProfileCount(client)
+    await sendKonnectorAttemptsMonthly(client)
+    await calculateConsumptionVariation(client)
+    await sendEmailSubscription(client)
+    await sendHalfHourConsumption(client)
+    await sendKonnectorEvents(client)
+    await sendConnectionCount(client)
+    await sendProfileCount(client)
   }
+
+  log('info', `Recalculates errored indicators`)
+  const today: DateTime = DateTime.local()
+    .setZone('utc', {
+      keepLocalTime: true,
+    })
+    .startOf('day')
+  const lastMonth = 5
+  if (today.day === 11 && today.month === lastMonth) {
+    let monthToAggregate = 1
+    for (monthToAggregate; monthToAggregate <= lastMonth; monthToAggregate++) {
+      await calculateConsumptionVariation(client, monthToAggregate)
+      await sendConnectionCount(client, monthToAggregate)
+    }
+  }
+
   const uniqueReadUsageEvents: UsageEvent[] = uniq(readUsageEvents)
   log(
     'info',
diff --git a/src/targets/services/consumptionAlert.ts b/src/targets/services/consumptionAlert.ts
index 890094a4f556d14284177812efb1c25cf606c889..44c288a08bf78d073cd023ac2558299425af9f83 100644
--- a/src/targets/services/consumptionAlert.ts
+++ b/src/targets/services/consumptionAlert.ts
@@ -89,6 +89,7 @@ const consumptionAlert = async ({ client }: ConsumptionAlertProps) => {
     unsubscribeUrl: `${appLink}/#/options`,
     userLimit: userProfil.waterDailyConsumptionLimit,
     limitDate: `${alertDay.day} ${getPreviousMonthName(alertDay)}`,
+    consumption: lastDayValue,
   })
 
   const mailData = {
diff --git a/src/targets/vendor/assets/manifest.json b/src/targets/vendor/assets/manifest.json
index cca769799afc6721d6167d0c680f601682457add..710192639b30da96b97d33800979c36ea168c2da 100644
--- a/src/targets/vendor/assets/manifest.json
+++ b/src/targets/vendor/assets/manifest.json
@@ -14,8 +14,8 @@
       "type": "image/png"
     }
   ],
-  "theme_color": "#ffffff",
-  "background_color": "#ffffff",
+  "theme_color": "#343641",
+  "background_color": "#121212",
   "display": "standalone",
   "orientation": "portrait-primary"
 }
diff --git a/src/utils/utils.ts b/src/utils/utils.ts
index 9489a28f540e8c99dc726b41fc2d2a4aa01a2248..2a7a70595f8270beb83fd52d3b0f4f375caef892 100644
--- a/src/utils/utils.ts
+++ b/src/utils/utils.ts
@@ -21,6 +21,8 @@ export function getKonnectorUpdateError(type: string) {
   switch (type.toUpperCase()) {
     case 'USER_ACTION_NEEDED.OAUTH_OUTDATED':
       return KonnectorUpdate.ERROR_UPDATE_OAUTH
+    case 'LOGIN_FAILED':
+      return KonnectorUpdate.LOGIN_FAILED
     default:
       return KonnectorUpdate.ERROR_UPDATE
   }
@@ -35,7 +37,6 @@ export function isKonnectorActive(
       fluidStatus.filter(
         fluid =>
           fluid.status === FluidState.NOT_CONNECTED ||
-          fluid.status === FluidState.ERROR_LOGIN_FAILED ||
           fluid.status === FluidState.KONNECTOR_NOT_FOUND
       ).length === 3
     ) {
diff --git a/tests/__mocks__/client.ts b/tests/__mocks__/client.ts
index 3f49f639a431c5de2e011477f7c1db05d3880da0..3118714bde4d0e47cbbd4358e1feb0094b10d814 100644
--- a/tests/__mocks__/client.ts
+++ b/tests/__mocks__/client.ts
@@ -3,7 +3,9 @@ import { Client } from 'cozy-client'
 const mockClient = ({
   query: jest.fn(),
   create: jest.fn(),
-  save: jest.fn(),
+  save: jest.fn().mockReturnValue({
+    data: {},
+  }),
   saveAll: jest.fn(),
   destroy: jest.fn(),
   collection: jest.fn().mockReturnValue({
@@ -16,7 +18,7 @@ const mockClient = ({
     version: '0.0.0',
   },
   options: {
-    uri: 'http://cozy.tools:8080',
+    uri: 'http://cozy.tools:8080', // NOSONAR
   },
 } as unknown) as jest.Mocked<Client>
 
diff --git a/tests/__mocks__/usageEventsData.mock.ts b/tests/__mocks__/usageEventsData.mock.ts
index 388be00920c07b262943ba20503d837d63536c48..dde061dd292225d143dd101c769ad23558cbe888 100644
--- a/tests/__mocks__/usageEventsData.mock.ts
+++ b/tests/__mocks__/usageEventsData.mock.ts
@@ -106,6 +106,22 @@ export const connectionEventEntitiesData: UsageEventEntity[] = [
     aggregated: false,
   },
 ]
+export const connectionAttemptEGLError: UsageEventEntity = {
+  _id: '00078',
+  type: UsageEventType.KONNECTOR_ATTEMPT_EVENT,
+  target: 'eglgrandlyon',
+  result: 'error',
+  eventDate: '2020-10-10T08:08:08.008Z',
+  aggregated: false,
+}
+export const connectionAttemptEGLSuccess: UsageEventEntity = {
+  _id: '00078',
+  type: UsageEventType.KONNECTOR_ATTEMPT_EVENT,
+  target: 'eglgrandlyon',
+  result: 'success',
+  eventDate: '2020-10-10T08:08:08.008Z',
+  aggregated: false,
+}
 
 export const connectionUsageEventsData: UsageEvent[] = [
   {