Index: iknow-api/Repository/Implementations/UserRepository.cs
===================================================================
--- iknow-api/Repository/Implementations/UserRepository.cs	(revision 691f152bd55c9f383727616f191bbda6ee1abcfb)
+++ iknow-api/Repository/Implementations/UserRepository.cs	(revision 848c1c5194747c1b210def9e3ef010aed5d06415)
@@ -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();
         }
