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/package.json b/package.json
index 8fbaf0d8cccebc48c3e3e1d9dcc95dc46116444b..bce03c091fa703e53828633ddc74c8aec447e271 100644
--- a/package.json
+++ b/package.json
@@ -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/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/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/KonnectorViewerCard.tsx b/src/components/Konnector/KonnectorViewerCard.tsx
index d4c8098182432dc432703aca2fac730798208c73..db42376c6f019b40c3903d818259e6fffe7acf8a 100644
--- a/src/components/Konnector/KonnectorViewerCard.tsx
+++ b/src/components/Konnector/KonnectorViewerCard.tsx
@@ -255,10 +255,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
@@ -305,6 +307,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
@@ -335,9 +404,7 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
           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 +432,6 @@ const KonnectorViewerCard: React.FC<KonnectorViewerCardProps> = ({
     sendUsageEventError,
     fluidSlug,
     sendUsageEventSuccess,
-    fluidStatus.connection,
   ])
 
   useEffect(() => {
@@ -409,27 +475,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 +485,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/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/locales/fr.json b/src/locales/fr.json
index 147c7f91e0e7ee29591a18e8bff438e811e59e41..56d236eb74f5573f5477e72dabe14097b3f6f2ce 100644
--- a/src/locales/fr.json
+++ b/src/locales/fr.json
@@ -680,6 +680,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 +701,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 +724,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/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/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
     ) {