Index: iknow-api/Repository/Implementations/UserRepository.cs
===================================================================
--- iknow-api/Repository/Implementations/UserRepository.cs	(revision 691f152bd55c9f383727616f191bbda6ee1abcfb)
+++ iknow-api/Repository/Implementations/UserRepository.cs	(revision 4b35197f33eaeb2b932700e150e05058b7d4f366)
@@ -66,6 +66,28 @@
         {
             return await _context.EnrolledSemesters
+                .AsNoTracking()
                 .Include(es => es.Major)
+                .Include(es => es.Semester)
+                .Include(es => es.SemesterSubjects)
+                    .ThenInclude(ss => ss.Subject)
+                .Include(es => es.SemesterSubjects)
+                    .ThenInclude(ss => ss.Professor)
                 .Where(es => es.UserId == id)
+                .AsSplitQuery() // This helps avoid cartesian explosion
+                .ToListAsync();
+        }
+
+        public async Task<List<PassedSubject>> GetUserPassedSubjectsAsync(int id)
+        {
+            return await _context.PassedSubjects
+                .AsNoTracking()
+                .Include(ps => ps.SemesterSubject)
+                    .ThenInclude(ss => ss.Subject)
+                .Include(ps => ps.SemesterSubject)
+                    .ThenInclude(ss => ss.EnrolledSemester)
+                        .ThenInclude(es => es.Semester)
+                .Include(ps => ps.SemesterSubject)
+                    .ThenInclude(ss => ss.Professor)
+                .Where(ps => ps.SemesterSubject.UserId == id)
                 .ToListAsync();
         }
