diff --git a/client/src/pages/Teams/TeamsMembers/index.tsx b/client/src/pages/Teams/TeamsMembers/index.tsx
index 397921b4343dffa5292af4e549b07a65cdf6fde4..f8ce078b75a9bcd30e35581a15b8dc16fc5845de 100644
--- a/client/src/pages/Teams/TeamsMembers/index.tsx
+++ b/client/src/pages/Teams/TeamsMembers/index.tsx
@@ -19,32 +19,39 @@ export default function TeamsMembers({ members, team }: Props) {
     const [roles, setRoles] = useState<TeamRole[]>();
 
     useEffect(() => {
-        getTeamRoles(team.id).then((roles) => {
-            setRoles(roles);
-        })
+        getTeamRoles(team.id).then(setRoles);
     }, [team]);
     
-    let teamMembers;
-    if (roles) {
-        teamMembers = members.map(member => ({
-            user: member,
-            info: member.role.name,
-            settings: [{
-                label: 'Edit role',
-                popupContent: (
-                    <>
-                        <RoleForm setRoles={setRoles} roles={roles} team={team} member={member} />
-                    </>
-                )
-            }]
-        }));
-    }
-
     return (
         <section className="teams-members-section">
             {
-                (roles && teamMembers)
-                    ? <MemberList members={teamMembers} addContent={<MemberForm setRoles={setRoles} roles={roles} team={team} />} />
+                roles
+                    ? (
+                        <MemberList
+                            members={members.map(member => ({
+                                user: member,
+                                info: member.role.name,
+                                settings: [{
+                                    label: 'Edit role',
+                                    popupContent: (
+                                        <RoleForm
+                                            setRoles={setRoles}
+                                            roles={roles}
+                                            team={team}
+                                            member={member}
+                                        />
+                                    )
+                                }]
+                            }))}
+                            addContent={
+                                <MemberForm
+                                    setRoles={setRoles}
+                                    roles={roles}
+                                    team={team}
+                                />
+                            }
+                        />
+                    )
                     : <LoadingScreen />
             }
         </section>
diff --git a/client/src/pages/Teams/index.tsx b/client/src/pages/Teams/index.tsx
index 3903602026ea3195b15a560ae8bfa94ab9718d47..62c445a848bd3fbc7ba4b7894840959bc15569e6 100644
--- a/client/src/pages/Teams/index.tsx
+++ b/client/src/pages/Teams/index.tsx
@@ -1,16 +1,16 @@
 
 import { useHistory, useParams } from 'react-router';
-import { useCallback, useEffect, useState } from 'react';
+import { useCallback, useEffect, useMemo, useState } from 'react';
 
-import { getTeamMembers, getTeamProjects, getTeams, leaveTeam, Team } from 'adapters/team';
+import { getTeamMembers, getTeamProjects, getTeams, leaveTeam, Team, TeamMember } from 'adapters/team';
+import { Project } from 'adapters/project';
 
 import Button from 'components/ui/Button';
-import { DetailProps } from 'components/ui/DetailBox';
 import DetailGrid from 'components/layout/DetailGrid';
-import Tabs, { Tab } from 'components/navigation/Tabs';
+import Tabs from 'components/navigation/Tabs';
 import LoadingScreen from 'components/ui/LoadingScreen';
 import ButtonLink from 'components/navigation/ButtonLink';
-import Dropdown, { DropDownItem } from 'components/navigation/Dropdown';
+import Dropdown from 'components/navigation/Dropdown';
 
 import TeamsMembers from './TeamsMembers';
 import TeamsStats from './TeamsStats';
@@ -22,81 +22,84 @@ export interface Params {
 }
 
 export default function Teams() {
-    const [tabs, setTabs] = useState<Tab[]>([]);
-    const [allTeams, setTeams] = useState<Team[]>();
-    const [currentTeam, setCurrentTeam] = useState<Team>();
-    const [details, setDetails] = useState<DetailProps[]>([]);
-    const [pageLinks, setPageLinks] = useState<DropDownItem[]>([]);
+    const [teams, setTeams] = useState<Team[]>();
+    const [projects, setProjects] = useState<Project[]>([]);
+    const [members, setMembers] = useState<TeamMember[]>([]);
     const history = useHistory();
 
-    const { teamId } = useParams<Params>();
+    const { teamId: teamParamId } = useParams<Params>();
+    const teamId = teamParamId ?? teams?.[0]?.id
+
+    let currentTeam = teams?.find(team => team.id === teamId);
 
     useEffect(() => {
-        getTeams()
-            .then((teams) => {
-                //if no team is defined, take the first one
-                if ((!teamId && teams[0]) || !teams.find(team => team.id === teamId)) {
-                    history.push('/teams/' + teams[0].id);
-                }
-                setTeams(teams);
-                setCurrentTeam(teams.find(team => team.id === teamId));
-            })
-            .catch(() => { });
-    }, [teamId, history]);
+        if (teams && (!currentTeam || !teamParamId)) {
+            if (teams.length > 0) {
+                // if no team is defined, take the first one
+                history.replace('/teams/' + teams[0].id);
+            } else {
+                history.push('/introduction');
+            }
+        }
+    });
 
     useEffect(() => {
-        if (currentTeam && allTeams) {
-            getTeamProjects(currentTeam.id).then((projects) => {
-                setDetails((state) => state
-                    .filter(detail => detail.title !== 'Projects')
-                    .concat({
-                        icon: 'folder',
-                        title: 'Projects',
-                        number: projects.length
-                    })
-                );
-            });
-            getTeamMembers(currentTeam.id).then((members) => {
-                setDetails((state) =>
-                    state
-                        .filter(detail => detail.title !== 'Members')
-                        .concat({
-                            icon: 'group',
-                            title: 'Members',
-                            number: members.length
-                        })
-                );
-                setTabs([
-                    {
-                        route: '/teams/' + currentTeam.id,
-                        label: 'Members',
-                        component: (<TeamsMembers members={members} team={currentTeam} />)
-                    }, {
-                        route: '/teams/' + currentTeam.id + '/stats/:time',
-                        link: '/teams/' + currentTeam.id + '/stats/week',
-                        label: 'Stats',
-                        component: <TeamsStats teamId={currentTeam.id} />
-                    }
-                ]);
-            });
-            //update Tabs link
-            setPageLinks(allTeams.filter(team => currentTeam.id !== team.id).map(team => {
-                return {
-                    route: '/teams/' + team.id,
-                    label: team.name,
-                }
-            }));
+        getTeams().then(setTeams);
+    }, []);
+
+    useEffect(() => {
+        if (teamId) {
+            getTeamProjects(teamId).then(setProjects);
+        }
+    }, [teamId]);
+
+    useEffect(() => {
+        if (teamId) {
+            getTeamMembers(teamId).then(setMembers);
         }
-    }, [currentTeam, allTeams]);
+    }, [teamId]);
 
     const leaveCurrentTeam = useCallback(async () => {
-        if (currentTeam) {
-            await leaveTeam(currentTeam.id);
-            history.go(0);
+        if (teamId && teams) {
+            await leaveTeam(teamId);
+            setTeams(teams.filter(team => team.id !== teamId));
+        }
+    }, [teams, teamId])
+
+    const tabs = useMemo(() => currentTeam && members && [
+        {
+            route: '/teams/' + currentTeam.id,
+            label: 'Members',
+            component: (<TeamsMembers members={members} team={currentTeam} />)
+        }, {
+            route: '/teams/' + currentTeam.id + '/stats/:time',
+            link: '/teams/' + currentTeam.id + '/stats/week',
+            label: 'Stats',
+            component: <TeamsStats teamId={currentTeam.id} />
+        }
+    ], [currentTeam, members]);
+
+    const dropdownList = useMemo(() => teamId && teams && (
+        teams.filter(team => team.id !== teamId).map(team => ({
+            route: '/teams/' + team.id,
+            label: team.name,
+        }))
+    ), [teams, teamId]);
+
+    const details = useMemo(() => members && projects && [
+        {
+            icon: 'folder',
+            title: 'Projects',
+            number: projects.length
+        },
+        {
+            icon: 'group',
+            title: 'Members',
+            number: members.length
         }
-    }, [currentTeam, history])
+    ], [members, projects]);
 
-    if (currentTeam) {
+    if (teamId) {
         return (
             <div className="teams-page">
                 <div className="content-container">
@@ -105,9 +108,9 @@ export default function Teams() {
                         <p>Here you can see information about your teams, as well as its stats and members.</p>
                     </div>
                     {
-                        allTeams
+                        dropdownList
                             ? (
-                                <Dropdown items={pageLinks}>
+                                <Dropdown items={dropdownList}>
                                     <h2>{currentTeam?.name}</h2>
                                     <span className="material-icons icon">
                                         expand_more
@@ -118,7 +121,7 @@ export default function Teams() {
                     }
                     {
                         details
-                            ? (<DetailGrid details={details} />)
+                            ? <DetailGrid details={details} />
                             : (<LoadingScreen />)
                     }
                     <div className="buttons">
@@ -131,7 +134,7 @@ export default function Teams() {
                             </ButtonLink>
                         </div>
                         {
-                            allTeams && allTeams.length > 1 && (
+                            teams && teams.length > 1 && (
                                 <Button className="expanded dark" onClick={leaveCurrentTeam}>
                                     Leave Team
                                 </Button>
@@ -140,8 +143,8 @@ export default function Teams() {
                     </div>
                     {
                         tabs
-                            ? (<Tabs tabs={tabs} />)
-                            : (<LoadingScreen />)
+                            ? <Tabs tabs={tabs} />
+                            : <LoadingScreen />
                     }
                 </div>
             </div>