Index: backend/auth_form/migrations/0008_student_passed_subjects_per_semester.py
===================================================================
--- backend/auth_form/migrations/0008_student_passed_subjects_per_semester.py	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ backend/auth_form/migrations/0008_student_passed_subjects_per_semester.py	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
@@ -0,0 +1,18 @@
+# Generated by Django 5.1.7 on 2025-06-01 10:34
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('auth_form', '0007_alter_student_study_track'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='student',
+            name='passed_subjects_per_semester',
+            field=models.JSONField(blank=True, null=True),
+        ),
+    ]
Index: backend/auth_form/migrations/0009_student_l1_credits_student_l2_credits_and_more.py
===================================================================
--- backend/auth_form/migrations/0009_student_l1_credits_student_l2_credits_and_more.py	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ backend/auth_form/migrations/0009_student_l1_credits_student_l2_credits_and_more.py	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
@@ -0,0 +1,33 @@
+# Generated by Django 5.1.7 on 2025-06-01 12:11
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('auth_form', '0008_student_passed_subjects_per_semester'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='student',
+            name='l1_credits',
+            field=models.PositiveIntegerField(null=True),
+        ),
+        migrations.AddField(
+            model_name='student',
+            name='l2_credits',
+            field=models.PositiveIntegerField(null=True),
+        ),
+        migrations.AddField(
+            model_name='student',
+            name='l3_credits',
+            field=models.PositiveIntegerField(null=True),
+        ),
+        migrations.AddField(
+            model_name='student',
+            name='total_credits',
+            field=models.PositiveIntegerField(null=True),
+        ),
+    ]
Index: backend/auth_form/migrations/0010_remove_student_l1_credits_remove_student_l2_credits_and_more.py
===================================================================
--- backend/auth_form/migrations/0010_remove_student_l1_credits_remove_student_l2_credits_and_more.py	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ backend/auth_form/migrations/0010_remove_student_l1_credits_remove_student_l2_credits_and_more.py	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
@@ -0,0 +1,32 @@
+# Generated by Django 5.1.7 on 2025-06-01 12:26
+
+import django.contrib.postgres.fields
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('auth_form', '0009_student_l1_credits_student_l2_credits_and_more'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='student',
+            name='l1_credits',
+        ),
+        migrations.RemoveField(
+            model_name='student',
+            name='l2_credits',
+        ),
+        migrations.RemoveField(
+            model_name='student',
+            name='l3_credits',
+        ),
+        migrations.AddField(
+            model_name='student',
+            name='level_credits',
+            field=django.contrib.postgres.fields.ArrayField(base_field=models.PositiveIntegerField(null=True), default=[], size=None),
+            preserve_default=False,
+        ),
+    ]
Index: backend/auth_form/migrations/0011_alter_student_level_credits.py
===================================================================
--- backend/auth_form/migrations/0011_alter_student_level_credits.py	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
+++ backend/auth_form/migrations/0011_alter_student_level_credits.py	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
@@ -0,0 +1,19 @@
+# Generated by Django 5.1.7 on 2025-06-01 13:25
+
+import django.contrib.postgres.fields
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('auth_form', '0010_remove_student_l1_credits_remove_student_l2_credits_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='student',
+            name='level_credits',
+            field=django.contrib.postgres.fields.ArrayField(base_field=models.PositiveIntegerField(null=True), blank=True, null=True, size=None),
+        ),
+    ]
Index: backend/auth_form/models.py
===================================================================
--- backend/auth_form/models.py	(revision 71ca00d1b104c70989b65ccac186408b953d831a)
+++ backend/auth_form/models.py	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
@@ -63,8 +63,11 @@
     preferred_evaluation = ArrayField(models.CharField(max_length=16), null=True, blank=True)
     favorite_professors = ArrayField(models.CharField(max_length=64), null=True, blank=True)
+    passed_subjects = models.ManyToManyField('subjects.subject', related_name="passed_subjects", blank=True)
+    total_credits = models.PositiveIntegerField(null=True)
+    level_credits = ArrayField(models.PositiveIntegerField(null=True), null=True, blank=True)
+    
+    # {1: [s1, s2, s3...], 2: [....], ...}
+    passed_subjects_per_semester = models.JSONField(blank=True, null=True) 
 
-    passed_subjects = models.ManyToManyField('subjects.subject', related_name="passed_subjects", blank=True)
-
-    
 
     def update_info(self, new_preferences):
Index: frontend/src/components/StudentForm/StudentForm.tsx
===================================================================
--- frontend/src/components/StudentForm/StudentForm.tsx	(revision 71ca00d1b104c70989b65ccac186408b953d831a)
+++ frontend/src/components/StudentForm/StudentForm.tsx	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
@@ -8,5 +8,5 @@
 } from "../../constants/subjects";
 import { useAuth } from "../../hooks/useAuth";
-import { Programs, StudentData, Subject } from "../types";
+import { Programs, StudentData, Subject, SubjectID } from "../types";
 import SkeletonForm from "./SkeletonForm";
 import SubjectsSelector from "./SubjectsSelector";
@@ -38,4 +38,12 @@
 	const [passedSubjects, setPassedSubjects] = useState<Subject[]>(
 		formData?.passed_subjects || []
+	);
+	const [passedSubjectsPerSemester, setPassedSubjectsPerSemester] = useState<
+		Record<number, SubjectID[]>
+	>(
+		formData?.passed_subjects_per_semester ??
+			Object.fromEntries(
+				Array.from({ length: 8 }, (_, i) => [i + 1, [] as SubjectID[]])
+			)
 	);
 	const [studyEffort, setStudyEffort] = useState(formData?.study_effort || "");
@@ -93,4 +101,8 @@
 			setEvaluation(formData.preferred_evaluation || []);
 			setFavoriteProfs(formData.favorite_professors || []);
+			setPassedSubjectsPerSemester(
+				formData.passed_subjects_per_semester ||
+					Object.fromEntries(Array.from({ length: 8 }, (_, i) => [i + 1, []]))
+			);
 		}
 	}, [formData]);
@@ -166,11 +178,61 @@
 	};
 
-	const toggleSubject = (subject: Subject) => {
-		const exists = passedSubjects.some((s) => s.id === subject.id);
-		if (exists) {
-			setPassedSubjects(passedSubjects.filter((s) => s.id !== subject.id));
+	// const toggleSubject = (subject: Subject) => {
+	// 	const exists = passedSubjects.some((s) => s.id === subject.id);
+	// 	if (exists) {
+	// 		setPassedSubjects(passedSubjects.filter((s) => s.id !== subject.id));
+	// 	} else {
+	// 		setPassedSubjects([...passedSubjects, subject]);
+	// 	}
+	// };
+
+	const toggleSubjectByID = (id: SubjectID, semester: number) => {
+		const exists_table1 = passedSubjects.some((s) => s.id === id);
+		const exists_table2 = passedSubjectsPerSemester[semester]?.includes(id);
+		if (exists_table1 !== exists_table2) {
+			alert("ABSDSAADSKNDSAKNASADSNADSKNDASKADSN");
+			throw Error;
+		}
+		if (exists_table1) {
+			setPassedSubjects(passedSubjects.filter((s) => s.id !== id));
+			setPassedSubjectsPerSemester({
+				...passedSubjectsPerSemester,
+				[semester]: passedSubjectsPerSemester[semester].filter(
+					(id_: SubjectID) => id_ != id
+				),
+			});
 		} else {
-			setPassedSubjects([...passedSubjects, subject]);
+			const subject = subjects.find((s) => s.id == id);
+			if (subject) {
+				setPassedSubjects([...passedSubjects, subject]);
+				setPassedSubjectsPerSemester({
+					...passedSubjectsPerSemester,
+					[semester]: [...(passedSubjectsPerSemester[semester] || []), id],
+				});
+			}
 		}
+	};
+	const getLevelCredits = () => {
+		return passedSubjects.reduce(
+			(acc, subject) => {
+				if (
+					studyTrack &&
+					!subject.subject_info.mandatory_for.includes(studyTrack)
+				) {
+					const level = subject.subject_info.level;
+					acc[level - 1] += 6;
+				}
+				return acc;
+			},
+			[0, 0, 0]
+		);
+	};
+
+	const getCredits = () => {
+		const credits = (passedSubjects.length + Number(hasExtracurricular)) * 6;
+		return passedSubjects.some((s) => s.name == "Професионални вештини") &&
+			passedSubjects.some((s) => s.name == "Спорт и здравје")
+			? credits - 6
+			: credits;
 	};
 
@@ -195,5 +257,4 @@
 			isError: false,
 		});
-
 		const payload = {
 			index,
@@ -208,4 +269,7 @@
 			),
 			favorite_professors: favoriteProfs,
+			passed_subjects_per_semester: passedSubjectsPerSemester,
+			total_credits: getCredits(),
+			level_credits: getLevelCredits(),
 		};
 		try {
@@ -402,8 +466,11 @@
 				filteredElectiveSubjects={filteredElectiveSubjects}
 				passedSubjects={passedSubjects}
-				toggleSubject={toggleSubject}
+				// toggleSubject={toggleSubject}
+				toggleSubjectByID={toggleSubjectByID}
 				semesterSearchTerms={semesterSearchTerms}
 				setSemesterSearchTerms={setSemesterSearchTerms}
 				validationErrors={validationErrors}
+				passedSubjectsPerSemester={passedSubjectsPerSemester}
+				setPassedSubjectsPerSemester={setPassedSubjectsPerSemester}
 			/>
 			<div>
Index: frontend/src/components/StudentForm/SubjectsSelector.tsx
===================================================================
--- frontend/src/components/StudentForm/SubjectsSelector.tsx	(revision 71ca00d1b104c70989b65ccac186408b953d831a)
+++ frontend/src/components/StudentForm/SubjectsSelector.tsx	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
@@ -1,15 +1,20 @@
-import { Subject } from "../types";
+import { Dispatch, SetStateAction } from "react";
+import { Programs, Subject, SubjectID } from "../types";
 import { LatinToCyrillic } from "./utils";
 
 interface SubjectsSelectorProps {
-	studyTrack: string;
+	studyTrack: Programs | "";
 	year: number;
 	filteredMandatorySubjects: Subject[];
 	filteredElectiveSubjects: Subject[];
 	passedSubjects: Subject[];
-	toggleSubject: (subject: Subject) => void;
+	toggleSubjectByID: (id: SubjectID, semester: number) => void;
 	semesterSearchTerms: Record<number, string>;
 	setSemesterSearchTerms: (term: any) => void;
 	validationErrors: { [key: string]: string };
+	passedSubjectsPerSemester: Record<number, SubjectID[]>;
+	setPassedSubjectsPerSemester: Dispatch<
+		SetStateAction<Record<number, SubjectID[]>>
+	>;
 }
 
@@ -29,5 +34,4 @@
 	</svg>
 );
-
 function SubjectsSelector({
 	studyTrack,
@@ -36,9 +40,11 @@
 	filteredElectiveSubjects,
 	passedSubjects,
-	toggleSubject,
+	toggleSubjectByID,
 	semesterSearchTerms,
 	setSemesterSearchTerms,
 	validationErrors,
-}: SubjectsSelectorProps) {
+	passedSubjectsPerSemester,
+}: // setPassedSubjectsPerSemester,
+SubjectsSelectorProps) {
 	return (
 		<div>
@@ -82,15 +88,8 @@
 								.filter(
 									(subject) =>
-										subject.subject_info.semester === semester &&
-										semesterElectives.some(
-											(elective) => elective.id === subject.id
-										)
+										passedSubjectsPerSemester[semester]?.includes(subject.id) &&
+										!subject.subject_info.mandatory_for.includes(studyTrack)
 								)
-								.sort(
-									(a, b) =>
-										b.subject_info.participants[0] -
-										a.subject_info.participants[0]
-								);
-
+								.map((subject) => subject.id);
 							return (
 								<div
@@ -110,12 +109,14 @@
 												<div className="flex flex-wrap gap-2">
 													{semesterMandatory.map((subject) => {
-														const isSelected = passedSubjects.some(
-															(s) => s.id === subject.id
-														);
+														const isSelected = passedSubjectsPerSemester[
+															semester
+														].some((s) => s === subject.id);
 														return (
 															<button
 																type="button"
 																key={subject.id}
-																onClick={() => toggleSubject(subject)}
+																onClick={() =>
+																	toggleSubjectByID(subject.id, semester)
+																}
 																className={`flex items-center gap-2 px-3 py-2 border rounded-md transition-all duration-200 text-sm
                                   ${
@@ -148,5 +149,9 @@
 													} изборни предмети`}
 													value={semesterSearchTerms[semester] || ""}
-													className="w-full px-3 py-2 mb-2 text-sm border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500"
+													disabled={
+														selectedElectivesForSemester.length >= electiveSlots
+													}
+													className="w-full px-3 py-2 mb-2 text-sm border border-gray-300 rounded-md shadow-sm focus:outline-none 
+														focus:ring-blue-500 focus:border-blue-500  disabled:opacity-50 disabled:cursor-not-allowed"
 													onChange={(e) => {
 														setSemesterSearchTerms((prev: any) => ({
@@ -160,14 +165,22 @@
 													<div className="mb-3">
 														<div className="flex flex-wrap gap-2">
-															{selectedElectivesForSemester.map((subject) => (
+															{selectedElectivesForSemester.map((id) => (
 																<button
 																	type="button"
-																	key={subject.id}
-																	onClick={() => toggleSubject(subject)}
+																	key={id}
+																	onClick={() =>
+																		toggleSubjectByID(id, semester)
+																	}
 																	className="flex items-center gap-2 px-3 py-2 border rounded-md transition-all duration-200 text-sm bg-green-500 text-white border-green-600 shadow-md"
 																	aria-pressed={true}
 																>
 																	<TickSvg />
-																	<span>{subject.name}</span>
+																	<span>
+																		{
+																			passedSubjects.find(
+																				(item) => item.id == id
+																			)?.name
+																		}
+																	</span>
 																</button>
 															))}
@@ -186,6 +199,8 @@
 																.filter(
 																	(subject) =>
-																		!selectedElectivesForSemester.some(
-																			(selected) => selected.id === subject.id
+																		!passedSubjects.some(
+																			(s) =>
+																				s.id === subject.id &&
+																				!semesterMandatory.includes(subject)
 																		) &&
 																		((semesterSearchTerms[semester] || "") ===
@@ -216,5 +231,9 @@
 																				electiveSlots
 																			) {
-																				toggleSubject(subject);
+																				setSemesterSearchTerms((prev: any) => ({
+																					...prev,
+																					[semester]: "",
+																				}));
+																				toggleSubjectByID(subject.id, semester);
 																			}
 																		}}
Index: frontend/src/components/types.ts
===================================================================
--- frontend/src/components/types.ts	(revision 71ca00d1b104c70989b65ccac186408b953d831a)
+++ frontend/src/components/types.ts	(revision 33f2961f976659c7f76f07eff87e7fc9352402c7)
@@ -8,4 +8,6 @@
 	subject_info: SubjectInfo;
 }
+
+export type SubjectID = Subject["id"];
 
 export interface StudentData {
@@ -20,4 +22,5 @@
 	preferred_evaluation: string[];
 	favorite_professors: string[];
+	passed_subjects_per_semester: Record<number, SubjectID[] | []>;
 }
 
