diff --git a/client/src/App.tsx b/client/src/App.tsx
index f5c36a7..86c226f 100644
--- a/client/src/App.tsx
+++ b/client/src/App.tsx
@@ -23,9 +23,7 @@
 import { apiUrl } from './utils/constants';
 
 export async function checkSetupStatus(): Promise<boolean> {
-  const { data } = await axios.get('/setup/check', {
-    baseURL: apiUrl,
-  });
+  const { data } = await axios.get('/setup/check', { baseURL: apiUrl });
   return data.isSetupComplete;
 }
 
diff --git a/client/src/components/ContactList.jsx b/client/src/components/ContactList.jsx
index 578d3c9..1f98091 100644
--- a/client/src/components/ContactList.jsx
+++ b/client/src/components/ContactList.jsx
@@ -61,7 +61,7 @@
   const getContactDetails = async () => {
     const controller = new AbortController();
     try {
-      const data = await axiosInstance.get(`/contacts/${currentContact.id}`, {
+      const { data } = await axiosInstance.get(`/contacts/${currentContact.id}`, {
         signal: controller.signal,
       });
       console.log('CONTACT LIST - DETAILS: ', data);
diff --git a/client/src/components/ConversationListItem.tsx b/client/src/components/ConversationListItem.tsx
index aeef7de..9fa1acc 100644
--- a/client/src/components/ConversationListItem.tsx
+++ b/client/src/components/ConversationListItem.tsx
@@ -117,7 +117,7 @@
   const getContactDetails = async () => {
     const controller = new AbortController();
     try {
-      const data = await axiosInstance.get(`/contacts/${userId}`, {
+      const { data } = await axiosInstance.get(`/contacts/${userId}`, {
         signal: controller.signal,
       });
       console.log('CONTACT LIST - DETAILS: ', data);
diff --git a/client/src/components/UsernameChooser.jsx b/client/src/components/UsernameChooser.jsx
index 77c1d73..19b8380 100644
--- a/client/src/components/UsernameChooser.jsx
+++ b/client/src/components/UsernameChooser.jsx
@@ -33,18 +33,14 @@
   useEffect(() => {
     if (isInputValid(query)) {
       setIsLoading(true);
-      axios
-        .get(`/ns/username/${query}`, {
-          baseURL: apiUrl,
-        })
-        .then((res) => {
-          setIsLoading(false);
-          if (res.status === 200) {
-            setData(res.data);
-          } else {
-            throw res.status;
-          }
-        });
+      axios.get(`/ns/username/${query}`, { baseURL: apiUrl }).then((res) => {
+        setIsLoading(false);
+        if (res.status === 200) {
+          setData(res.data);
+        } else {
+          throw res.status;
+        }
+      });
     } else {
       setError(400);
     }
diff --git a/client/src/pages/SetupLogin.tsx b/client/src/pages/SetupLogin.tsx
index 4608a59..d34d366 100644
--- a/client/src/pages/SetupLogin.tsx
+++ b/client/src/pages/SetupLogin.tsx
@@ -25,6 +25,7 @@
 
 import { checkSetupStatus } from '../App';
 import { apiUrl } from '../utils/constants';
+import { InvalidPassword } from '../utils/errors';
 
 export default function SetupLogin() {
   const [isSetupComplete, setIsSetupComplete] = useState(false);
@@ -38,49 +39,21 @@
     checkSetupStatus().then(setIsSetupComplete);
   }, []);
 
-  const adminCreation = async (password: string) => {
-    let response: Response;
-    try {
-      response = await axios.post(
-        '/setup/admin/create',
-        { password },
-        {
-          baseURL: apiUrl,
-        }
-      );
-    } catch (e) {
-      throw new Error(`Admin creation failed`);
-    }
-
-    if (response.status !== HttpStatusCode.Created) {
-      throw new Error('Admin creation failed');
-    }
+  const registerAdmin = async (password: string) => {
+    await axios.post('/setup/admin/create', { password }, { baseURL: apiUrl });
   };
 
-  const adminLogin = async (password: string) => {
-    let response: Response;
+  const loginAdmin = async (password: string) => {
     try {
-      response = await axios.post(
-        '/setup/admin/login',
-        { password },
-        {
-          baseURL: apiUrl,
-        }
-      );
-    } catch (e) {
-      throw new Error(`Admin login failed`);
+      const { data } = await axios.post('/setup/admin/login', { password }, { baseURL: apiUrl });
+      localStorage.setItem('adminAccessToken', data.accessToken);
+    } catch (e: any) {
+      if (e.response?.status === HttpStatusCode.Forbidden) {
+        throw new InvalidPassword();
+      } else {
+        throw e;
+      }
     }
-
-    if (response.status === HttpStatusCode.Forbidden) {
-      throw new Error('Invalid password');
-    }
-
-    if (response.status !== HttpStatusCode.Ok) {
-      throw new Error('Admin login failed');
-    }
-
-    const data: { accessToken: string } = await response.json();
-    localStorage.setItem('adminAccessToken', data.accessToken);
   };
 
   const isValid = isSetupComplete || (password && password === passwordRepeat);
@@ -92,9 +65,9 @@
 
     try {
       if (!isSetupComplete) {
-        await adminCreation(password);
+        await registerAdmin(password);
       }
-      await adminLogin(password);
+      await loginAdmin(password);
     } catch (e) {
       console.error(e);
       navigate('/login');
diff --git a/client/src/utils/auth.ts b/client/src/utils/auth.ts
index 3704fe4..822771c 100644
--- a/client/src/utils/auth.ts
+++ b/client/src/utils/auth.ts
@@ -41,9 +41,7 @@
 
 export async function isNameRegistered(name: string): Promise<boolean> {
   try {
-    await axios.get(`/ns/username/${name}`, {
-      baseURL: apiUrl,
-    });
+    await axios.get(`/ns/username/${name}`, { baseURL: apiUrl });
     return true;
   } catch (e: any) {
     if (e.response?.status !== HttpStatusCode.NotFound) {
@@ -63,24 +61,12 @@
 }
 
 export async function registerUser(username: string, password: string): Promise<void> {
-  await axios.post(
-    '/auth/new-account',
-    { username, password },
-    {
-      baseURL: apiUrl,
-    }
-  );
+  await axios.post('/auth/new-account', { username, password }, { baseURL: apiUrl });
 }
 
 export async function loginUser(username: string, password: string): Promise<string> {
   try {
-    const { data } = await axios.post(
-      '/auth/login',
-      { username, password },
-      {
-        baseURL: apiUrl,
-      }
-    );
+    const { data } = await axios.post('/auth/login', { username, password }, { baseURL: apiUrl });
     return data.accessToken;
   } catch (e: any) {
     switch (e.response?.status) {
