Index: backend/auth_form/serializers.py
===================================================================
--- backend/auth_form/serializers.py	(revision ea25fae4cae40e08d4102a7196ef60bd226f3c4f)
+++ backend/auth_form/serializers.py	(revision 666344defb4cc10ccede9c512f0e4bb0d5328196)
@@ -84,9 +84,8 @@
     def to_representation(self, instance):
         rep = super().to_representation(instance)
-        rep['passed_subjects'] = SubjectSerializer(instance.passed_subjects.all(), many=True).data
+        rep['passed_subjects'] = [subject.id for subject in instance.passed_subjects.all()]
+        all_subject_ids = [subj_id for subjects in (instance.passed_subjects_per_semester or {}).values() for subj_id in subjects]
         rep['passed_subjects_per_semester'] = {
-            str(sem): SubjectSerializer(
-                Subject.objects.filter(id__in=subjects), many=True
-            ).data
+            str(sem): [ subj_id for subj_id in subjects]
             for sem, subjects in (instance.passed_subjects_per_semester or {}).items()
         }
Index: frontend/src/components/StudentForm/StudentForm.tsx
===================================================================
--- frontend/src/components/StudentForm/StudentForm.tsx	(revision ea25fae4cae40e08d4102a7196ef60bd226f3c4f)
+++ frontend/src/components/StudentForm/StudentForm.tsx	(revision 666344defb4cc10ccede9c512f0e4bb0d5328196)
@@ -1,3 +1,5 @@
 import { useCallback, useEffect, useState } from "react";
+import { toast } from "react-toastify";
+import axiosInstance from "../../api/axiosInstance";
 import {
 	EVALUATIONS,
@@ -18,7 +20,7 @@
 	LatinToCyrillic,
 	mapToID,
+	mapToSubjects,
 	validateForm,
 } from "./utils";
-import axiosInstance from "../../api/axiosInstance";
 
 interface StudentFormProps {
@@ -35,4 +37,5 @@
 
 const StudentForm = ({ formData, isLoading }: StudentFormProps) => {
+	const [subjects] = useSubjects();
 	const [hasSubmitted, setHasSubmitted] = useState(false);
 	const [validationErrors, setValidationErrors] = useState<{
@@ -47,5 +50,6 @@
 		Record<number, Subject[]>
 	>(
-		formData?.passed_subjects_per_semester ??
+		(formData?.passed_subjects_per_semester &&
+			mapToSubjects(formData.passed_subjects_per_semester, subjects || [])) ||
 			Object.fromEntries(Array.from({ length: 8 }, (_, i) => [[i + 1], []]))
 	);
@@ -86,5 +90,4 @@
 	const [showProfessors, setShowProfessors] = useState(false);
 	const [showAssistants, setShowAssistants] = useState(false);
-	const [subjects] = useSubjects();
 	const [distinctSubjectData, setDistinctSubjectData] =
 		useState<DistinctSubjectData>({
@@ -102,4 +105,23 @@
 	// Update form when formData changes (e.g., after fetching user data)
 	useEffect(() => {
+		const fetchFormData = async (token: string) => {
+			try {
+				const response = await axiosInstance.get<StudentData>("/auth/form/", {
+					headers: { Authorization: `Bearer ${token}` },
+				});
+				setFormData(response.data);
+			} catch (error) {
+				console.error("Could not fetch user form data", error);
+				if ((error as any).response?.status !== 401) {
+					toast.error("Could not load form data.");
+				}
+			}
+		};
+		const token = localStorage.getItem("access");
+		if (token) {
+			fetchFormData(token);
+		}
+	}, []);
+	useEffect(() => {
 		if (formData) {
 			setIndex(formData.index || "");
@@ -139,6 +161,19 @@
 			setFavoriteAssistants(favoriteAssistants_);
 
-			setPassedSubjectsPerSemester(formData.passed_subjects_per_semester || []);
-
+			if (
+				formData.passed_subjects_per_semester &&
+				subjects &&
+				subjects.length > 0
+			) {
+				const mappedSubjects = mapToSubjects(
+					formData.passed_subjects_per_semester,
+					subjects
+				);
+				setPassedSubjectsPerSemester(mappedSubjects);
+			} else {
+				setPassedSubjectsPerSemester(
+					Object.fromEntries(Array.from({ length: 8 }, (_, i) => [[i + 1], []]))
+				);
+			}
 			setHasExtracurricular(formData.has_extracurricular || false);
 		}
Index: frontend/src/components/StudentForm/utils.ts
===================================================================
--- frontend/src/components/StudentForm/utils.ts	(revision ea25fae4cae40e08d4102a7196ef60bd226f3c4f)
+++ frontend/src/components/StudentForm/utils.ts	(revision 666344defb4cc10ccede9c512f0e4bb0d5328196)
@@ -125,4 +125,25 @@
 };
 
+export const mapToSubjects = (
+	passedSubjects: Record<string, number[]> | Record<number, Subject[]>,
+	subjects: Subject[]
+) => {
+	const mapped = Object.fromEntries(
+		Object.entries(passedSubjects).map(([semester, subjectIDs]) => [
+			semester,
+			subjectIDs
+				.map((id: SubjectID) => subjects.find((s) => s.id === id))
+				.filter(Boolean),
+		])
+	);
+	const normalized: Record<number, Subject[]> = Object.fromEntries(
+		Object.entries(mapped).map(([k, arr]) => [
+			Number(k),
+			(arr as (Subject | undefined)[]).filter((s): s is Subject => !!s),
+		])
+	);
+	return normalized || {};
+};
+
 export const getPassedSubjects = (
 	passedSubjects: Record<number, Subject[]>
Index: frontend/src/components/types.ts
===================================================================
--- frontend/src/components/types.ts	(revision ea25fae4cae40e08d4102a7196ef60bd226f3c4f)
+++ frontend/src/components/types.ts	(revision 666344defb4cc10ccede9c512f0e4bb0d5328196)
@@ -25,5 +25,5 @@
 	has_filled_form: boolean;
 	has_extracurricular: boolean;
-	passed_subjects_per_semester: Record<number, Subject[] | []>;
+	passed_subjects_per_semester: Record<string, number[]> | [];
 }
 
Index: frontend/src/context/AuthProvider.tsx
===================================================================
--- frontend/src/context/AuthProvider.tsx	(revision ea25fae4cae40e08d4102a7196ef60bd226f3c4f)
+++ frontend/src/context/AuthProvider.tsx	(revision 666344defb4cc10ccede9c512f0e4bb0d5328196)
@@ -1,15 +1,14 @@
+import { jwtDecode } from "jwt-decode";
 import React, {
+	ReactNode,
+	useCallback,
+	useEffect,
 	useRef,
 	useState,
-	useEffect,
-	ReactNode,
-	useCallback,
 } from "react";
+import { toast } from "react-toastify";
 import axiosInstance from "../api/axiosInstance";
-import { jwtDecode } from "jwt-decode";
-import { toast } from "react-toastify";
 import { StudentData } from "../components/types";
-import { User } from "../context/AuthContext";
-import AuthContext, { AuthContextType } from "../context/AuthContext";
+import AuthContext, { AuthContextType, User } from "../context/AuthContext";
 
 interface DecodedToken {
@@ -216,17 +215,17 @@
 	}, []);
 
-	const fetchFormData = useCallback(async (token: string) => {
-		try {
-			const response = await axiosInstance.get<StudentData>("/auth/form/", {
-				headers: { Authorization: `Bearer ${token}` },
-			});
-			setFormData(response.data);
-		} catch (error) {
-			console.error("Could not fetch user form data", error);
-			if ((error as any).response?.status !== 401) {
-				toast.error("Could not load form data.");
-			}
-		}
-	}, []);
+	// const fetchFormData = useCallback(async (token: string) => {
+	// 	try {
+	// 		const response = await axiosInstance.get<StudentData>("/auth/form/", {
+	// 			headers: { Authorization: `Bearer ${token}` },
+	// 		});
+	// 		setFormData(response.data);
+	// 	} catch (error) {
+	// 		console.error("Could not fetch user form data", error);
+	// 		if ((error as any).response?.status !== 401) {
+	// 			toast.error("Could not load form data.");
+	// 		}
+	// 	}
+	// }, []);
 
 	const login = useCallback(
@@ -238,7 +237,10 @@
 			setUser(userData);
 			scheduleProactiveRefresh(newAccessToken);
-			await fetchFormData(newAccessToken);
+			// await fetchFormData(newAccessToken);
 		},
-		[fetchFormData, scheduleProactiveRefresh]
+		[
+			// fetchFormData,
+			scheduleProactiveRefresh,
+		]
 	);
 
@@ -250,10 +252,15 @@
 				setRefreshToken(localStorage.getItem("refresh"));
 				scheduleProactiveRefresh(token);
-				await Promise.all([fetchUser(token), fetchFormData(token)]);
+				await Promise.all([fetchUser(token)]);
+				// await Promise.all([fetchUser(token), fetchFormData(token)]);
 			}
 			setLoading(false);
 		};
 		initializeAuth();
-	}, [fetchUser, fetchFormData, scheduleProactiveRefresh]);
+	}, [
+		fetchUser,
+		// fetchFormData,
+		scheduleProactiveRefresh,
+	]);
 
 	const contextValue: AuthContextType = {
Index: frontend/src/context/PreferencesContext.tsx
===================================================================
--- frontend/src/context/PreferencesContext.tsx	(revision ea25fae4cae40e08d4102a7196ef60bd226f3c4f)
+++ frontend/src/context/PreferencesContext.tsx	(revision 666344defb4cc10ccede9c512f0e4bb0d5328196)
@@ -4,14 +4,16 @@
 	useCallback,
 	useContext,
-	useEffect,
 	useState,
 } from "react";
 import { toast } from "react-toastify";
+import axiosInstance from "../api/axiosInstance";
 import { useAuth } from "../hooks/useAuth";
-import axiosInstance from "../api/axiosInstance";
 interface PreferencesContextType {
 	favoriteIds: Set<number>;
+	setFavoriteIds: React.Dispatch<React.SetStateAction<Set<number>>>;
 	likedIds: Set<number>;
+	setLikedIds: React.Dispatch<React.SetStateAction<Set<number>>>;
 	dislikedIds: Set<number>;
+	setDislikedIds: React.Dispatch<React.SetStateAction<Set<number>>>;
 	toggleFavorite: (subjectId: number) => Promise<void>;
 	toggleLike: (subjectId: number) => Promise<void>;
@@ -30,29 +32,4 @@
 	const [likedIds, setLikedIds] = useState<Set<number>>(new Set());
 	const [dislikedIds, setDislikedIds] = useState<Set<number>>(new Set());
-
-	useEffect(() => {
-		if (accessToken) {
-			setIsLoading(true);
-			axiosInstance
-				.get<{
-					favorite_ids: number[];
-					liked_ids: number[];
-					disliked_ids: number[];
-				}>("/student/preferences/")
-				.then((response) => {
-					setFavoriteIds(new Set(response.data.favorite_ids || []));
-					setLikedIds(new Set(response.data.liked_ids || []));
-					setDislikedIds(new Set(response.data.disliked_ids || []));
-				})
-				.catch((error) => console.error("Failed to fetch preferences:", error))
-				.finally(() => setIsLoading(false));
-		} else {
-			// If user logs out, clear preferences
-			setFavoriteIds(new Set());
-			setLikedIds(new Set());
-			setDislikedIds(new Set());
-			setIsLoading(false);
-		}
-	}, [accessToken]);
 
 	const toggleFavorite = useCallback(
@@ -164,6 +141,9 @@
 	const value = {
 		favoriteIds,
+		setFavoriteIds,
 		likedIds,
+		setLikedIds,
 		dislikedIds,
+		setDislikedIds,
 		toggleFavorite,
 		toggleLike,
Index: frontend/src/pages/Recommendations.tsx
===================================================================
--- frontend/src/pages/Recommendations.tsx	(revision ea25fae4cae40e08d4102a7196ef60bd226f3c4f)
+++ frontend/src/pages/Recommendations.tsx	(revision 666344defb4cc10ccede9c512f0e4bb0d5328196)
@@ -1,16 +1,19 @@
-import { useMemo, useState } from "react";
+import { useEffect, useMemo, useState } from "react";
 import { useNavigate } from "react-router-dom";
+import axiosInstance from "../api/axiosInstance";
 import SubjectCard from "../components/SubjectCatalog/SubjectCard";
 import SubjectModal from "../components/SubjectCatalog/SubjectModal";
 import { getSubjectPrerequisites } from "../components/SubjectCatalog/utils";
 import { Subject } from "../components/types";
+import { usePreferences } from "../context/PreferencesContext";
 import { useRecommendations } from "../context/RecommendationsContext";
 import { useSubjects } from "../context/SubjectsContext";
 import { useAuth } from "../hooks/useAuth";
-import axiosInstance from "../api/axiosInstance";
 
 const Recommendations = () => {
 	const navigate = useNavigate();
+	const { setFavoriteIds, setLikedIds, setDislikedIds } = usePreferences();
 	const { formData } = useAuth();
+	const { accessToken } = useAuth();
 	const [subjects] = useSubjects();
 	const [recommendations, setRecommendations] = useRecommendations();
@@ -19,5 +22,4 @@
 	const [showModal, setShowModal] = useState(false);
 	const [hasSearched, setHasSearched] = useState(false);
-
 	const mapToSeasonInt = (season: "winter" | "summer" | "all") => {
 		if (season == "summer") return 0;
@@ -100,4 +102,29 @@
 		}
 	};
+
+	useEffect(() => {
+		const accessToken = localStorage.getItem("access");
+		if (accessToken) {
+			setIsLoading(true);
+			axiosInstance
+				.get<{
+					favorite_ids: number[];
+					liked_ids: number[];
+					disliked_ids: number[];
+				}>("/student/preferences/")
+				.then((response) => {
+					setFavoriteIds(new Set(response.data.favorite_ids || []));
+					setLikedIds(new Set(response.data.liked_ids || []));
+					setDislikedIds(new Set(response.data.disliked_ids || []));
+				})
+				.catch((error) => console.error("Failed to fetch preferences:", error))
+				.finally(() => setIsLoading(false));
+		} else {
+			setFavoriteIds(new Set());
+			setLikedIds(new Set());
+			setDislikedIds(new Set());
+			setIsLoading(false);
+		}
+	}, [accessToken]);
 
 	return (
Index: frontend/src/pages/SubjectPreferences.tsx
===================================================================
--- frontend/src/pages/SubjectPreferences.tsx	(revision ea25fae4cae40e08d4102a7196ef60bd226f3c4f)
+++ frontend/src/pages/SubjectPreferences.tsx	(revision 666344defb4cc10ccede9c512f0e4bb0d5328196)
@@ -1,3 +1,4 @@
 import { useEffect, useState } from "react";
+import axiosInstance from "../api/axiosInstance";
 import SkeletonCard from "../components/SubjectCatalog/SkeletonCard";
 import SubjectList from "../components/SubjectCatalog/SubjectList";
@@ -7,8 +8,18 @@
 import { usePreferences } from "../context/PreferencesContext";
 import { useSubjects } from "../context/SubjectsContext";
+import { useAuth } from "../hooks/useAuth";
 
 const SubjectPreferences = () => {
 	const [subjects] = useSubjects();
-	const { favoriteIds, likedIds, dislikedIds } = usePreferences();
+	const { accessToken } = useAuth();
+	const [isLoading, setIsLoading] = useState(true);
+	const {
+		favoriteIds,
+		setFavoriteIds,
+		likedIds,
+		setLikedIds,
+		dislikedIds,
+		setDislikedIds,
+	} = usePreferences();
 	const [visibleCourses, setVisibleCourses] = useState<number>(12);
 	const [selectedSubject, setSelectedSubject] = useState<Subject | null>(null);
@@ -51,4 +62,29 @@
 		return map;
 	};
+
+	useEffect(() => {
+		const accessToken = localStorage.getItem("access");
+		if (accessToken) {
+			setIsLoading(true);
+			axiosInstance
+				.get<{
+					favorite_ids: number[];
+					liked_ids: number[];
+					disliked_ids: number[];
+				}>("/student/preferences/")
+				.then((response) => {
+					setFavoriteIds(new Set(response.data.favorite_ids || []));
+					setLikedIds(new Set(response.data.liked_ids || []));
+					setDislikedIds(new Set(response.data.disliked_ids || []));
+				})
+				.catch((error) => console.error("Failed to fetch preferences:", error))
+				.finally(() => setIsLoading(false));
+		} else {
+			setFavoriteIds(new Set());
+			setLikedIds(new Set());
+			setDislikedIds(new Set());
+			setIsLoading(false);
+		}
+	}, [accessToken]);
 
 	const favoriteSubjects = () => {
