diff --git a/client/src/pages/AccountSelection.tsx b/client/src/pages/AccountSelection.tsx
index 708f1eb..f8daf0a 100644
--- a/client/src/pages/AccountSelection.tsx
+++ b/client/src/pages/AccountSelection.tsx
@@ -36,7 +36,7 @@
 const AccountSelection = () => {
   const navigate = useNavigate();
   const [loaded, setLoaded] = useState(false);
-  const [error, setError] = useState(false);
+  const [, setError] = useState(false);
   const [accounts, setAccounts] = useState<Account[]>([]);
 
   authManager.authenticate('admin', 'admin');
diff --git a/client/src/pages/AccountSettings.tsx b/client/src/pages/AccountSettings.tsx
index b09fb65..f7b5e4f 100644
--- a/client/src/pages/AccountSettings.tsx
+++ b/client/src/pages/AccountSettings.tsx
@@ -16,67 +16,16 @@
  * <https://www.gnu.org/licenses/>.
  */
 import { Container } from '@mui/material';
-import { Account, HttpStatusCode } from 'jami-web-common';
-import { useEffect } from 'react';
-import { useNavigate } from 'react-router-dom';
 
 import AccountPreferences from '../components/AccountPreferences';
 import Header from '../components/Header';
-import ProcessingRequest from '../components/ProcessingRequest';
-import { setAccount } from '../redux/appSlice';
-import { useAppDispatch, useAppSelector } from '../redux/hooks';
-import { getAccessToken, setAccessToken } from '../utils/auth';
-import { apiUrl } from '../utils/constants';
 
 export default function AccountSettings() {
-  const dispatch = useAppDispatch();
-  const navigate = useNavigate();
-
-  const { account } = useAppSelector((state) => state.userInfo);
-  const accessToken = getAccessToken();
-
-  useEffect(() => {
-    if (accessToken) {
-      const getAccount = async () => {
-        const url = new URL('/account', apiUrl);
-        let response: Response;
-
-        try {
-          response = await fetch(url, {
-            method: 'GET',
-            mode: 'cors',
-            headers: {
-              Authorization: `Bearer ${accessToken}`,
-            },
-            referrerPolicy: 'no-referrer',
-          });
-        } catch (err) {
-          setAccessToken('');
-          dispatch(setAccount(undefined));
-          navigate('/', { replace: true });
-          return;
-        }
-
-        if (response.status === HttpStatusCode.Ok) {
-          const serializedAccount = await response.json();
-          const account = Account.from(serializedAccount);
-          dispatch(setAccount(account));
-        } else if (response.status === HttpStatusCode.Unauthorized) {
-          setAccessToken('');
-          dispatch(setAccount(undefined));
-          navigate('/', { replace: true });
-        }
-      };
-
-      getAccount();
-    }
-  }, [accessToken, dispatch, navigate]);
-
   // TODO: Improve component and sub-components UI.
   return (
     <Container maxWidth="sm">
       <Header />
-      {account ? <AccountPreferences account={account} /> : <ProcessingRequest open={true} />}
+      <AccountPreferences />
     </Container>
   );
 }
diff --git a/client/src/pages/DeprecatedAccountSettings.tsx b/client/src/pages/DeprecatedAccountSettings.tsx
index 4a37cd9..f69334d 100644
--- a/client/src/pages/DeprecatedAccountSettings.tsx
+++ b/client/src/pages/DeprecatedAccountSettings.tsx
@@ -23,7 +23,7 @@
 import authManager from '../AuthManager';
 import AccountPreferences from '../components/AccountPreferences';
 import Header from '../components/Header';
-import { setAccount, setAccountId } from '../redux/appSlice';
+import { setAccountId } from '../redux/appSlice';
 import { useAppDispatch } from '../redux/hooks';
 
 type AccountSettingsProps = {
@@ -55,7 +55,6 @@
         console.log(result);
         const account = Account.from(result);
         account.setDevices(result.devices);
-        dispatch(setAccount(account));
         setLocalAccount(account);
       })
       .catch((e) => console.log(e));
diff --git a/client/src/pages/Messenger.tsx b/client/src/pages/Messenger.tsx
index 0d13d5a..c38294a 100644
--- a/client/src/pages/Messenger.tsx
+++ b/client/src/pages/Messenger.tsx
@@ -83,7 +83,7 @@
         contact.setRegisteredName(response.name);
         setSearchResults(contact ? Conversation.fromSingleContact(accountId, contact) : undefined);
       })
-      .catch((e) => {
+      .catch(() => {
         setSearchResults(undefined);
       });
     // return () => controller.abort() // crash on React18
diff --git a/client/src/pages/Home.tsx b/client/src/pages/Welcome.tsx
similarity index 95%
rename from client/src/pages/Home.tsx
rename to client/src/pages/Welcome.tsx
index cdebb42..59899ea 100644
--- a/client/src/pages/Home.tsx
+++ b/client/src/pages/Welcome.tsx
@@ -27,7 +27,7 @@
 
 const borderRadius = 30;
 
-export default function Home() {
+export default function Welcome() {
   const theme: Theme = useTheme();
   const [isRegistrationDisplayed, setIsRegistrationDisplayed] = useState<boolean>(false);
 
@@ -90,9 +90,7 @@
                 sx={{ mt: theme.typography.pxToRem(30), mb: theme.typography.pxToRem(20) }}
               />
             )}
-            <Box className="home-child" sx={{ height: `${isMobile ? 'auto' : '100%'}` }}>
-              {child}
-            </Box>
+            <Box sx={{ height: `${isMobile ? 'auto' : '100%'}` }}>{child}</Box>
           </Grid>
         </Grid>
       </Paper>
